From 11580a8a6922cbf1418784aa72b9ceea9ebeeb73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 14 Feb 2023 14:58:13 +0100 Subject: [PATCH] Update router for V3 --- app/controllers/general.php | 38 ++++++++++++++++++++++++++++---- src/Appwrite/Utopia/Response.php | 12 ++++++++++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 4988e6365d..6f1e006f91 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -44,6 +44,14 @@ Config::setParam('domainVerification', false); Config::setParam('cookieDomain', 'localhost'); Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE); +App::wildcard() + ->inject('swooleResponse') + ->action(function(SwooleResponse $swooleResponse) { + $swooleResponse->setStatusCode(404); + $swooleResponse->end('Not Found'); + return; + }); + App::init() ->inject('utopia') ->inject('swooleRequest') @@ -84,7 +92,10 @@ App::init() $body = \json_encode([ 'async' => false, - 'data' => 'Heyy' + 'body' => $swooleRequest->getContent() ?? '', + 'method' => $swooleRequest->server['request_method'], + 'path' => $swooleRequest->server['path_info'], + 'headers' => $swooleRequest->header ]); $headers = [ @@ -102,16 +113,31 @@ App::init() // \curl_setopt($ch, CURLOPT_HEADER, true); \curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); - $executionResponse = \utf8_decode(\curl_exec($ch)); + $executionResponse = \curl_exec($ch); $statusCode = \curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = \curl_error($ch); $errNo = \curl_errno($ch); \curl_close($ch); - $responseBody = \json_decode($executionResponse, true)['response']; + if($errNo !== 0) { + return $response->setStatusCode(500)->send("Internal error: " . $error); + } - return $response->setStatusCode(200)->send($responseBody); + if($statusCode >= 400) { + $error = \json_decode($executionResponse, true)['message']; + return $response->setStatusCode(500)->send("Execution error: " . $error); + } + + $execution = \json_decode($executionResponse, true); + + foreach ($execution['headers'] as $header => $value) { + if($header !== "content-length") { + $response->setHeader($header, $value); + } + } + + return $response->setStatusCode($execution['statusCode'] ?? 200)->send($execution['body'] ?? ''); } else if(\count($subdomains) === 3) { // Deployment preview $deploymentId = $subdomains[0]; @@ -137,6 +163,10 @@ App::init() $route = $utopia->match($request); Request::setRoute($route); + if($route === null) { + return $response->setStatusCode(404)->send("Not Found"); + } + $requestFormat = $request->getHeader('x-appwrite-response-format', App::getEnv('_APP_SYSTEM_RESPONSE_FORMAT', '')); if ($requestFormat) { switch ($requestFormat) { diff --git a/src/Appwrite/Utopia/Response.php b/src/Appwrite/Utopia/Response.php index a7d1bf4555..4ae9c6b37d 100644 --- a/src/Appwrite/Utopia/Response.php +++ b/src/Appwrite/Utopia/Response.php @@ -576,4 +576,16 @@ class Response extends SwooleResponse { return self::$filter != null; } + + /** + * Set Header + * + * @param string $key + * @param string $value + * @return void + */ + public function setHeader(string $key, string $value): void + { + $this->sendHeader($key, $value); + } }