From 2b46bd2643f90e893b1194583bf0821dcb24aa83 Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Fri, 7 Feb 2025 20:36:57 +0530 Subject: [PATCH] Add secret param to update var --- app/config/errors.php | 5 +++++ src/Appwrite/Extend/Exception.php | 1 + .../Platform/Modules/Sites/Http/Variables/Update.php | 9 ++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/config/errors.php b/app/config/errors.php index 4a36cee152..4aaa5b77ae 100644 --- a/app/config/errors.php +++ b/app/config/errors.php @@ -868,6 +868,11 @@ return [ 'description' => 'Variable with the same ID already exists in this project. Try again with a different ID.', 'code' => 409, ], + Exception::VARIABLE_CANNOT_UNSET_SECRET => [ + 'name' => Exception::VARIABLE_CANNOT_UNSET_SECRET, + 'description' => 'Variable is a secret and cannot be unset to non-secret.', + 'code' => 400, + ], Exception::GRAPHQL_NO_QUERY => [ 'name' => Exception::GRAPHQL_NO_QUERY, 'description' => 'Param "query" is not optional.', diff --git a/src/Appwrite/Extend/Exception.php b/src/Appwrite/Extend/Exception.php index 2992c75987..3474920669 100644 --- a/src/Appwrite/Extend/Exception.php +++ b/src/Appwrite/Extend/Exception.php @@ -255,6 +255,7 @@ class Exception extends \Exception /** Variables */ public const VARIABLE_NOT_FOUND = 'variable_not_found'; public const VARIABLE_ALREADY_EXISTS = 'variable_already_exists'; + public const VARIABLE_CANNOT_UNSET_SECRET = 'variable_cannot_unset_secret'; /** Platform */ public const PLATFORM_NOT_FOUND = 'platform_not_found'; diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Variables/Update.php b/src/Appwrite/Platform/Modules/Sites/Http/Variables/Update.php index d9d70e4bdf..b5da83e23f 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Variables/Update.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Variables/Update.php @@ -13,6 +13,7 @@ use Utopia\Database\Exception\Duplicate as DuplicateException; use Utopia\Database\Validator\UID; use Utopia\Platform\Action; use Utopia\Platform\Scope\HTTP; +use Utopia\Validator\Boolean; use Utopia\Validator\Text; class Update extends Base @@ -52,12 +53,13 @@ class Update extends Base ->param('variableId', '', new UID(), 'Variable unique ID.', false) ->param('key', null, new Text(255), 'Variable key. Max length: 255 chars.', false) ->param('value', null, new Text(8192, 0), 'Variable value. Max length: 8192 chars.', true) + ->param('secret', false, new Boolean(), 'Is secret? Secret variables can only be updated or deleted, they cannot be read.', true) ->inject('response') ->inject('dbForProject') ->callback([$this, 'action']); } - public function action(string $siteId, string $variableId, string $key, ?string $value, Response $response, Database $dbForProject) + public function action(string $siteId, string $variableId, string $key, ?string $value, ?bool $secret, Response $response, Database $dbForProject) { $site = $dbForProject->getDocument('sites', $siteId); @@ -74,9 +76,14 @@ class Update extends Base throw new Exception(Exception::VARIABLE_NOT_FOUND); } + if ($variable->getAttribute('secret') && !$secret) { + throw new Exception(Exception::VARIABLE_CANNOT_UNSET_SECRET); + } + $variable ->setAttribute('key', $key) ->setAttribute('value', $value ?? $variable->getAttribute('value')) + ->setAttribute('secret', $secret ?? $variable->getAttribute('secret')) ->setAttribute('search', implode(' ', [$variableId, $site->getId(), $key, 'site'])); try {