%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/UserDeleteCommand.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 OCP\IUserManager; use OCA\Passwords\Services\ConfigurationService; use OCA\Passwords\Services\BackgroundJobService; use Symfony\Component\Console\Question\Question; use Symfony\Component\Console\Input\InputArgument; use OCA\Passwords\Helper\User\DeleteUserDataHelper; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Output\OutputInterface; /** * Class UserDeleteCommand * * @package OCA\Passwords\Command */ class UserDeleteCommand extends AbstractInteractiveCommand { /** * @var ConfigurationService */ protected ConfigurationService $config; /** * @var IUserManager */ protected IUserManager $userManager; /** * @var DeleteUserDataHelper */ protected DeleteUserDataHelper $deleteUserData; /** * @var BackgroundJobService */ protected BackgroundJobService $backgroundJobs; /** * UserDeleteCommand constructor. * * @param IUserManager $userManager * @param ConfigurationService $config * @param DeleteUserDataHelper $deleteUserData * @param BackgroundJobService $backgroundJobs * @param string|null $name */ public function __construct(IUserManager $userManager, ConfigurationService $config, DeleteUserDataHelper $deleteUserData, BackgroundJobService $backgroundJobs, string $name = null) { parent::__construct($name); $this->userManager = $userManager; $this->config = $config; $this->deleteUserData = $deleteUserData; $this->backgroundJobs = $backgroundJobs; } /** * */ protected function configure() { $this->setName('passwords:user:delete') ->setDescription('Deletes the passwords app data of a user') ->addArgument('user', InputArgument::REQUIRED, 'The id of the user'); parent::configure(); } /** * @param InputInterface $input * @param OutputInterface $output * * @return int * @throws Exception */ protected function execute(InputInterface $input, OutputInterface $output): int { parent::execute($input, $output); $userId = $this->getUserId($input, $output); if($this->confirmDelete($input, $output, $userId)) { $output->write('Deleting passwords app data ...'); $this->deleteUserData->deleteUserData($userId); $this->backgroundJobs->removeDeleteUserJob($userId); $output->write(' done'); $output->writeln(''); return 0; } return 1; } /** * @param InputInterface $input * @param OutputInterface $output * @param string $userId * * @return bool */ protected function confirmDelete(InputInterface $input, OutputInterface $output, string $userId): bool { $user = $this->userManager->get($userId); $userName = $user === null ? $userId:$user->getDisplayName(); return $this->requestConfirmation($input, $output, 'This command will delete all data for the passwords app from "'.$userName.'"'); } /** * @param InputInterface $input * @param OutputInterface $output * * @return string */ protected function getUserId(InputInterface $input, OutputInterface $output): string { $userId = $input->getArgument('user'); $user = $this->userManager->get($userId); if($user === null) { $output->write( [ 'Found no user for id "'.$userId.'" in database, will continue with provided user id.', 'If you are sure that the user was not deleted and should exist, you might have the wrong id.', '' ], true ); } else if($user->getUID() !== $userId) { $output->writeln('❗❗❗ Found user "'.$user->getDisplayName().'" for user id "'.$userId.'" but it has the id "'.$user->getUID().'" instead ❗❗❗'); if(!$input->isInteractive()) { $output->writeln(['ignoring', '']); return $userId; } /** @var QuestionHelper $helper */ $helper = $this->getHelper('question'); $question = new Question('Type "change" to change the user id to "'.$user->getUID().'": '); $response = $helper->ask($input, $output, $question); if($response !== 'change') { $output->writeln(['Changed user id to '.$user->getUID(), '']); return $user->getUID(); } $output->writeln(['Continuing with '.$userId, '']); } return $userId; } }