Draft commit with POC

This commit is contained in:
Matej Baco 2021-12-30 10:25:43 +01:00
parent b05680cf7d
commit 9b749db89b
5 changed files with 95 additions and 25 deletions

View file

@ -2,6 +2,7 @@
require_once __DIR__.'/../init.php';
use Appwrite\Utopia\Request\Filters\V11;
use Utopia\App;
use Utopia\Swoole\Request;
use Appwrite\Utopia\Response;
@ -23,7 +24,7 @@ Config::setParam('domainVerification', false);
Config::setParam('cookieDomain', 'localhost');
Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE);
App::init(function ($utopia, $request, $response, $console, $project, $dbForConsole, $user, $locale, $clients) {
App::init(function ($args, $utopia, $request, $response, $console, $project, $dbForConsole, $user, $locale, $clients) {
/** @var Utopia\App $utopia */
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
@ -79,13 +80,30 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons
Config::setParam('domains', $domains);
}
$localeParam = (string) $request->getParam('locale', $request->getHeader('x-appwrite-locale', ''));
$route = $utopia->match($request);
/*
* Request format
*/
$requestFormat = $request->getHeader('x-appwrite-response-format', App::getEnv('_APP_SYSTEM_RESPONSE_FORMAT', ''));
if ($requestFormat) {
switch($requestFormat) {
// TODO: For some reason console is still on 0.12. We dont want this filter logic in console, console uses 0.12 SDK
case version_compare ($requestFormat , '0.11.0', '<=') :
$requestFilter = new V11();
break;
}
}
if(isset($requestFilter)) {
$endpointIdentifier = $route->getLabel('sdk.namespace', 'unknown') . '.' . $route->getLabel('sdk.method', 'unknown');
$newParams = $requestFilter->parse($args->get(), $endpointIdentifier);
$args->set($newParams);
}
$localeParam = (string) $request->getParam('locale', $request->getHeader('x-appwrite-locale', ''));
if (\in_array($localeParam, Config::getParam('locale-codes'))) {
$locale->setDefault($localeParam);
};
$route = $utopia->match($request);
}
if ($project->isEmpty()) {
throw new Exception('Project not found', 404);
@ -280,7 +298,7 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons
throw new Exception('Password reset is required', 412);
}
}, ['utopia', 'request', 'response', 'console', 'project', 'dbForConsole', 'user', 'locale', 'clients']);
}, ['args', 'utopia', 'request', 'response', 'console', 'project', 'dbForConsole', 'user', 'locale', 'clients']);
App::options(function ($request, $response) {
/** @var Utopia\Swoole\Request $request */

36
composer.lock generated
View file

@ -2138,16 +2138,16 @@
},
{
"name": "utopia-php/database",
"version": "0.13.0",
"version": "0.13.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
"reference": "2e13987364f4966ec8a36784d4fb5df3a84e4e78"
"reference": "a1b2849c991b6384fe70e3c2d0633256a4fb795b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/database/zipball/2e13987364f4966ec8a36784d4fb5df3a84e4e78",
"reference": "2e13987364f4966ec8a36784d4fb5df3a84e4e78",
"url": "https://api.github.com/repos/utopia-php/database/zipball/a1b2849c991b6384fe70e3c2d0633256a4fb795b",
"reference": "a1b2849c991b6384fe70e3c2d0633256a4fb795b",
"shasum": ""
},
"require": {
@ -2195,9 +2195,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
"source": "https://github.com/utopia-php/database/tree/0.13.0"
"source": "https://github.com/utopia-php/database/tree/0.13.1"
},
"time": "2021-12-27T12:59:50+00:00"
"time": "2021-12-29T14:04:55+00:00"
},
{
"name": "utopia-php/domains",
@ -5655,16 +5655,16 @@
},
{
"name": "symfony/console",
"version": "v6.0.1",
"version": "v6.0.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "fafd9802d386bf1c267e0249ddb7ceb14dcfdad4"
"reference": "dd434fa8d69325e5d210f63070014d889511fcb3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/fafd9802d386bf1c267e0249ddb7ceb14dcfdad4",
"reference": "fafd9802d386bf1c267e0249ddb7ceb14dcfdad4",
"url": "https://api.github.com/repos/symfony/console/zipball/dd434fa8d69325e5d210f63070014d889511fcb3",
"reference": "dd434fa8d69325e5d210f63070014d889511fcb3",
"shasum": ""
},
"require": {
@ -5730,7 +5730,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v6.0.1"
"source": "https://github.com/symfony/console/tree/v6.0.2"
},
"funding": [
{
@ -5746,7 +5746,7 @@
"type": "tidelift"
}
],
"time": "2021-12-09T12:47:37+00:00"
"time": "2021-12-27T21:05:08+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
@ -6077,16 +6077,16 @@
},
{
"name": "symfony/string",
"version": "v6.0.1",
"version": "v6.0.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "0cfed595758ec6e0a25591bdc8ca733c1896af32"
"reference": "bae261d0c3ac38a1f802b4dfed42094296100631"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/0cfed595758ec6e0a25591bdc8ca733c1896af32",
"reference": "0cfed595758ec6e0a25591bdc8ca733c1896af32",
"url": "https://api.github.com/repos/symfony/string/zipball/bae261d0c3ac38a1f802b4dfed42094296100631",
"reference": "bae261d0c3ac38a1f802b4dfed42094296100631",
"shasum": ""
},
"require": {
@ -6142,7 +6142,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v6.0.1"
"source": "https://github.com/symfony/string/tree/v6.0.2"
},
"funding": [
{
@ -6158,7 +6158,7 @@
"type": "tidelift"
}
],
"time": "2021-12-08T15:13:44+00:00"
"time": "2021-12-16T22:13:01+00:00"
},
{
"name": "textalk/websocket",

View file

@ -71,7 +71,7 @@ services:
- ./psalm.xml:/usr/src/code/psalm.xml
- ./tests:/usr/src/code/tests
- ./app:/usr/src/code/app
# - ./vendor:/usr/src/code/vendor
- ./vendor/utopia-php/framework:/usr/src/code/vendor/utopia-php/framework
- ./docs:/usr/src/code/docs
- ./src:/usr/src/code/src
# - ./debug:/tmp

View file

@ -0,0 +1,17 @@
<?php
namespace Appwrite\Utopia\Request;
abstract class Filter
{
/**
* Parse params to another format.
*
* @param array $content
* @param string $model
*
* @return array
*/
abstract public function parse(array $content, string $model): array;
}

View file

@ -0,0 +1,35 @@
<?php
namespace Appwrite\Utopia\Request\Filters;
use Appwrite\Utopia\Request\Filter;
class V11 extends Filter
{
// TODO: Should this class be called be V11 or V12?
// Convert 0.11 params format to 0.12 format
public function parse(array $content, string $model): array
{
$parsedResponse = [];
switch ($model) {
case "account.create":
$parsedResponse = $this->addUserId($content);
break;
}
if(empty($parsedResponse)) {
// TODO: Do we need execption? We dont need to find, right? Not found means no changes
// throw new Exception('Received invalid request model : '. $model);
$parsedResponse = $content;
}
return $parsedResponse;
}
protected function addUserId(array $content): array
{
$content['userId'] = 'unique()';
return $content;
}
}