%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Helper/User/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Helper/User/MoveUserDataHelper.php |
<?php /** * This file is part of the Passwords App * created by Marius David Wieschollek * and licensed under the AGPL. */ namespace OCA\Passwords\Helper\User; use Exception; use OCA\Passwords\Db\SessionMapper; use OCA\Passwords\Helper\Settings\UserSettingsHelper; use OCA\Passwords\Services\ConfigurationService; use OCA\Passwords\Services\EnvironmentService; use OCA\Passwords\Services\Object\AbstractModelService; use OCA\Passwords\Services\Object\AbstractService; use OCA\Passwords\Services\Object\ChallengeService; use OCA\Passwords\Services\Object\FolderRevisionService; use OCA\Passwords\Services\Object\FolderService; use OCA\Passwords\Services\Object\KeychainService; use OCA\Passwords\Services\Object\PasswordRevisionService; use OCA\Passwords\Services\Object\PasswordService; use OCA\Passwords\Services\Object\PasswordTagRelationService; use OCA\Passwords\Services\Object\ShareService; use OCA\Passwords\Services\Object\TagRevisionService; use OCA\Passwords\Services\Object\TagService; /** * Class MoveUserDataHelper * * @package OCA\Passwords\Helper\User */ class MoveUserDataHelper { /** * @var null|string */ protected ?string $userId; /** * @var ConfigurationService */ protected ConfigurationService $config; /** * @var TagService */ protected TagService $tagService; /** * @var UserSettingsHelper */ protected UserSettingsHelper $settings; /** * @var FolderService */ protected FolderService $folderService; /** * @var PasswordService */ protected PasswordService $passwordService; /** * @var ShareService */ protected ShareService $shareService; /** * @var KeychainService */ protected KeychainService $keychainService; /** * @var ChallengeService */ protected ChallengeService $challengeService; /** * @var TagRevisionService */ protected TagRevisionService $tagRevisionService; /** * @var FolderRevisionService */ protected FolderRevisionService $folderRevisionService; /** * @var PasswordRevisionService */ protected PasswordRevisionService $passwordRevisionService; /** * @var PasswordTagRelationService */ protected PasswordTagRelationService $passwordTagRelationService; /** * @var SessionMapper */ protected SessionMapper $sessionMapper; /** * @var array */ protected array $moveConfigKeys = [ 'SSEv1UserKey', 'client/settings', 'user/challenge/id' ]; /** * DeleteUserDataHelper constructor. * * @param TagService $tagService * @param ShareService $shareService * @param SessionMapper $sessionMapper * @param UserSettingsHelper $settings * @param FolderService $folderService * @param ConfigurationService $config * @param EnvironmentService $environment * @param PasswordService $passwordService * @param KeychainService $keychainService * @param ChallengeService $challengeService * @param TagRevisionService $tagRevisionService * @param FolderRevisionService $folderRevisionService * @param PasswordRevisionService $passwordRevisionService * @param PasswordTagRelationService $passwordTagRelationService */ public function __construct( TagService $tagService, ShareService $shareService, SessionMapper $sessionMapper, UserSettingsHelper $settings, FolderService $folderService, ConfigurationService $config, EnvironmentService $environment, PasswordService $passwordService, KeychainService $keychainService, ChallengeService $challengeService, TagRevisionService $tagRevisionService, FolderRevisionService $folderRevisionService, PasswordRevisionService $passwordRevisionService, PasswordTagRelationService $passwordTagRelationService ) { $this->userId = $environment->getUserId(); $this->config = $config; $this->settings = $settings; $this->tagService = $tagService; $this->shareService = $shareService; $this->folderService = $folderService; $this->passwordService = $passwordService; $this->keychainService = $keychainService; $this->challengeService = $challengeService; $this->tagRevisionService = $tagRevisionService; $this->folderRevisionService = $folderRevisionService; $this->passwordRevisionService = $passwordRevisionService; $this->passwordTagRelationService = $passwordTagRelationService; $this->sessionMapper = $sessionMapper; } /** * @param string $sourceUser * @param string $targetUser * * @throws Exception */ public function moveUserData(string $sourceUser, string $targetUser): void { if($targetUser === $sourceUser) throw new Exception('Target and source user match'); if($this->userId !== null && $this->userId !== $sourceUser) throw new Exception('Invalid user id '.$sourceUser); $this->closeSessions($sourceUser); $this->moveObjects($this->tagService, $sourceUser, $targetUser); $this->moveObjects($this->folderService, $sourceUser, $targetUser); $this->moveObjects($this->passwordService, $sourceUser, $targetUser); $this->moveObjects($this->keychainService, $sourceUser, $targetUser); $this->moveObjects($this->challengeService, $sourceUser, $targetUser); $this->moveObjects($this->tagRevisionService, $sourceUser, $targetUser); $this->moveObjects($this->folderRevisionService, $sourceUser, $targetUser); $this->moveObjects($this->passwordRevisionService, $sourceUser, $targetUser); $this->moveObjects($this->passwordTagRelationService, $sourceUser, $targetUser); $this->moveShares($sourceUser, $targetUser); $this->moveUserConfig($sourceUser, $targetUser); $this->moveUserSettings($sourceUser, $targetUser); } /** * @param AbstractModelService|AbstractService $service * @param string $sourceUser * @param string $targetUser * * @throws Exception */ protected function moveObjects(AbstractService $service, string $sourceUser, string $targetUser): void { $objects = $service->findByUserId($sourceUser); foreach($objects as $object) { $object->setUserId($targetUser); $service->save($object); } } /** * @param string $sourceUser * @param string $targetUser * * @throws Exception */ protected function moveShares(string $sourceUser, string $targetUser): void { $objects = $this->shareService->findWithUserId($sourceUser); foreach($objects as $object) { if($object->getUserId() === $sourceUser) $object->setUserId($targetUser); if($object->getReceiver() === $sourceUser) $object->setReceiver($targetUser); $this->shareService->save($object); } } /** * @param string $userId * * @throws Exception */ protected function closeSessions(string $userId): void { $sessions = $this->sessionMapper->findAllByUserId($userId); foreach($sessions as $session) { $this->sessionMapper->delete($session); } } /** * @param string $sourceUser * @param string $targetUser * * @throws Exception */ protected function moveUserSettings(string $sourceUser, string $targetUser): void { $settings = $this->settings->listRaw($sourceUser); foreach($settings as $key => $value) { if($value !== null) { $this->settings->set($key, $value, $targetUser); $this->settings->reset($key, $sourceUser); } } } /** * @param string $sourceUser * @param string $targetUser * * @throws Exception */ protected function moveUserConfig(string $sourceUser, string $targetUser): void { foreach($this->moveConfigKeys as $key) { if($this->config->hasUserValue($key, $sourceUser)) { $value = $this->config->getUserValue($key, null, $sourceUser); $this->config->setUserValue($key, $value, $targetUser); $this->config->deleteUserValue($key, $sourceUser); } } } }