%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Command/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Command/BackupRestoreCommand.php |
<?php /** * This file is part of the Passwords App * created by Marius David Wieschollek * and licensed under the AGPL. */ namespace OCA\Passwords\Command; use Exception; use OCA\Passwords\Services\BackupService; use OCP\Files\NotPermittedException; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Class BackupRestoreCommand * * @package OCA\Passwords\Command */ class BackupRestoreCommand extends AbstractInteractiveCommand { /** * @var BackupService */ protected BackupService $backupService; /** * BackupRestoreCommand constructor. * * @param BackupService $backupService */ public function __construct(BackupService $backupService) { $this->backupService = $backupService; parent::__construct(); } /** * */ protected function configure() { $this->setName('passwords:backup:restore') ->setDescription('Restores a backup') ->addArgument('name', InputArgument::REQUIRED, 'The name of the backup') ->addOption('user', 'u', InputOption::VALUE_OPTIONAL, 'Restore data only for this user') ->addOption('no-data', null, InputOption::VALUE_NONE, 'Do not restore user data and encryption keys') ->addOption('no-user-settings', null, InputOption::VALUE_NONE, 'Do not restore user settings') ->addOption('no-app-settings', null, InputOption::VALUE_NONE, 'Do not restore application settings'); parent::configure(); } /** * @param InputInterface $input * @param OutputInterface $output * * @return int * @throws Exception */ protected function execute(InputInterface $input, OutputInterface $output): int { parent::execute($input, $output); $options = $this->getOptions($input); $backup = $this->getBackup($input->getArgument('name')); $this->printRestoringInformation($output, $backup, $options); if(!$options['data'] && !$options['settings']['application'] && !$options['settings']['user'] && !$options['settings']['client']) { $output->writeln(' - nothing'); return 1; } if($options['data']) { $output->writeln(''); $output->writeln('Restoring user data means that the current user data will be wiped.'); } if(!$this->confirmRestoring($input, $output, $backup)) return 2; $output->write('Restoring backup ...'); $this->backupService->restoreBackup($backup, $options); $output->write(' done'); $output->writeln(''); return 0; } /** * @param $name * * @return string * @throws NotPermittedException * @throws Exception */ protected function getBackup($name): string { $backups = $this->backupService->getBackups(); if(isset($backups[ $name ])) return $name; throw new Exception("Could not find backup '{$name}'"); } /** * @param InputInterface $input * * @return array */ protected function getOptions(InputInterface $input): array { return [ 'user' => $input->getOption('user'), 'data' => !$input->getOption('no-data'), 'settings' => [ 'user' => !$input->getOption('no-user-settings'), 'client' => !$input->getOption('no-user-settings'), 'application' => !$input->getOption('no-app-settings') && $input->getOption('user') === null ] ]; } /** * @param InputInterface $input * @param OutputInterface $output * @param string $backup * * @return bool */ protected function confirmRestoring(InputInterface $input, OutputInterface $output, string $backup): bool { return $this->requestConfirmation($input, $output, 'The backup "'.$backup.'" will now be restored'); } /** * @param OutputInterface $output * @param string $backup * @param array $options */ protected function printRestoringInformation(OutputInterface $output, string $backup, array $options): void { $output->writeln('This backup file will be used: '.$backup); $output->writeln(''); $output->writeln('The following will be restored:'); if($options['user']) { $output->writeln(' - Only data for '.escapeshellarg($options['user'])); } if($options['data']) { $output->writeln(' - The Nextcloud server secret'); $output->writeln(' - Server and user encryption keys'); $output->writeln(' - User passwords, folder, tags and shares'); } if($options['settings']['application']) $output->writeln(' - Application settings'); if($options['settings']['user']) $output->writeln(' - User settings'); if($options['settings']['client']) $output->writeln(' - Third party client settings'); } }