mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Dynamic key backwards compatibility
This commit is contained in:
@@ -95,6 +95,7 @@ abstract class Migration
|
||||
'1.9.0' => 'V24',
|
||||
'1.9.1' => 'V24',
|
||||
'1.9.2' => 'V24',
|
||||
'1.9.3' => 'V24',
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,28 +4,20 @@ namespace Appwrite\Platform\Modules\Project\Http\Project\Keys\Dynami;
|
||||
|
||||
use Ahc\Jwt\JWT;
|
||||
use Appwrite\Event\Event as QueueEvent;
|
||||
use Appwrite\Extend\Exception;
|
||||
use Appwrite\Platform\Modules\Compute\Base;
|
||||
use Appwrite\SDK\AuthType;
|
||||
use Appwrite\SDK\Method;
|
||||
use Appwrite\SDK\Response as SDKResponse;
|
||||
use Appwrite\Utopia\Database\Validator\CustomId;
|
||||
use Appwrite\Utopia\Response;
|
||||
use Utopia\Config\Config;
|
||||
use Utopia\Database\Database;
|
||||
use Utopia\Database\DateTime as DatabaseDateTime;
|
||||
use Utopia\Database\Document;
|
||||
use Utopia\Database\Exception\Duplicate as DuplicateException;
|
||||
use Utopia\Database\Helpers\ID;
|
||||
use Utopia\Database\Validator\Authorization;
|
||||
use Utopia\Database\Validator\Datetime;
|
||||
use Utopia\Platform\Action;
|
||||
use Utopia\Platform\Scope\HTTP;
|
||||
use Utopia\System\System;
|
||||
use Utopia\Validator\ArrayList;
|
||||
use Utopia\Validator\Nullable;
|
||||
use Utopia\Validator\Range;
|
||||
use Utopia\Validator\Text;
|
||||
use Utopia\Validator\WhiteList;
|
||||
|
||||
class Create extends Base
|
||||
@@ -62,7 +54,7 @@ class Create extends Base
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_CREATED,
|
||||
model: Response::MODEL_KEY,
|
||||
model: Response::MODEL_DYNAMIC_KEY,
|
||||
)
|
||||
],
|
||||
))
|
||||
@@ -84,16 +76,16 @@ class Create extends Base
|
||||
) {
|
||||
$keyId = ID::unique();
|
||||
|
||||
$jwt = new JWT(System::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', $duration, 0);
|
||||
|
||||
$secret = $jwt->encode([
|
||||
'projectId' => $project->getId(),
|
||||
'scopes' => $scopes
|
||||
]);
|
||||
|
||||
$now = new \DateTime();
|
||||
$expire = $now->add(new \DateInterval('PT' . $duration . 'S'))->format('Y-m-d\TH:i:s.u\Z');
|
||||
|
||||
$jwt = new JWT(System::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', $duration, 0);
|
||||
|
||||
$secret = $jwt->encode([
|
||||
'projectId' => $project->getId(),
|
||||
'scopes' => $scopes
|
||||
]);
|
||||
|
||||
$now = new \DateTime();
|
||||
$expire = $now->add(new \DateInterval('PT' . $duration . 'S'))->format('Y-m-d\TH:i:s.u\Z');
|
||||
|
||||
$key = new Document([
|
||||
'$id' => $keyId,
|
||||
'$createdAt' => new DatabaseDateTime(),
|
||||
@@ -110,6 +102,6 @@ class Create extends Base
|
||||
|
||||
$response
|
||||
->setStatusCode(Response::STATUS_CODE_CREATED)
|
||||
->dynamic($key, Response::MODEL_KEY);
|
||||
->dynamic($key, Response::MODEL_DYNAMIC_KEY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace Appwrite\Utopia\Request\Filters;
|
||||
|
||||
use Appwrite\Utopia\Request\Filter;
|
||||
|
||||
class V24 extends Filter
|
||||
{
|
||||
// Convert 1.9.2 params to 1.9.3
|
||||
public function parse(array $content, string $model): array
|
||||
{
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
@@ -251,6 +251,7 @@ class Response extends SwooleResponse
|
||||
public const MODEL_WEBHOOK_LIST = 'webhookList';
|
||||
public const MODEL_KEY = 'key';
|
||||
public const MODEL_KEY_LIST = 'keyList';
|
||||
public const MODEL_DYNAMIC_KEY = 'dynamicKey';
|
||||
public const MODEL_DEV_KEY = 'devKey';
|
||||
public const MODEL_DEV_KEY_LIST = 'devKeyList';
|
||||
public const MODEL_MOCK_NUMBER = 'mockNumber';
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Appwrite\Utopia\Response\Filters;
|
||||
|
||||
use Appwrite\Utopia\Response;
|
||||
use Appwrite\Utopia\Response\Filter;
|
||||
|
||||
// Convert 1.9.3 Data format to 1.9.2 format
|
||||
class V24 extends Filter
|
||||
{
|
||||
public function parse(array $content, string $model): array
|
||||
{
|
||||
return match ($model) {
|
||||
Response::MODEL_DYNAMIC_KEY => $this->parseDynamicKey($content),
|
||||
default => $content,
|
||||
};
|
||||
}
|
||||
|
||||
private function parseDynamicKey(array $content): array
|
||||
{
|
||||
unset($content['$id']);
|
||||
unset($content['$createdAt']);
|
||||
unset($content['$updatedAt']);
|
||||
unset($content['name']);
|
||||
unset($content['expire']);
|
||||
unset($content['sdks']);
|
||||
unset($content['accessedAt']);
|
||||
|
||||
$content['jwt'] = $content['secret'] ?? '';
|
||||
unset($content['secret']);
|
||||
|
||||
$content['projectId'] = 'WHAT DO I DO NOW?!';
|
||||
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Appwrite\Utopia\Response\Model;
|
||||
|
||||
use Appwrite\Utopia\Response;
|
||||
|
||||
class DynamicKey extends Key
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return 'Dynamic Key';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Type
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getType(): string
|
||||
{
|
||||
return Response::MODEL_DYNAMIC_KEY;
|
||||
}
|
||||
}
|
||||
@@ -7,11 +7,6 @@ use Appwrite\Utopia\Response\Model;
|
||||
|
||||
class Key extends Model
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected bool $public = true; // Public because reused for more key types
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this
|
||||
|
||||
Reference in New Issue
Block a user