WIP: Request filters refactor (into HTTP.php)
This commit is contained in:
parent
9b749db89b
commit
592ab3ab00
|
@ -4,7 +4,7 @@ require_once __DIR__.'/../init.php';
|
|||
|
||||
use Appwrite\Utopia\Request\Filters\V11;
|
||||
use Utopia\App;
|
||||
use Utopia\Swoole\Request;
|
||||
use Appwrite\Utopia\Request;
|
||||
use Appwrite\Utopia\Response;
|
||||
use Appwrite\Utopia\View;
|
||||
use Utopia\Exception;
|
||||
|
@ -24,7 +24,7 @@ Config::setParam('domainVerification', false);
|
|||
Config::setParam('cookieDomain', 'localhost');
|
||||
Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE);
|
||||
|
||||
App::init(function ($args, $utopia, $request, $response, $console, $project, $dbForConsole, $user, $locale, $clients) {
|
||||
App::init(function ($utopia, $request, $response, $console, $project, $dbForConsole, $user, $locale, $clients) {
|
||||
/** @var Utopia\App $utopia */
|
||||
/** @var Utopia\Swoole\Request $request */
|
||||
/** @var Appwrite\Utopia\Response $response */
|
||||
|
@ -82,24 +82,6 @@ App::init(function ($args, $utopia, $request, $response, $console, $project, $db
|
|||
|
||||
$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);
|
||||
|
@ -298,7 +280,7 @@ App::init(function ($args, $utopia, $request, $response, $console, $project, $db
|
|||
throw new Exception('Password reset is required', 412);
|
||||
}
|
||||
|
||||
}, ['args', 'utopia', 'request', 'response', 'console', 'project', 'dbForConsole', 'user', 'locale', 'clients']);
|
||||
}, ['utopia', 'request', 'response', 'console', 'project', 'dbForConsole', 'user', 'locale', 'clients']);
|
||||
|
||||
App::options(function ($request, $response) {
|
||||
/** @var Utopia\Swoole\Request $request */
|
||||
|
|
20
app/http.php
20
app/http.php
|
@ -2,6 +2,7 @@
|
|||
|
||||
require_once __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
use Appwrite\Utopia\Request\Filters\V11;
|
||||
use Appwrite\Utopia\Response;
|
||||
use Swoole\Process;
|
||||
use Swoole\Http\Server;
|
||||
|
@ -15,7 +16,7 @@ use Utopia\Audit\Audit;
|
|||
use Utopia\Abuse\Adapters\TimeLimit;
|
||||
use Utopia\Database\Document;
|
||||
use Utopia\Swoole\Files;
|
||||
use Utopia\Swoole\Request;
|
||||
use Appwrite\Utopia\Request;
|
||||
|
||||
$http = new Server("0.0.0.0", App::getEnv('PORT', 80));
|
||||
|
||||
|
@ -184,6 +185,23 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo
|
|||
Authorization::cleanRoles();
|
||||
Authorization::setRole('role:all');
|
||||
|
||||
/*
|
||||
* Request format
|
||||
*/
|
||||
$route = $app->match($request);
|
||||
Request::setRoute($route);
|
||||
|
||||
$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', '<=') :
|
||||
\var_dump("Matches 0.11");
|
||||
Request::setFilter(new V11());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$app->run($request, $response);
|
||||
} catch (\Throwable $th) {
|
||||
Console::error('[Error] Type: '.get_class($th));
|
||||
|
|
|
@ -22,7 +22,7 @@ use Utopia\Database\Document;
|
|||
use Utopia\Database\Query;
|
||||
use Utopia\Database\Validator\Authorization;
|
||||
use Utopia\Registry\Registry;
|
||||
use Utopia\Swoole\Request;
|
||||
use Appwrite\Utopia\Request;
|
||||
use Utopia\WebSocket\Server;
|
||||
use Utopia\WebSocket\Adapter;
|
||||
|
||||
|
|
12
composer.lock
generated
12
composer.lock
generated
|
@ -2255,16 +2255,16 @@
|
|||
},
|
||||
{
|
||||
"name": "utopia-php/framework",
|
||||
"version": "0.19.3",
|
||||
"version": "0.19.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/framework.git",
|
||||
"reference": "4c6c841d738cec458b73fec5aedd40fd43bd41a7"
|
||||
"reference": "b1c79f199a6adbf8526cea272d931213a8eb511d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/framework/zipball/4c6c841d738cec458b73fec5aedd40fd43bd41a7",
|
||||
"reference": "4c6c841d738cec458b73fec5aedd40fd43bd41a7",
|
||||
"url": "https://api.github.com/repos/utopia-php/framework/zipball/b1c79f199a6adbf8526cea272d931213a8eb511d",
|
||||
"reference": "b1c79f199a6adbf8526cea272d931213a8eb511d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -2298,9 +2298,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/framework/issues",
|
||||
"source": "https://github.com/utopia-php/framework/tree/0.19.3"
|
||||
"source": "https://github.com/utopia-php/framework/tree/0.19.4"
|
||||
},
|
||||
"time": "2021-12-17T13:04:13+00:00"
|
||||
"time": "2021-12-29T15:05:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/image",
|
||||
|
|
145
src/Appwrite/Utopia/Request.php
Normal file
145
src/Appwrite/Utopia/Request.php
Normal file
|
@ -0,0 +1,145 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace Appwrite\Utopia;
|
||||
|
||||
use Appwrite\Utopia\Request\Filter;
|
||||
use Utopia\Route;
|
||||
use Utopia\Swoole\Request as UtopiaRequest;
|
||||
|
||||
class Request extends UtopiaRequest
|
||||
{
|
||||
/**
|
||||
* @var Filter
|
||||
*/
|
||||
private static $filter = null;
|
||||
|
||||
/**
|
||||
* @var Route
|
||||
*/
|
||||
private static $route = null;
|
||||
|
||||
/**
|
||||
* Get Param
|
||||
*
|
||||
* Get param by current method name
|
||||
*
|
||||
* @param string $key
|
||||
* @param mixed $default
|
||||
* @return mixed
|
||||
*/
|
||||
public function getParam(string $key, $default = null): mixed
|
||||
{
|
||||
switch($this->getMethod()) {
|
||||
case self::METHOD_GET:
|
||||
return $this->getQuery($key, $default);
|
||||
break;
|
||||
case self::METHOD_POST:
|
||||
case self::METHOD_PUT:
|
||||
case self::METHOD_PATCH:
|
||||
case self::METHOD_DELETE:
|
||||
return $this->getPayload($key, $default);
|
||||
break;
|
||||
default:
|
||||
return $this->getQuery($key, $default);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Params
|
||||
*
|
||||
* Get all params of current method
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getParams(): array
|
||||
{
|
||||
$requestParameters = [];
|
||||
|
||||
switch($this->getMethod()) {
|
||||
case self::METHOD_GET:
|
||||
$requestParameters = (!empty($this->swoole->get)) ? $this->swoole->get : [];
|
||||
break;
|
||||
case self::METHOD_POST:
|
||||
case self::METHOD_PUT:
|
||||
case self::METHOD_PATCH:
|
||||
case self::METHOD_DELETE:
|
||||
$requestParameters = $this->generateInput();
|
||||
break;
|
||||
default:
|
||||
$requestParameters = (!empty($this->swoole->get)) ? $this->swoole->get : [];
|
||||
}
|
||||
|
||||
if (self::hasFilter() && self::hasRoute()) {
|
||||
$endpointIdentifier = self::getRoute()->getLabel('sdk.namespace', 'unknown') . '.' . self::getRoute()->getLabel('sdk.method', 'unknown');
|
||||
return self::getFilter()->parse($requestParameters, $endpointIdentifier);
|
||||
} else {
|
||||
return $requestParameters;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function to set a response filter
|
||||
*
|
||||
* @param $filter the response filter to set
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function setFilter(?Filter $filter)
|
||||
{
|
||||
self::$filter = $filter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the currently set filter
|
||||
*
|
||||
* @return Filter
|
||||
*/
|
||||
public static function getFilter(): ?Filter
|
||||
{
|
||||
return self::$filter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a filter has been set
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function hasFilter(): bool
|
||||
{
|
||||
return self::$filter != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to set a request route
|
||||
*
|
||||
* @param Route $route the request route to set
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function setRoute(?Route $route)
|
||||
{
|
||||
self::$route = $route;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the currently get route
|
||||
*
|
||||
* @return Route
|
||||
*/
|
||||
public static function getRoute(): ?Route
|
||||
{
|
||||
return self::$route;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a route has been set
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function hasRoute(): bool
|
||||
{
|
||||
return self::$route != null;
|
||||
}
|
||||
}
|
|
@ -349,7 +349,7 @@ class Response extends SwooleResponse
|
|||
$output = $this->output($document, $model);
|
||||
|
||||
// If filter is set, parse the output
|
||||
if (self::isFilter()) {
|
||||
if (self::hasFilter()) {
|
||||
$output = self::getFilter()->parse($output, $model);
|
||||
}
|
||||
|
||||
|
@ -488,7 +488,7 @@ class Response extends SwooleResponse
|
|||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function isFilter(): bool
|
||||
public static function hasFilter(): bool
|
||||
{
|
||||
return self::$filter != null;
|
||||
}
|
||||
|
|
|
@ -22,13 +22,13 @@ class ResponseTest extends TestCase
|
|||
|
||||
public function testSetFilter()
|
||||
{
|
||||
$this->assertEquals($this->object->isFilter(), false);
|
||||
$this->assertEquals($this->object->hasFilter(), false);
|
||||
$this->assertEquals($this->object->getFilter(), null);
|
||||
|
||||
$filter = new V06();
|
||||
$this->object->setFilter($filter);
|
||||
|
||||
$this->assertEquals($this->object->isFilter(), true);
|
||||
$this->assertEquals($this->object->hasFilter(), true);
|
||||
$this->assertEquals($this->object->getFilter(), $filter);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue