Merge pull request #2819 from appwrite/update-response-filters

Update response filters ready for 0.13
This commit is contained in:
Christy Jacob 2022-03-01 18:20:09 +04:00 committed by GitHub
commit 279240d918
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 271 additions and 15 deletions

View file

@ -13,12 +13,13 @@ use Utopia\Config\Config;
use Utopia\Domains\Domain;
use Appwrite\Auth\Auth;
use Appwrite\Network\Validator\Origin;
use Appwrite\Utopia\Response\Filters\V11;
use Appwrite\Utopia\Response\Filters\V11 as ResponseV11;
use Appwrite\Utopia\Response\Filters\V12 as ResponseV12;
use Utopia\CLI\Console;
use Utopia\Database\Document;
use Utopia\Database\Query;
use Utopia\Database\Validator\Authorization;
use Appwrite\Utopia\Request\Filters\V12;
use Appwrite\Utopia\Request\Filters\V12 as RequestV12;
use Utopia\Validator\Text;
Config::setParam('domainVerification', false);
@ -46,7 +47,7 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons
if ($requestFormat) {
switch($requestFormat) {
case version_compare ($requestFormat , '0.12.0', '<') :
Request::setFilter(new V12());
Request::setFilter(new RequestV12());
break;
default:
Request::setFilter(null);
@ -128,16 +129,6 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons
$selfDomain = new Domain($request->getHostname());
$endDomain = new Domain((string)$origin);
// var_dump('referer', $referrer);
// var_dump('origin', $origin);
// var_dump('port', $request->getPort());
// var_dump('hostname', $request->getHostname());
// var_dump('protocol', $request->getProtocol());
// var_dump('method', $request->getMethod());
// var_dump('ip', $request->getIP());
// var_dump('-----------------');
// var_dump($request->debug());
Config::setParam('domainVerification',
($selfDomain->getRegisterable() === $endDomain->getRegisterable()) &&
$endDomain->getRegisterable() !== '');
@ -157,8 +148,11 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons
$responseFormat = $request->getHeader('x-appwrite-response-format', App::getEnv('_APP_SYSTEM_RESPONSE_FORMAT', ''));
if ($responseFormat) {
switch($responseFormat) {
case version_compare ($responseFormat , '0.11.0', '<=') :
Response::setFilter(new V11());
case version_compare ($responseFormat , '0.11.2', '<=') :
Response::setFilter(new ResponseV11());
break;
case version_compare ($responseFormat , '0.12.4', '<='):
Response::setFilter(new ResponseV12());
break;
default:
Response::setFilter(null);

View file

@ -0,0 +1,262 @@
<?php
namespace Appwrite\Utopia\Response\Filters;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Filter;
use Exception;
class V12 extends Filter
{
// Convert 0.13 Data format to 0.12 format
public function parse(array $content, string $model): array
{
$parsedResponse = $content;
switch ($model) {
case Response::MODEL_ERROR_DEV:
case Response::MODEL_ERROR:
$parsedResponse = $this->parseError($content);
break;
case Response::MODEL_SESSION:
$parsedResponse = $this->parseSession($content);
break;
case Response::MODEL_SESSION_LIST:
$parsedResponse = $this->parseSessionList($content);
break;
case Response::MODEL_FILE:
$parsedResponse = $this->parseFile($content);
break;
case Response::MODEL_FILE_LIST:
$parsedResponse = $this->parseFileList($content);
break;
case Response::MODEL_FUNCTION:
$parsedResponse = $this->parseFunction($content);
break;
case Response::MODEL_FUNCTION_LIST:
$parsedResponse = $this->parseFunctionList($content);
break;
case Response::MODEL_DEPLOYMENT:
$parsedResponse = $this->parseDeployment($content);
break;
case Response::MODEL_DEPLOYMENT_LIST:
$parsedResponse = $this->parseDeploymentList($content);
break;
case Response::MODEL_EXECUTION:
$parsedResponse = $this->parseExecution($content);
break;
case Response::MODEL_EXECUTION_LIST:
$parsedResponse = $this->parseExecutionList($content);
break;
case Response::MODEL_USAGE_BUCKETS:
$parsedResponse = $this->parseUsageBuckets($content);
break;
case Response::MODEL_USAGE_STORAGE:
$parsedResponse = $this->parseUsageStorage($content);
break;
case Response::MODEL_TEAM:
$parsedResponse = $this->parseTeam($content);
break;
case Response::MODEL_TEAM_LIST:
$parsedResponse = $this->parseTeamList($content);
break;
case Response::MODEL_DOCUMENT_LIST:
case Response::MODEL_COLLECTION_LIST:
case Response::MODEL_INDEX_LIST:
case Response::MODEL_USER_LIST:
case Response::MODEL_LOG_LIST:
case Response::MODEL_BUCKET_LIST:
case Response::MODEL_MEMBERSHIP_LIST:
case Response::MODEL_RUNTIME_LIST:
case Response::MODEL_BUILD_LIST:
case Response::MODEL_PROJECT_LIST:
case Response::MODEL_WEBHOOK_LIST:
case Response::MODEL_KEY_LIST:
case Response::MODEL_PLATFORM_LIST:
case Response::MODEL_DOMAIN_LIST:
case Response::MODEL_COUNTRY_LIST:
case Response::MODEL_CONTINENT_LIST:
case Response::MODEL_LANGUAGE_LIST:
case Response::MODEL_CURRENCY_LIST:
case Response::MODEL_PHONE_LIST:
case Response::MODEL_METRIC_LIST:
case Response::MODEL_ATTRIBUTE_LIST:
$parsedResponse = $this->parseList($content);
break;
}
return $parsedResponse;
}
protected function parseError(array $content)
{
unset($content['type']);
return $content;
}
protected function parseSession(array $content)
{
$content['providerToken'] = $content['providerAccessToken'];
unset($content['providerAccessToken']);
unset($content['providerAccessTokenExpiry']);
unset($content['providerRefreshToken']);
return $content;
}
protected function parseSessionList(array $content)
{
$sessions = $content['sessions'];
$parsedResponse = [];
foreach ($sessions as $document) {
$parsedResponse[] = $this->parseSession($document);
}
$content['sessions'] = $parsedResponse;
$content['sum'] = $content['total'];
unset($content['total']);
return $content;
}
protected function parseFile(array $content)
{
unset($content['bucketId']);
unset($content['chunksTotal']);
unset($content['chunksUploaded']);
return $content;
}
protected function parseFileList(array $content)
{
$files = $content['files'];
$parsedResponse = [];
foreach ($files as $document) {
$parsedResponse[] = $this->parseFile($document);
}
$content['files'] = $parsedResponse;
$content['sum'] = $content['total'];
unset($content['total']);
return $content;
}
protected function parseFunction(array $content)
{
$content['tag'] = $content['deployment'];
unset($content['deployment']);
return $content;
}
protected function parseFunctionList(array $content)
{
$functions = $content['functions'];
$parsedResponse = [];
foreach ($functions as $document) {
$parsedResponse[] = $this->parseFunction($document);
}
$content['functions'] = $parsedResponse;
$content['sum'] = $content['total'];
unset($content['total']);
return $content;
}
protected function parseDeployment(array $content)
{
$content['functionId'] = $content['resourceId'];
$content['command'] = $content['entrypoint'];
return $content;
}
protected function parseDeploymentList(array $content)
{
$deployments = $content['deployments'];
$parsedResponse = [];
foreach ($deployments as $document) {
$parsedResponse[] = $this->parseDeployment($document);
}
$content['deployments'] = $parsedResponse;
$content['sum'] = $content['total'];
unset($content['total']);
return $content;
}
protected function parseUsageBuckets(array $content)
{
unset($content['filesStorage']);
}
protected function parseUsageStorage(array $content)
{
$content['storage'] = $content['filesStorage'];
unset($content['filesStorage']);
$content['files'] = $content['tagsStorage'];
unset($content['tagsStorage']);
unset($content['filesCount']);
unset($content['bucketsCount']);
unset($content['bucketsCreate']);
unset($content['bucketsRead']);
unset($content['bucketsUpdate']);
unset($content['bucketsDelete']);
unset($content['filesCount']);
unset($content['bucketsDelete']);
unset($content['filesCreate']);
unset($content['filesRead']);
unset($content['filesUpdate']);
unset($content['filesDelete']);
}
protected function parseExecution($content) {
$content['exitCode'] = $content['statusCode'];
unset($content['statusCode']);
return $content;
}
protected function parseExecutionList($content) {
$executions = $content['executions'];
$parsedResponse = [];
foreach ($executions as $document) {
$parsedResponse[] = $this->parseExecution($document);
}
$content['executions'] = $parsedResponse;
$content['sum'] = $content['total'];
unset($content['total']);
return $content;
}
protected function parseTeam($content) {
$content['sum'] = $content['total'];
unset($content['total']);
return $content;
}
protected function parseTeamList($content) {
$teams = $content['teams'];
$parsedResponse = [];
foreach ($teams as $document) {
$parsedResponse[] = $this->parseTeam($document);
}
$content['teams'] = $parsedResponse;
$content['sum'] = $content['total'];
unset($content['total']);
return $content;
}
protected function parseList($content) {
$content['sum'] = $content['total'];
unset($content['total']);
return $content;
}
}