diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2024-08-02 18:05:37 +0200 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2024-08-21 13:00:17 +0000 |
commit | 54c6f1be80be99985e7b4cc1f0ad484b541e15e8 (patch) | |
tree | bdff70470293a0e1c73a171da39d524c7b36a662 /apps/provisioning_api | |
parent | ccc39a41bbc2d9f9ff50a297a101fc55773d88ab (diff) | |
download | nextcloud-server-54c6f1be80be99985e7b4cc1f0ad484b541e15e8.tar.gz nextcloud-server-54c6f1be80be99985e7b4cc1f0ad484b541e15e8.zip |
fix(ProvisioningAPI): set typed config values by via API
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'apps/provisioning_api')
-rw-r--r-- | apps/provisioning_api/lib/Controller/AppConfigController.php | 11 | ||||
-rw-r--r-- | apps/provisioning_api/tests/Controller/AppConfigControllerTest.php | 36 |
2 files changed, 43 insertions, 4 deletions
diff --git a/apps/provisioning_api/lib/Controller/AppConfigController.php b/apps/provisioning_api/lib/Controller/AppConfigController.php index 65b301245b3..2ea4602883c 100644 --- a/apps/provisioning_api/lib/Controller/AppConfigController.php +++ b/apps/provisioning_api/lib/Controller/AppConfigController.php @@ -126,8 +126,17 @@ class AppConfigController extends OCSController { return new DataResponse(['data' => ['message' => $e->getMessage()]], Http::STATUS_FORBIDDEN); } + $configDetails = $this->appConfig->getDetails($app, $key); /** @psalm-suppress InternalMethod */ - $this->appConfig->setValueMixed($app, $key, $value); + match ($configDetails['type']) { + IAppConfig::VALUE_BOOL => $this->appConfig->setValueBool($app, $key, (bool)$value), + IAppConfig::VALUE_FLOAT => $this->appConfig->setValueFloat($app, $key, (float)$value), + IAppConfig::VALUE_INT => $this->appConfig->setValueInt($app, $key, (int)$value), + IAppConfig::VALUE_STRING => $this->appConfig->setValueString($app, $key, $value), + IAppConfig::VALUE_ARRAY => $this->appConfig->setValueArray($app, $key, \json_decode($value, true)), + default => $this->appConfig->setValueMixed($app, $key, $value), + }; + return new DataResponse(); } diff --git a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php index f932aceaf8e..1a8a95e60d8 100644 --- a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php +++ b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php @@ -17,6 +17,8 @@ use OCP\IUser; use OCP\IUserSession; use OCP\Settings\IManager; use Test\TestCase; +use function json_decode; +use function json_encode; /** * Class AppConfigControllerTest @@ -184,6 +186,12 @@ class AppConfigControllerTest extends TestCase { ['app1', 'key', 'default', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN], ['app2', 'key', 'default', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN], ['app2', 'key', 'default', null, null, Http::STATUS_OK], + ['app2', 'key', '1', null, null, Http::STATUS_OK, IAppConfig::VALUE_BOOL], + ['app2', 'key', '42', null, null, Http::STATUS_OK, IAppConfig::VALUE_INT], + ['app2', 'key', '4.2', null, null, Http::STATUS_OK, IAppConfig::VALUE_FLOAT], + ['app2', 'key', '42', null, null, Http::STATUS_OK, IAppConfig::VALUE_STRING], + ['app2', 'key', 'secret', null, null, Http::STATUS_OK, IAppConfig::VALUE_STRING | IAppConfig::VALUE_SENSITIVE], + ['app2', 'key', json_encode([4, 2]), null, null, Http::STATUS_OK, IAppConfig::VALUE_ARRAY], ]; } @@ -196,7 +204,7 @@ class AppConfigControllerTest extends TestCase { * @param \Exception|null $keyThrows * @param int $status */ - public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status) { + public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status, int $type = IAppConfig::VALUE_MIXED) { $adminUser = $this->createMock(IUser::class); $adminUser->expects($this->once()) ->method('getUid') @@ -240,8 +248,30 @@ class AppConfigControllerTest extends TestCase { ->with($app, $key); $this->appConfig->expects($this->once()) - ->method('setValueMixed') - ->with($app, $key, $value); + ->method('getDetails') + ->with($app, $key) + ->willReturn([ + 'app' => $app, + 'key' => $key, + 'value' => '', // 🤷 + 'type' => $type, + 'lazy' => false, + 'typeString' => (string)$type, // this is not accurate, but acceptable + 'sensitive' => ($type & IAppConfig::VALUE_SENSITIVE) !== 0, + ]); + + $configValueSetter = match ($type) { + IAppConfig::VALUE_BOOL => 'setValueBool', + IAppConfig::VALUE_FLOAT => 'setValueFloat', + IAppConfig::VALUE_INT => 'setValueInt', + IAppConfig::VALUE_STRING => 'setValueString', + IAppConfig::VALUE_ARRAY => 'setValueArray', + default => 'setValueMixed', + }; + + $this->appConfig->expects($this->once()) + ->method($configValueSetter) + ->with($app, $key, $configValueSetter === 'setValueArray' ? json_decode($value, true) : $value); } $result = $api->setValue($app, $key, $value); |