aboutsummaryrefslogtreecommitdiffstats
path: root/apps/provisioning_api
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2024-08-02 18:05:37 +0200
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2024-08-21 13:00:17 +0000
commit54c6f1be80be99985e7b4cc1f0ad484b541e15e8 (patch)
treebdff70470293a0e1c73a171da39d524c7b36a662 /apps/provisioning_api
parentccc39a41bbc2d9f9ff50a297a101fc55773d88ab (diff)
downloadnextcloud-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.php11
-rw-r--r--apps/provisioning_api/tests/Controller/AppConfigControllerTest.php36
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);