%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Helper/Backup/ |
Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Helper/Backup/CreateBackupHelper.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\Helper\Backup; use Exception; use OCA\Passwords\Db\AbstractMapper; use OCA\Passwords\Db\AbstractRevisionMapper; use OCA\Passwords\Db\ChallengeMapper; use OCA\Passwords\Db\FolderMapper; use OCA\Passwords\Db\FolderRevisionMapper; use OCA\Passwords\Db\KeychainMapper; use OCA\Passwords\Db\Password; use OCA\Passwords\Db\PasswordMapper; use OCA\Passwords\Db\PasswordRevisionMapper; use OCA\Passwords\Db\PasswordTagRelationMapper; use OCA\Passwords\Db\ShareMapper; use OCA\Passwords\Db\TagMapper; use OCA\Passwords\Db\TagRevisionMapper; use OCA\Passwords\Helper\Settings\UserSettingsHelper; use OCA\Passwords\Services\AppSettingsService; use OCA\Passwords\Services\ConfigurationService; use OCA\Passwords\Services\UserChallengeService; /** * Class CreateBackupHelper * * @package OCA\Passwords\Helper\Backup */ class CreateBackupHelper { const BACKUP_VERSION = 106; /** * @var ConfigurationService */ protected ConfigurationService $config; /** * @var TagMapper */ protected TagMapper $tagMapper; /** * @var FolderMapper */ protected FolderMapper $folderMapper; /** * @var ShareMapper */ protected ShareMapper $shareMapper; /** * @var PasswordMapper */ protected PasswordMapper $passwordMapper; /** * @var KeychainMapper */ protected KeychainMapper $keychainMapper; /** * @var ChallengeMapper */ protected ChallengeMapper $challengeMapper; /** * @var TagRevisionMapper */ protected TagRevisionMapper $tagRevisionMapper; /** * @var UserSettingsHelper */ protected UserSettingsHelper $userSettingsHelper; /** * @var AppSettingsService */ protected AppSettingsService $appSettingsService; /** * @var FolderRevisionMapper */ protected FolderRevisionMapper $folderRevisionMapper; /** * @var PasswordRevisionMapper */ protected PasswordRevisionMapper $passwordRevisionMapper; /** * @var PasswordTagRelationMapper */ protected PasswordTagRelationMapper $passwordTagRelationMapper; /** * @var array */ protected array $users = []; /** * CreateBackupHelper constructor. * * @param TagMapper $tagMapper * @param ShareMapper $shareMapper * @param FolderMapper $folderMapper * @param ConfigurationService $config * @param PasswordMapper $passwordMapper * @param KeychainMapper $keychainMapper * @param ChallengeMapper $challengeMapper * @param TagRevisionMapper $tagRevisionMapper * @param UserSettingsHelper $userSettingsHelper * @param AppSettingsService $appSettingsService * @param FolderRevisionMapper $folderRevisionMapper * @param PasswordRevisionMapper $passwordRevisionMapper * @param PasswordTagRelationMapper $passwordTagRelationMapper */ public function __construct( TagMapper $tagMapper, ShareMapper $shareMapper, FolderMapper $folderMapper, ConfigurationService $config, PasswordMapper $passwordMapper, KeychainMapper $keychainMapper, ChallengeMapper $challengeMapper, TagRevisionMapper $tagRevisionMapper, UserSettingsHelper $userSettingsHelper, AppSettingsService $appSettingsService, FolderRevisionMapper $folderRevisionMapper, PasswordRevisionMapper $passwordRevisionMapper, PasswordTagRelationMapper $passwordTagRelationMapper ) { $this->config = $config; $this->tagMapper = $tagMapper; $this->shareMapper = $shareMapper; $this->folderMapper = $folderMapper; $this->passwordMapper = $passwordMapper; $this->keychainMapper = $keychainMapper; $this->challengeMapper = $challengeMapper; $this->tagRevisionMapper = $tagRevisionMapper; $this->userSettingsHelper = $userSettingsHelper; $this->appSettingsService = $appSettingsService; $this->folderRevisionMapper = $folderRevisionMapper; $this->passwordRevisionMapper = $passwordRevisionMapper; $this->passwordTagRelationMapper = $passwordTagRelationMapper; } /** * @return array * @throws Exception */ public function getData(): array { return [ 'version' => self::BACKUP_VERSION, 'passwords' => $this->getModelArray($this->passwordMapper, $this->passwordRevisionMapper), 'folders' => $this->getModelArray($this->folderMapper, $this->folderRevisionMapper), 'tags' => $this->getModelArray($this->tagMapper, $this->tagRevisionMapper), 'shares' => $this->getEntityArray($this->shareMapper), 'keychains' => $this->getEntityArray($this->keychainMapper), 'challenges' => $this->getEntityArray($this->challengeMapper), 'passwordTagRelations' => $this->getEntityArray($this->passwordTagRelationMapper), 'keys' => [ 'server' => [ 'secret' => $this->config->getSystemValue('secret'), 'SSEv1ServerKey' => $this->config->getAppValue('SSEv1ServerKey', null) ], 'users' => $this->getUserKeys() ], 'settings' => [ 'application' => $this->getApplicationSettings(), 'users' => $this->getUserSettings(), 'clients' => $this->getClientSettings() ] ]; } /** * @param AbstractMapper $modelMapper * @param AbstractRevisionMapper|AbstractMapper $revisionMapper * * @return array * @throws \OCP\DB\Exception */ protected function getModelArray(AbstractMapper $modelMapper, AbstractMapper $revisionMapper): array { $modelMapper->clearEntityCache(); /** @var Password[] $passwords */ $passwords = $modelMapper->findAll(); $modelArray = []; foreach($passwords as $password) { $array = $password->toArray(); $array['revisions'] = []; $revisions = $revisionMapper->findAllByModel($password->getUuid()); foreach($revisions as $revision) { $array['revisions'][] = $revision->toArray(); } $user = $password->getUserId(); if(!in_array($user, $this->users)) $this->users[] = $user; $modelArray[] = $array; } return $modelArray; } /** * @return array * @throws Exception */ protected function getUserKeys(): array { $keys = []; foreach($this->users as $user) { $keys[ $user ] = [ 'SSEv1UserKey' => $this->config->getUserValue('SSEv1UserKey', null, $user), 'ChallengeId' => $this->config->getUserValue(UserChallengeService::USER_CHALLENGE_ID, null, $user) ]; } return $keys; } /** * @param AbstractMapper $mapper * * @return array * @throws \OCP\DB\Exception */ protected function getEntityArray(AbstractMapper $mapper): array { $mapper->clearEntityCache(); $entities = $mapper->findAll(); $entityArray = []; foreach($entities as $share) { $entityArray[] = $share->toArray(); } return $entityArray; } /** * @return array * @throws Exception */ protected function getUserSettings(): array { $settings = []; foreach($this->users as $user) { $settings[ $user ] = $this->userSettingsHelper->listRaw($user); } return $settings; } /** * @return array * @throws Exception */ protected function getClientSettings(): array { $settings = []; foreach($this->users as $user) { $settings[ $user ] = $this->config->getUserValue('client/settings', '{}', $user); } return $settings; } /** * @return array */ protected function getApplicationSettings(): array { $options = $this->appSettingsService->list(); $settings = []; foreach($options as $option) { $settings[$option['name']] = $option['isDefault'] ? null:$option['value']; } return $settings; } }