fix(provisioning): Support setting new app configs as well

Signed-off-by: Joas Schilling <coding@schilljs.com>
pull/47410/head
Joas Schilling 2024-08-22 08:02:15 +07:00 committed by backportbot[bot]
parent c70b3efbff
commit 1b405aae8f
2 changed files with 32 additions and 16 deletions

@ -32,6 +32,7 @@ use OC\AppFramework\Middleware\Security\Exceptions\NotAdminException;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\Exceptions\AppConfigUnknownKeyException;
use OCP\IAppConfig;
use OCP\IGroupManager;
use OCP\IL10N;
@ -143,9 +144,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),

@ -29,6 +29,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;
@ -212,6 +213,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()],
];
}
@ -222,9 +224,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')
@ -267,18 +269,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',