diff options
Diffstat (limited to 'lib/private/InitialStateService.php')
-rw-r--r-- | lib/private/InitialStateService.php | 72 |
1 files changed, 24 insertions, 48 deletions
diff --git a/lib/private/InitialStateService.php b/lib/private/InitialStateService.php index 7f9a084ef70..300aa238397 100644 --- a/lib/private/InitialStateService.php +++ b/lib/private/InitialStateService.php @@ -3,29 +3,9 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OC; use Closure; @@ -33,30 +13,23 @@ use OC\AppFramework\Bootstrap\Coordinator; use OCP\AppFramework\QueryException; use OCP\AppFramework\Services\InitialStateProvider; use OCP\IInitialStateService; -use OCP\ILogger; -use OCP\IServerContainer; +use Psr\Container\ContainerInterface; +use Psr\Log\LoggerInterface; class InitialStateService implements IInitialStateService { - /** @var ILogger */ - private $logger; - /** @var string[][] */ - private $states = []; + private array $states = []; /** @var Closure[][] */ - private $lazyStates = []; - - /** @var Coordinator */ - private $bootstrapCoordinator; + private array $lazyStates = []; - /** @var IServerContainer */ - private $container; - public function __construct(ILogger $logger, Coordinator $bootstrapCoordinator, IServerContainer $container) { - $this->logger = $logger; - $this->bootstrapCoordinator = $bootstrapCoordinator; - $this->container = $container; + public function __construct( + private LoggerInterface $logger, + private Coordinator $bootstrapCoordinator, + private ContainerInterface $container, + ) { } public function provideInitialState(string $appName, string $key, $data): void { @@ -65,11 +38,15 @@ class InitialStateService implements IInitialStateService { if (!isset($this->states[$appName])) { $this->states[$appName] = []; } - $this->states[$appName][$key] = json_encode($data); + try { + $this->states[$appName][$key] = json_encode($data, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + $this->logger->error('Invalid ' . $key . ' data provided to provideInitialState by ' . $appName, ['exception' => $e]); + } return; } - $this->logger->warning('Invalid data provided to provideInitialState by ' . $appName); + $this->logger->warning('Invalid ' . $key . ' data provided to provideInitialState by ' . $appName); } public function provideLazyInitialState(string $appName, string $key, Closure $closure): void { @@ -115,25 +92,24 @@ class InitialStateService implements IInitialStateService { $initialStates = $context->getInitialStates(); foreach ($initialStates as $initialState) { try { - $provider = $this->container->query($initialState['class']); + $provider = $this->container->query($initialState->getService()); } catch (QueryException $e) { // Log an continue. We can be fault tolerant here. - $this->logger->logException($e, [ - 'message' => 'Could not load initial state provider dynamically: ' . $e->getMessage(), - 'level' => ILogger::ERROR, - 'app' => $initialState['appId'], + $this->logger->error('Could not load initial state provider dynamically: ' . $e->getMessage(), [ + 'exception' => $e, + 'app' => $initialState->getAppId(), ]); continue; } if (!($provider instanceof InitialStateProvider)) { // Log an continue. We can be fault tolerant here. - $this->logger->error('Initial state provider is not an InitialStateProvider instance: ' . $initialState['class'], [ - 'app' => $initialState['appId'], + $this->logger->error('Initial state provider is not an InitialStateProvider instance: ' . $initialState->getService(), [ + 'app' => $initialState->getAppId(), ]); } - $this->provideInitialState($initialState['appId'], $provider->getKey(), $provider); + $this->provideInitialState($initialState->getAppId(), $provider->getKey(), $provider); } } |