|
1 | 1 | <?php |
2 | 2 |
|
3 | | -require_once __DIR__.'/../../vendor/autoload.php'; |
| 3 | +require_once __DIR__ . '/../../vendor/autoload.php'; |
4 | 4 |
|
5 | 5 | use Utopia\Http\Http; |
6 | 6 | use Utopia\Http\Adapter\FPM\Request; |
7 | 7 | use Utopia\Http\Adapter\FPM\Response; |
8 | | -use Utopia\Validator\Text; |
9 | 8 |
|
10 | 9 | ini_set('memory_limit', '1024M'); |
11 | 10 | ini_set('display_errors', '1'); |
12 | 11 | ini_set('display_startup_errors', '1'); |
13 | 12 | ini_set('display_socket_timeout', '-1'); |
14 | 13 | error_reporting(E_ALL); |
15 | 14 |
|
16 | | -Http::get('/') |
17 | | - ->inject('response') |
18 | | - ->action(function (Response $response) { |
19 | | - $response->send('Hello World!'); |
20 | | - }); |
21 | | - |
22 | | -Http::get('/value/:value') |
23 | | - ->param('value', '', new Text(64)) |
24 | | - ->inject('response') |
25 | | - ->action(function (string $value, Response $response) { |
26 | | - $response->send($value); |
27 | | - }); |
28 | | - |
29 | | -Http::get('/cookies') |
30 | | - ->inject('request') |
31 | | - ->inject('response') |
32 | | - ->action(function (Request $request, Response $response) { |
33 | | - $response->send($request->getHeaders()['cookie'] ?? ''); |
34 | | - }); |
35 | | - |
36 | | -Http::get('/set-cookie') |
37 | | - ->inject('request') |
38 | | - ->inject('response') |
39 | | - ->action(function (Request $request, Response $response) { |
40 | | - $response->addHeader('Set-Cookie', 'key1=value1'); |
41 | | - $response->addHeader('Set-Cookie', 'key2=value2'); |
42 | | - $response->send('OK'); |
43 | | - }); |
44 | | - |
45 | | -Http::get('/set-cookie-no-override') |
46 | | - ->inject('request') |
47 | | - ->inject('response') |
48 | | - ->action(function (Request $request, Response $response) { |
49 | | - $response->addHeader('Set-Cookie', 'key1=value1', override: false); |
50 | | - $response->addHeader('Set-Cookie', 'key2=value2', override: false); |
51 | | - $response->send('OK'); |
52 | | - }); |
53 | | - |
54 | | -Http::get('/chunked') |
55 | | - ->inject('response') |
56 | | - ->action(function (Response $response) { |
57 | | - foreach (['Hello ', 'World!'] as $key => $word) { |
58 | | - $response->chunk($word, $key == 1); |
59 | | - } |
60 | | - }); |
61 | | - |
62 | | -Http::get('/redirect') |
63 | | - ->inject('response') |
64 | | - ->action(function (Response $response) { |
65 | | - $response->redirect('/'); |
66 | | - }); |
67 | | - |
68 | | -Http::get('/humans.txt') |
69 | | - ->inject('response') |
70 | | - ->action(function (Response $response) { |
71 | | - $response->noContent(); |
72 | | - }); |
73 | | - |
74 | | -Http::post('/functions/deployment') |
75 | | - ->alias('/functions/deployment/:deploymentId') |
76 | | - ->param('deploymentId', '', new Text(64, 0), '', true) |
77 | | - ->inject('response') |
78 | | - ->action(function (string $deploymentId, Response $response) { |
79 | | - if (empty($deploymentId)) { |
80 | | - $response->noContent(); |
81 | | - return; |
82 | | - } |
83 | | - |
84 | | - $response->send('ID:' . $deploymentId); |
85 | | - }); |
86 | | - |
87 | | -Http::post('/databases/:databaseId/collections/:collectionId') |
88 | | - ->alias('/database/collections/:collectionId') |
89 | | - ->param('databaseId', '', new Text(64, 0), '', true) |
90 | | - ->param('collectionId', '', new Text(64, 0), '', true) |
91 | | - ->inject('response') |
92 | | - ->action(function (string $databaseId, string $collectionId, Response $response) { |
93 | | - $response->send($databaseId . ';' . $collectionId); |
94 | | - }); |
95 | | - |
96 | | -// Endpoints for early response |
97 | | -// Meant to run twice, so init hook can know if action ran |
98 | | -$earlyResponseAction = 'no'; |
99 | | -Http::init() |
100 | | - ->groups(['early-response']) |
101 | | - ->inject('response') |
102 | | - ->action(function (Response $response) use ($earlyResponseAction) { |
103 | | - $response->send('Init response. Actioned before: ' . $earlyResponseAction); |
104 | | - }); |
105 | | - |
106 | | -Http::get('/early-response') |
107 | | - ->groups(['early-response']) |
108 | | - ->inject('response') |
109 | | - ->action(function (Response $response) use (&$earlyResponseAction) { |
110 | | - $earlyResponseAction = 'yes'; |
111 | | - $response->send('Action response'); |
112 | | - }); |
113 | | - |
114 | | -// ── Streaming endpoints ── |
115 | | - |
116 | | -Http::get('/stream/generator') |
117 | | - ->inject('response') |
118 | | - ->action(function (Response $response) { |
119 | | - $chunks = ['chunk1-', 'chunk2-', 'chunk3']; |
120 | | - $totalSize = array_sum(array_map('strlen', $chunks)); |
121 | | - |
122 | | - $generator = (function () use ($chunks) { |
123 | | - foreach ($chunks as $chunk) { |
124 | | - yield $chunk; |
125 | | - } |
126 | | - })(); |
127 | | - |
128 | | - $response->stream($generator, $totalSize); |
129 | | - }); |
130 | | - |
131 | | -Http::get('/stream/callable') |
132 | | - ->inject('response') |
133 | | - ->action(function (Response $response) { |
134 | | - $data = str_repeat('A', 1000); |
135 | | - |
136 | | - $response->stream(function (int $offset, int $length) use ($data) { |
137 | | - return substr($data, $offset, $length); |
138 | | - }, strlen($data)); |
139 | | - }); |
140 | | - |
141 | | -Http::get('/stream/generator-large') |
142 | | - ->inject('response') |
143 | | - ->action(function (Response $response) { |
144 | | - $chunkSize = 100000; // 100KB per chunk |
145 | | - $numChunks = 5; |
146 | | - $totalSize = $chunkSize * $numChunks; |
147 | | - |
148 | | - $generator = (function () use ($chunkSize, $numChunks) { |
149 | | - for ($i = 0; $i < $numChunks; $i++) { |
150 | | - yield str_repeat(chr(65 + $i), $chunkSize); |
151 | | - } |
152 | | - })(); |
153 | | - |
154 | | - $response->stream($generator, $totalSize); |
155 | | - }); |
| 15 | +require_once __DIR__ . '/routes.php'; |
156 | 16 |
|
157 | 17 | $request = new Request(); |
158 | 18 | $response = new Response(); |
|
0 commit comments