diff options
Diffstat (limited to 'apps/encryption/lib/Util.php')
-rw-r--r-- | apps/encryption/lib/Util.php | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/apps/encryption/lib/Util.php b/apps/encryption/lib/Util.php new file mode 100644 index 00000000000..ccbdcdcb242 --- /dev/null +++ b/apps/encryption/lib/Util.php @@ -0,0 +1,136 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +namespace OCA\Encryption; + +use OC\Files\Storage\Storage; +use OC\Files\View; +use OCA\Encryption\Crypto\Crypt; +use OCP\Files\Storage\IStorage; +use OCP\IConfig; +use OCP\IUser; +use OCP\IUserManager; +use OCP\IUserSession; +use OCP\PreConditionNotMetException; + +class Util { + private IUser|false $user; + + public function __construct( + private View $files, + private Crypt $crypt, + IUserSession $userSession, + private IConfig $config, + private IUserManager $userManager, + ) { + $this->user = $userSession->isLoggedIn() ? $userSession->getUser() : false; + } + + /** + * check if recovery key is enabled for user + * + * @param string $uid + * @return bool + */ + public function isRecoveryEnabledForUser($uid) { + $recoveryMode = $this->config->getUserValue($uid, + 'encryption', + 'recoveryEnabled', + '0'); + + return ($recoveryMode === '1'); + } + + /** + * check if the home storage should be encrypted + * + * @return bool + */ + public function shouldEncryptHomeStorage() { + $encryptHomeStorage = $this->config->getAppValue( + 'encryption', + 'encryptHomeStorage', + '1' + ); + + return ($encryptHomeStorage === '1'); + } + + /** + * set the home storage encryption on/off + * + * @param bool $encryptHomeStorage + */ + public function setEncryptHomeStorage($encryptHomeStorage) { + $value = $encryptHomeStorage ? '1' : '0'; + $this->config->setAppValue( + 'encryption', + 'encryptHomeStorage', + $value + ); + } + + /** + * check if master key is enabled + */ + public function isMasterKeyEnabled(): bool { + $userMasterKey = $this->config->getAppValue('encryption', 'useMasterKey', '1'); + return ($userMasterKey === '1'); + } + + /** + * @param $enabled + * @return bool + */ + public function setRecoveryForUser($enabled) { + $value = $enabled ? '1' : '0'; + + try { + $this->config->setUserValue($this->user->getUID(), + 'encryption', + 'recoveryEnabled', + $value); + return true; + } catch (PreConditionNotMetException $e) { + return false; + } + } + + /** + * @param string $uid + * @return bool + */ + public function userHasFiles($uid) { + return $this->files->file_exists($uid . '/files'); + } + + /** + * get owner from give path, path relative to data/ expected + * + * @param string $path relative to data/ + * @return string + * @throws \BadMethodCallException + */ + public function getOwner($path) { + $owner = ''; + $parts = explode('/', $path, 3); + if (count($parts) > 1) { + $owner = $parts[1]; + if ($this->userManager->userExists($owner) === false) { + throw new \BadMethodCallException('Unknown user: ' + . 'method expects path to a user folder relative to the data folder'); + } + } + + return $owner; + } + + public function getStorage(string $path): ?IStorage { + return $this->files->getMount($path)->getStorage(); + } + +} |