Continue working on response filters
This commit is contained in:
parent
407c150631
commit
80ff661aeb
3 changed files with 96 additions and 39 deletions
|
@ -30,6 +30,7 @@ use Utopia\Validator\Hostname;
|
||||||
use Appwrite\Utopia\Request\Filters\V12 as RequestV12;
|
use Appwrite\Utopia\Request\Filters\V12 as RequestV12;
|
||||||
use Appwrite\Utopia\Request\Filters\V13 as RequestV13;
|
use Appwrite\Utopia\Request\Filters\V13 as RequestV13;
|
||||||
use Appwrite\Utopia\Request\Filters\V14 as RequestV14;
|
use Appwrite\Utopia\Request\Filters\V14 as RequestV14;
|
||||||
|
use Appwrite\Utopia\Request\Filters\V15 as RequestV15;
|
||||||
use Utopia\Validator\Text;
|
use Utopia\Validator\Text;
|
||||||
|
|
||||||
Config::setParam('domainVerification', false);
|
Config::setParam('domainVerification', false);
|
||||||
|
@ -65,6 +66,9 @@ App::init()
|
||||||
case version_compare($requestFormat, '0.14.0', '<'):
|
case version_compare($requestFormat, '0.14.0', '<'):
|
||||||
Request::setFilter(new RequestV14());
|
Request::setFilter(new RequestV14());
|
||||||
break;
|
break;
|
||||||
|
case version_compare($requestFormat, '0.15.0', '<'):
|
||||||
|
Request::setFilter(new RequestV15());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Request::setFilter(null);
|
Request::setFilter(null);
|
||||||
}
|
}
|
||||||
|
|
18
src/Appwrite/Utopia/Request/Filters/V15.php
Normal file
18
src/Appwrite/Utopia/Request/Filters/V15.php
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Appwrite\Utopia\Request\Filters;
|
||||||
|
|
||||||
|
use Appwrite\Utopia\Request\Filter;
|
||||||
|
|
||||||
|
class V15 extends Filter
|
||||||
|
{
|
||||||
|
// Convert 0.15 params format to 0.16 format
|
||||||
|
public function parse(array $content, string $model): array
|
||||||
|
{
|
||||||
|
switch ($model) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,52 +13,86 @@ class V15 extends Filter
|
||||||
$parsedResponse = $content;
|
$parsedResponse = $content;
|
||||||
|
|
||||||
switch ($model) {
|
switch ($model) {
|
||||||
case Response::MODEL_SESSION:
|
|
||||||
case Response::MODEL_TOKEN:
|
|
||||||
case Response::MODEL_SESSION_LIST:
|
|
||||||
case Response::MODEL_DOCUMENT:
|
|
||||||
case Response::MODEL_DOMAIN:
|
|
||||||
case Response::MODEL_FUNCTION:
|
|
||||||
case Response::MODEL_TEAM:
|
|
||||||
case Response::MODEL_MEMBERSHIP:
|
|
||||||
case Response::MODEL_PLATFORM:
|
|
||||||
case Response::MODEL_PROJECT:
|
|
||||||
case Response::MODEL_USER:
|
case Response::MODEL_USER:
|
||||||
case Response::MODEL_WEBHOOK:
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'registration', 'passwordUpdate']);
|
||||||
case Response::MODEL_DOCUMENT_LIST:
|
$parsedResponse = $this->handleUser($parsedResponse);
|
||||||
case Response::MODEL_DOMAIN_LIST:
|
break;
|
||||||
case Response::MODEL_FUNCTION_LIST:
|
|
||||||
case Response::MODEL_TEAM_LIST:
|
|
||||||
case Response::MODEL_MEMBERSHIP_LIST:
|
|
||||||
case Response::MODEL_PLATFORM_LIST:
|
|
||||||
case Response::MODEL_PROJECT_LIST:
|
|
||||||
case Response::MODEL_USER_LIST:
|
|
||||||
case Response::MODEL_WEBHOOK_LIST:
|
|
||||||
case Response::MODEL_TEAM:
|
|
||||||
case Response::MODEL_EXECUTION:
|
|
||||||
case Response::MODEL_FILE:
|
|
||||||
case Response::MODEL_TEAM_LIST:
|
|
||||||
case Response::MODEL_EXECUTION_LIST:
|
|
||||||
case Response::MODEL_FILE_LIST:
|
|
||||||
case Response::MODEL_FUNCTION:
|
|
||||||
case Response::MODEL_DEPLOYMENT:
|
|
||||||
case Response::MODEL_BUCKET:
|
|
||||||
case Response::MODEL_FUNCTION_LIST:
|
|
||||||
case Response::MODEL_DEPLOYMENT_LIST:
|
|
||||||
case Response::MODEL_BUCKET_LIST:
|
|
||||||
case Response::MODEL_METRIC:
|
case Response::MODEL_METRIC:
|
||||||
$parsedResponse = $this->handleMetricAttributes($content);
|
$parsedResponse = $this->handleMetricAttributes($content);
|
||||||
|
break;
|
||||||
|
case Response::MODEL_BUILD:
|
||||||
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['startTime', 'endTime']);
|
||||||
|
break;
|
||||||
|
case Response::MODEL_BUCKET:
|
||||||
|
case Response::MODEL_COLLECTION:
|
||||||
|
case Response::MODEL_DEPLOYMENT:
|
||||||
|
case Response::MODEL_DOCUMENT:
|
||||||
|
case Response::MODEL_EXECUTION:
|
||||||
|
case Response::MODEL_PLATFORM:
|
||||||
|
case Response::MODEL_PROJECT:
|
||||||
|
case Response::MODEL_TEAM:
|
||||||
|
case Response::MODEL_FILE:
|
||||||
|
case Response::MODEL_WEBHOOK:
|
||||||
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt']);
|
||||||
|
break;
|
||||||
|
case Response::MODEL_FUNCTION:
|
||||||
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'scheduleNext', 'schedulePrevious']);
|
||||||
|
break;
|
||||||
|
case Response::MODEL_KEY:
|
||||||
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'expire']);
|
||||||
|
break;
|
||||||
|
case Response::MODEL_LOG:
|
||||||
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'time']);
|
||||||
|
break;
|
||||||
|
case Response::MODEL_MEMBERSHIP:
|
||||||
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'invited', 'joined']);
|
||||||
|
break;
|
||||||
|
case Response::MODEL_SESSION:
|
||||||
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', 'expire', 'providerAccessTokenExpiry']);
|
||||||
|
break;
|
||||||
|
case Response::MODEL_TOKEN:
|
||||||
|
$parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', 'expire']);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Downgrade Permissions for all models
|
||||||
|
$parsedResponse = $this->handleDowngradePermissions($parsedResponse);
|
||||||
|
|
||||||
return $parsedResponse;
|
return $parsedResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function handleDatetimeAttributes(array $content, array $attributes): array
|
||||||
|
{
|
||||||
|
foreach ($attributes as $attribute) {
|
||||||
|
if (isset($content[$attribute])) {
|
||||||
|
$content[$attribute] = strtotime($content[$attribute]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function handleUser(array $content): array
|
||||||
|
{
|
||||||
|
unset($content['password']);
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
protected function handleMetricAttributes(array $content)
|
protected function handleMetricAttributes(array $content)
|
||||||
{
|
{
|
||||||
$content['timestamp'] = $content['date'];
|
$content['timestamp'] = $content['date'];
|
||||||
unset($content['date']);
|
unset($content['date']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function handleDowngradePermissions(array $content)
|
||||||
|
{
|
||||||
|
if (!isset($content['$permissions'])) {
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
$content = array_merge($content, $this->downgradePermissions($content['permissions']));
|
||||||
|
unset($content['permissions']);
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
protected function downgradePermissionSelector(string $permSelector)
|
protected function downgradePermissionSelector(string $permSelector)
|
||||||
{
|
{
|
||||||
switch ($permSelector)
|
switch ($permSelector)
|
||||||
|
@ -77,8 +111,8 @@ class V15 extends Filter
|
||||||
protected function downgradePermissions(array $permissions)
|
protected function downgradePermissions(array $permissions)
|
||||||
{
|
{
|
||||||
$result = [
|
$result = [
|
||||||
'read' => [],
|
'$read' => [],
|
||||||
'write' => []
|
'$write' => []
|
||||||
];
|
];
|
||||||
|
|
||||||
$splitPermissions = [];
|
$splitPermissions = [];
|
||||||
|
@ -92,7 +126,8 @@ class V15 extends Filter
|
||||||
|
|
||||||
// downgrade the permissions
|
// downgrade the permissions
|
||||||
foreach ($permissions as $permission) {
|
foreach ($permissions as $permission) {
|
||||||
// permission = "read('any')" = ["read" => "role:all"]
|
//TODO: Replace with Permission class
|
||||||
|
// permission = "read('any')" = ["$read" => "role:all"]
|
||||||
$permission_type = explode('(', $permission)[0];
|
$permission_type = explode('(', $permission)[0];
|
||||||
$permission_value = explode(')', explode('(', $permission)[1])[0];
|
$permission_value = explode(')', explode('(', $permission)[1])[0];
|
||||||
|
|
||||||
|
@ -103,13 +138,13 @@ class V15 extends Filter
|
||||||
case 'delete':
|
case 'delete':
|
||||||
case 'write':
|
case 'write':
|
||||||
case 'create':
|
case 'create':
|
||||||
if (!in_array(downgradePermissionSelector($permission_value), $result['write'])) {
|
if (!in_array($this->downgradePermissionSelector($permission_value), $result['write'])) {
|
||||||
$result['write'][] = downgradePermissionSelector($permission_value);
|
$result['$write'][] = $this->downgradePermissionSelector($permission_value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'read':
|
case 'read':
|
||||||
if (!in_array(downgradePermissionSelector($permission_value), $result['read'])) {
|
if (!in_array($this->downgradePermissionSelector($permission_value), $result['read'])) {
|
||||||
$result['read'][] = downgradePermissionSelector($permission_value);
|
$result['$read'][] = $this->downgradePermissionSelector($permission_value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue