From f85bf337b702fc7a338ab15f89872fc8358b71ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sat, 8 Mar 2025 13:03:23 +0100 Subject: [PATCH] Migrate authorize endpoint to http lib --- app/controllers/general.php | 44 +++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index bebfd89e4b..48cacaaec7 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -158,22 +158,6 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw $protocol = $request->getProtocol(); - // Preview authorization (configure) - if (\str_starts_with($path, '/_appwrite/authorize')) { - $jwt = $request->getParam('jwt', ''); - $path = $request->getParam('path', ''); - - $duration = 60 * 60 * 24; // 1 day in seconds - $expire = DateTime::formatTz(DateTime::addSeconds(new \DateTime(), $duration)); - - $response - ->addCookie(Auth::$cookieNamePreview, $jwt, (new \DateTime($expire))->getTimestamp(), '/', $host, ('https' === $protocol), true, null) - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Pragma', 'no-cache') - ->redirect($protocol . '://' . $host . $path); - return true; - } - // Ensure preview authorization $requirePreview = \is_null($apiKey) || !$apiKey->isPreviewAuthDisabled(); if ($isPreview && $requirePreview) { @@ -1359,6 +1343,34 @@ App::get('/v1/ping') $response->text('Pong!'); }); +// Preview authorization +App::get('/_appwrite/authorize') + ->inject('request') + ->inject('response') + ->inject('previewHostname') + ->action(function (Request $request, Response $response, string $previewHostname) { + + $host = $request->getHostname() ?? ''; + if (!empty($previewHostname)) { + $host = $previewHostname; + } + + $referrer = $request->getReferer(); + $protocol = \parse_url($request->getOrigin($referrer), PHP_URL_SCHEME); + + $jwt = $request->getParam('jwt', ''); + $path = $request->getParam('path', ''); + + $duration = 60 * 60 * 24; // 1 day in seconds + $expire = DateTime::formatTz(DateTime::addSeconds(new \DateTime(), $duration)); + + $response + ->addCookie(Auth::$cookieNamePreview, $jwt, (new \DateTime($expire))->getTimestamp(), '/', $host, ('https' === $protocol), true, null) + ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + ->addHeader('Pragma', 'no-cache') + ->redirect($protocol . '://' . $host . $path); + }); + App::wildcard() ->groups(['api']) ->label('scope', 'global')