%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Services/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Services/ConfigurationService.php |
<?php /* * @copyright 2022 Passwords App * * @author Marius David Wieschollek * @license AGPL-3.0 * * This file is part of the Passwords App * created by Marius David Wieschollek. */ namespace OCA\Passwords\Services; use Exception; use OC; use OC\AppConfig; use OC\SystemConfig; use OCA\Passwords\AppInfo\Application; use OCP\Cache\CappedMemoryCache; use OCP\HintException; use OCP\IConfig; use ReflectionClass; use ReflectionException; /** * Class ConfigurationService * * @package OCA\Passwords\Services */ class ConfigurationService { /** * @var IConfig */ protected IConfig $config; /** * @var string|null */ protected ?string $userId; /** * @param IConfig $config * @param EnvironmentService $environment */ public function __construct(IConfig $config, EnvironmentService $environment) { $this->config = $config; $this->userId = $environment->getUserId(); } /** * @param string $key * @param null $default * @param null|string $user * @param string $app * * @return string|null * @throws Exception */ public function getUserValue(string $key, $default = null, ?string $user = null, string $app = Application::APP_NAME): ?string { $userId = $this->getUserId($user); return $this->config->getUserValue($userId, $app, $key, $default); } /** * @param string $key * @param null $default * @param string $app * * @return string|null */ public function getAppValue(string $key, $default = null, string $app = Application::APP_NAME): ?string { return $this->config->getAppValue($app, $key, $default); } /** * @param string $key * @param null $default * * @return mixed */ public function getSystemValue(string $key, $default = null): mixed { return $this->config->getSystemValue($key, $default); } /** * @param string $key * @param string $value * @param null|string $user * @param string $app * * @throws Exception */ public function setUserValue(string $key, string $value, ?string $user = null, string $app = Application::APP_NAME): void { $userId = $this->getUserId($user); $this->config->setUserValue($userId, $app, $key, $value); } /** * @param string $key * @param string $value */ public function setAppValue(string $key, string $value): void { $this->config->setAppValue(Application::APP_NAME, $key, $value); } /** * @param string $key * @param $value * * @throws HintException */ public function setSystemValue(string $key, $value): void { $this->config->setSystemValue($key, $value); } /** * @param string $key * @param null|string $user * @param string $app * * @return bool * @throws Exception */ public function hasUserValue(string $key, ?string $user = null, string $app = Application::APP_NAME): bool { $userId = $this->getUserId($user); $keys = $this->config->getUserKeys($userId, $app); return in_array($key, $keys); } /** * @param string $key * @param string $app * * @return bool */ public function hasAppValue(string $key, string $app = Application::APP_NAME): bool { $keys = $this->config->getAppKeys($app); return in_array($key, $keys); } /** * @param string $key * @param null|string $user * * @throws Exception */ public function deleteUserValue(string $key, ?string $user = null): void { $userId = $this->getUserId($user); $this->config->deleteUserValue($userId, Application::APP_NAME, $key); } /** * @param string $key */ public function deleteAppValue(string $key): void { $this->config->deleteAppValue(Application::APP_NAME, $key); } /** * @param string $key */ public function deleteSystemValue(string $key): void { $this->config->deleteSystemValue($key); } /** * @param string $appName * * @return bool */ public function isAppEnabled(string $appName): bool { return $this->config->getAppValue($appName, 'enabled', 'no') === 'yes'; } /** * @return IConfig */ public function getConfig(): IConfig { return $this->config; } /** * Clear the config cache */ public function clearCache(): void { try { $class = new ReflectionClass($this->config); $property = $class->getProperty('userCache'); $property->setAccessible(true); $property->setValue($this->config, new CappedMemoryCache()); } catch(ReflectionException $e) { } try { // @TODO Use container instead $appConfig = OC::$server->get(AppConfig::class); $class = new ReflectionClass($appConfig); $property = $class->getProperty('configLoaded'); $property->setAccessible(true); $property->setValue($appConfig, false); } catch(Exception $e) { } try { // @TODO Use container instead $systemConfig = OC::$server->get(SystemConfig::class); $class = new ReflectionClass($systemConfig); $method = $class->getMethod('readData'); $method->setAccessible(true); $method->invoke($systemConfig); } catch(Exception $e) { } } /** * @return string */ public function getTempDir(): string { $tempDir = $this->getSystemValue('tempdirectory', '/tmp/'); if(substr($tempDir, -1) !== DIRECTORY_SEPARATOR) $tempDir.=DIRECTORY_SEPARATOR; return $tempDir; } /** * @param string|null $user * * @return string|null * @throws Exception */ protected function getUserId(string $user = null): ?string { if($this->userId !== null && $user !== null && $this->userId !== $user) { throw new Exception("Illegal user configuration access request by {$this->userId} for {$user}"); } return $this->userId === null ? $user:$this->userId; } }