aboutsummaryrefslogtreecommitdiffstats
path: root/apps/provisioning_api/lib/Controller/AppConfigController.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/provisioning_api/lib/Controller/AppConfigController.php')
-rw-r--r--apps/provisioning_api/lib/Controller/AppConfigController.php69
1 files changed, 34 insertions, 35 deletions
diff --git a/apps/provisioning_api/lib/Controller/AppConfigController.php b/apps/provisioning_api/lib/Controller/AppConfigController.php
index ea862550e2d..d8af1f38d95 100644
--- a/apps/provisioning_api/lib/Controller/AppConfigController.php
+++ b/apps/provisioning_api/lib/Controller/AppConfigController.php
@@ -3,35 +3,20 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Controller;
use OC\AppConfig;
use OC\AppFramework\Middleware\Security\Exceptions\NotAdminException;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http;
+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;
@@ -51,6 +36,7 @@ class AppConfigController extends OCSController {
private IL10N $l10n,
private IGroupManager $groupManager,
private IManager $settingManager,
+ private IAppManager $appManager,
) {
parent::__construct($appName, $request);
}
@@ -58,7 +44,7 @@ class AppConfigController extends OCSController {
/**
* Get a list of apps
*
- * @return DataResponse<Http::STATUS_OK, array{data: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{data: list<string>}, array{}>
*
* 200: Apps returned
*/
@@ -72,7 +58,7 @@ class AppConfigController extends OCSController {
* Get the config keys of an app
*
* @param string $app ID of the app
- * @return DataResponse<Http::STATUS_OK, array{data: string[]}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{data: list<string>}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Keys returned
* 403: App is not allowed
@@ -112,28 +98,28 @@ class AppConfigController extends OCSController {
}
/**
- * @PasswordConfirmationRequired
* @NoSubAdminRequired
- * @NoAdminRequired
*
* Update the config value of an app
*
* @param string $app ID of the app
* @param string $key Key to update
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Value updated successfully
* 403: App or key is not allowed
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function setValue(string $app, string $key, string $value): DataResponse {
$user = $this->userSession->getUser();
if ($user === null) {
- throw new \Exception("User is not logged in."); // Should not happen, since method is guarded by middleware
+ throw new \Exception('User is not logged in.'); // Should not happen, since method is guarded by middleware
}
if (!$this->isAllowedToChangedKey($user, $app, $key)) {
- throw new NotAdminException($this->l10n->t('Logged in user must be an administrator or have authorization to edit this setting.'));
+ throw new NotAdminException($this->l10n->t('Logged in account must be an administrator or have authorization to edit this setting.'));
}
try {
@@ -143,23 +129,37 @@ class AppConfigController extends OCSController {
return new DataResponse(['data' => ['message' => $e->getMessage()]], Http::STATUS_FORBIDDEN);
}
+ $type = null;
+ try {
+ $configDetails = $this->appConfig->getDetails($app, $key);
+ $type = $configDetails['type'];
+ } catch (AppConfigUnknownKeyException) {
+ }
+
/** @psalm-suppress InternalMethod */
- $this->appConfig->setValueMixed($app, $key, $value);
+ 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),
+ 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();
}
/**
- * @PasswordConfirmationRequired
- *
* Delete a config key of an app
*
* @param string $app ID of the app
* @param string $key Key to delete
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Key deleted successfully
* 403: App or key is not allowed
*/
+ #[PasswordConfirmationRequired]
public function deleteKey(string $app, string $key): DataResponse {
try {
$this->verifyAppId($app);
@@ -173,11 +173,10 @@ class AppConfigController extends OCSController {
}
/**
- * @param string $app
* @throws \InvalidArgumentException
*/
- protected function verifyAppId(string $app) {
- if (\OC_App::cleanAppId($app) !== $app) {
+ protected function verifyAppId(string $app): void {
+ if ($this->appManager->cleanAppId($app) !== $app) {
throw new \InvalidArgumentException('Invalid app id given');
}
}