summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2024-08-22 08:02:15 +0200
committerJoas Schilling <coding@schilljs.com>2024-08-22 08:06:06 +0200
commitaeac7217958b9caf6fdb32e1c9186609f1b99b10 (patch)
tree0756e52e536f0a4f8b3a843a9e36c23bad4a3f67 /apps
parent54c6f1be80be99985e7b4cc1f0ad484b541e15e8 (diff)
downloadnextcloud-server-aeac7217958b9caf6fdb32e1c9186609f1b99b10.tar.gz
nextcloud-server-aeac7217958b9caf6fdb32e1c9186609f1b99b10.zip
fix(provisioning): Support setting new app configs as well
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'apps')
-rw-r--r--apps/provisioning_api/lib/Controller/AppConfigController.php11
-rw-r--r--apps/provisioning_api/tests/Controller/AppConfigControllerTest.php37
2 files changed, 32 insertions, 16 deletions
diff --git a/apps/provisioning_api/lib/Controller/AppConfigController.php b/apps/provisioning_api/lib/Controller/AppConfigController.php
index 2ea4602883c..2ff82213997 100644
--- a/apps/provisioning_api/lib/Controller/AppConfigController.php
+++ b/apps/provisioning_api/lib/Controller/AppConfigController.php
@@ -15,6 +15,7 @@ use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
+use OCP\Exceptions\AppConfigUnknownKeyException;
use OCP\IAppConfig;
use OCP\IGroupManager;
use OCP\IL10N;
@@ -126,9 +127,15 @@ class AppConfigController extends OCSController {
return new DataResponse(['data' => ['message' => $e->getMessage()]], Http::STATUS_FORBIDDEN);
}
- $configDetails = $this->appConfig->getDetails($app, $key);
+ $type = null;
+ try {
+ $configDetails = $this->appConfig->getDetails($app, $key);
+ $type = $configDetails['type'];
+ } catch (AppConfigUnknownKeyException) {
+ }
+
/** @psalm-suppress InternalMethod */
- match ($configDetails['type']) {
+ match ($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),
diff --git a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
index 1a8a95e60d8..0bdee39cebc 100644
--- a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
@@ -9,6 +9,7 @@ use OC\AppConfig;
use OCA\Provisioning_API\Controller\AppConfigController;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
+use OCP\Exceptions\AppConfigUnknownKeyException;
use OCP\IAppConfig;
use OCP\IGroupManager;
use OCP\IL10N;
@@ -192,6 +193,7 @@ class AppConfigControllerTest extends TestCase {
['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],
+ ['app2', 'key', json_encode([4, 2]), null, null, Http::STATUS_OK, new AppConfigUnknownKeyException()],
];
}
@@ -202,9 +204,9 @@ class AppConfigControllerTest extends TestCase {
* @param string|null $value
* @param \Exception|null $appThrows
* @param \Exception|null $keyThrows
- * @param int $status
+ * @param int|\Throwable $status
*/
- public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status, int $type = IAppConfig::VALUE_MIXED) {
+ public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status, int|\Throwable $type = IAppConfig::VALUE_MIXED) {
$adminUser = $this->createMock(IUser::class);
$adminUser->expects($this->once())
->method('getUid')
@@ -247,18 +249,25 @@ class AppConfigControllerTest extends TestCase {
->method('verifyConfigKey')
->with($app, $key);
- $this->appConfig->expects($this->once())
- ->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,
- ]);
+ if ($type instanceof \Throwable) {
+ $this->appConfig->expects($this->once())
+ ->method('getDetails')
+ ->with($app, $key)
+ ->willThrowException($type);
+ } else {
+ $this->appConfig->expects($this->once())
+ ->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',