1
0
Fork 0
mirror of synced 2024-07-18 21:06:22 +12:00

More QA fixes

This commit is contained in:
Matej Bačo 2023-08-06 15:11:30 +02:00
parent 345df3f2ca
commit d5fd3a28f9
6 changed files with 25 additions and 24 deletions

View file

@ -1492,7 +1492,7 @@ App::post('/v1/functions/:functionId/executions')
$headersFiltered = []; $headersFiltered = [];
foreach ($executionResponse['headers'] as $key => $value) { foreach ($executionResponse['headers'] as $key => $value) {
if (\in_array($key, FUNCTION_WHITELIST_HEADERS_REQUEST)) { if (\in_array($key, FUNCTION_WHITELIST_HEADERS_REQUEST)) {
$headersFiltered[] = [ 'key' => $key, 'value' => $value ]; $headersFiltered[] = [ 'name' => $key, 'value' => $value ];
} }
} }
@ -1536,8 +1536,13 @@ App::post('/v1/functions/:functionId/executions')
$execution->setAttribute('errors', ''); $execution->setAttribute('errors', '');
} }
$headers = [];
foreach ($executionResponse['headers'] as $key => $value) {
$headers[] = [ 'name' => $key, 'value' => $value ];
}
$execution->setAttribute('responseBody', $executionResponse['body']); $execution->setAttribute('responseBody', $executionResponse['body']);
$execution->setAttribute('responseHeaders', $executionResponse['headers']); $execution->setAttribute('responseHeaders', $headers);
$response $response
->setStatusCode(Response::STATUS_CODE_CREATED) ->setStatusCode(Response::STATUS_CODE_CREATED)

View file

@ -50,7 +50,7 @@ function router(App $utopia, Database $dbForConsole, SwooleRequest $swooleReques
$host = $request->getHostname() ?? ''; $host = $request->getHostname() ?? '';
$route = Authorization::skip( $route = Authorization::skip(
fn() => $dbForConsole->find('rules', [ fn () => $dbForConsole->find('rules', [
Query::equal('domain', [$host]), Query::equal('domain', [$host]),
Query::limit(1) Query::limit(1)
]) ])
@ -68,7 +68,7 @@ function router(App $utopia, Database $dbForConsole, SwooleRequest $swooleReques
$projectId = $route->getAttribute('projectId'); $projectId = $route->getAttribute('projectId');
$project = Authorization::skip( $project = Authorization::skip(
fn() => $dbForConsole->getDocument('projects', $projectId) fn () => $dbForConsole->getDocument('projects', $projectId)
); );
if (array_key_exists('proxy', $project->getAttribute('services', []))) { if (array_key_exists('proxy', $project->getAttribute('services', []))) {
$status = $project->getAttribute('services', [])['proxy']; $status = $project->getAttribute('services', [])['proxy'];
@ -78,7 +78,7 @@ function router(App $utopia, Database $dbForConsole, SwooleRequest $swooleReques
} }
// Skip Appwrite Router for ACME challenge. Nessessary for certificate generation // Skip Appwrite Router for ACME challenge. Nessessary for certificate generation
$path = ($swooleRequest->server['request_uri'] ?? ''); $path = ($swooleRequest->server['request_uri'] ?? '/');
if (\str_starts_with($path, '/.well-known/acme-challenge')) { if (\str_starts_with($path, '/.well-known/acme-challenge')) {
return false; return false;
} }
@ -89,7 +89,7 @@ function router(App $utopia, Database $dbForConsole, SwooleRequest $swooleReques
$functionId = $route->getAttribute('resourceId'); $functionId = $route->getAttribute('resourceId');
$projectId = $route->getAttribute('projectId'); $projectId = $route->getAttribute('projectId');
$path = ($swooleRequest->server['request_uri'] ?? ''); $path = ($swooleRequest->server['request_uri'] ?? '/');
$query = ($swooleRequest->server['query_string'] ?? ''); $query = ($swooleRequest->server['query_string'] ?? '');
if (!empty($query)) { if (!empty($query)) {
$path .= '?' . $query; $path .= '?' . $query;
@ -137,13 +137,16 @@ function router(App $utopia, Database $dbForConsole, SwooleRequest $swooleReques
$execution = \json_decode($executionResponse, true); $execution = \json_decode($executionResponse, true);
foreach ($execution['responseHeaders'] as $header) { foreach ($execution['responseHeaders'] as $header) {
$response->setHeader($header['key'], $header['value']); $response->setHeader($header['name'], $header['value']);
} }
$body = $execution['responseBody'] ?? ''; $body = $execution['responseBody'] ?? '';
if (($execution['responseHeaders']['x-open-runtimes-encoding'] ?? '') === 'base64') { $encodingKey = \array_search('x-open-runtimes-encoding', \array_column($execution['responseHeaders'], 'name'));
$body = \base64_decode($body); if (!empty($encodingKey)) {
if (($execution['responseHeaders'][$encodingKey] ?? '') === 'base64') {
$body = \base64_decode($body);
}
} }
$response->setStatusCode($execution['responseStatusCode'] ?? 200)->send($body); $response->setStatusCode($execution['responseStatusCode'] ?? 200)->send($body);
@ -253,7 +256,7 @@ App::init()
Config::setParam( Config::setParam(
'domainVerification', 'domainVerification',
($selfDomain->getRegisterable() === $endDomain->getRegisterable()) && ($selfDomain->getRegisterable() === $endDomain->getRegisterable()) &&
$endDomain->getRegisterable() !== '' $endDomain->getRegisterable() !== ''
); );
$isLocalHost = $request->getHostname() === 'localhost' || $request->getHostname() === 'localhost:' . $request->getPort(); $isLocalHost = $request->getHostname() === 'localhost' || $request->getHostname() === 'localhost:' . $request->getPort();
@ -327,8 +330,7 @@ App::init()
->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma') ->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma')
->addHeader('Access-Control-Expose-Headers', 'X-Fallback-Cookies') ->addHeader('Access-Control-Expose-Headers', 'X-Fallback-Cookies')
->addHeader('Access-Control-Allow-Origin', $refDomain) ->addHeader('Access-Control-Allow-Origin', $refDomain)
->addHeader('Access-Control-Allow-Credentials', 'true') ->addHeader('Access-Control-Allow-Credentials', 'true');
;
/* /*
* Validate Client Domain - Check to avoid CSRF attack * Validate Client Domain - Check to avoid CSRF attack
@ -401,7 +403,7 @@ App::init()
$expire = $key->getAttribute('expire'); $expire = $key->getAttribute('expire');
if (!empty($expire) && $expire < DateTime::formatTz(DateTime::now())) { if (!empty($expire) && $expire < DateTime::formatTz(DateTime::now())) {
throw new AppwriteException(AppwriteException:: PROJECT_KEY_EXPIRED); throw new AppwriteException(AppwriteException::PROJECT_KEY_EXPIRED);
} }
Authorization::setRole(Auth::USER_ROLE_APPS); Authorization::setRole(Auth::USER_ROLE_APPS);
@ -643,8 +645,7 @@ App::error()
->addHeader('Cache-Control', 'no-cache, no-store, must-revalidate') ->addHeader('Cache-Control', 'no-cache, no-store, must-revalidate')
->addHeader('Expires', '0') ->addHeader('Expires', '0')
->addHeader('Pragma', 'no-cache') ->addHeader('Pragma', 'no-cache')
->setStatusCode($code) ->setStatusCode($code);
;
$template = ($route) ? $route->getLabel('error', null) : null; $template = ($route) ? $route->getLabel('error', null) : null;
@ -658,8 +659,7 @@ App::error()
->setParam('projectURL', $project->getAttribute('url')) ->setParam('projectURL', $project->getAttribute('url'))
->setParam('message', $error->getMessage()) ->setParam('message', $error->getMessage())
->setParam('code', $code) ->setParam('code', $code)
->setParam('trace', $trace) ->setParam('trace', $trace);
;
$response->html($layout->render()); $response->html($layout->render());
} }
@ -744,6 +744,7 @@ include_once __DIR__ . '/shared/api.php';
include_once __DIR__ . '/shared/api/auth.php'; include_once __DIR__ . '/shared/api/auth.php';
App::wildcard() App::wildcard()
->groups(['api'])
->action(function () { ->action(function () {
throw new AppwriteException(AppwriteException::GENERAL_ROUTE_NOT_FOUND); throw new AppwriteException(AppwriteException::GENERAL_ROUTE_NOT_FOUND);
}); });

View file

@ -582,8 +582,6 @@ App::shutdown()
} }
} }
if ($project->getId() !== 'console') { if ($project->getId() !== 'console') {
if ($mode !== APP_MODE_ADMIN) { if ($mode !== APP_MODE_ADMIN) {
$fileSize = 0; $fileSize = 0;

View file

@ -233,7 +233,6 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo
$request = new Request($swooleRequest); $request = new Request($swooleRequest);
$response = new Response($swooleResponse); $response = new Response($swooleResponse);
// Serve static files (console) only for main domain // Serve static files (console) only for main domain
$host = $request->getHostname() ?? ''; $host = $request->getHostname() ?? '';
$mainDomain = App::getEnv('_APP_DOMAIN', ''); $mainDomain = App::getEnv('_APP_DOMAIN', '');
@ -251,8 +250,6 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo
} }
} }
$app = new App('UTC'); $app = new App('UTC');
$pools = $register->get('pools'); $pools = $register->get('pools');

View file

@ -204,7 +204,7 @@ Server::setResource('execute', function () {
$headersFiltered = []; $headersFiltered = [];
foreach ($executionResponse['headers'] as $key => $value) { foreach ($executionResponse['headers'] as $key => $value) {
if (\in_array($key, FUNCTION_WHITELIST_HEADERS_REQUEST)) { if (\in_array($key, FUNCTION_WHITELIST_HEADERS_REQUEST)) {
$headersFiltered[] = [ 'key' => $key, 'value' => $value ]; $headersFiltered[] = [ 'name' => $key, 'value' => $value ];
} }
} }

View file

@ -85,7 +85,7 @@ class Execution extends Model
'default' => '', 'default' => '',
'example' => 'Developers are awesome.', 'example' => 'Developers are awesome.',
]) ])
->addRule('responseheaders', [ ->addRule('responseHeaders', [
'type' => Response::MODEL_HEADERS, 'type' => Response::MODEL_HEADERS,
'description' => 'HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.', 'description' => 'HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.',
'default' => [], 'default' => [],