diff options
author | Robin Appelman <robin@icewind.nl> | 2022-11-29 17:48:17 +0100 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2022-11-29 17:49:35 +0100 |
commit | 2399710356456ca7758b9ab3b7469cc67f21984e (patch) | |
tree | 3db3175cee40afab6962e87b9a8f47712896606f /apps/encryption | |
parent | df2c00c23565b121169473359680bd6ea2482e63 (diff) | |
download | nextcloud-server-2399710356456ca7758b9ab3b7469cc67f21984e.tar.gz nextcloud-server-2399710356456ca7758b9ab3b7469cc67f21984e.zip |
allow running encryption:fix-encrypted-version for all users
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'apps/encryption')
-rw-r--r-- | apps/encryption/lib/Command/FixEncryptedVersion.php | 51 | ||||
-rw-r--r-- | apps/encryption/tests/Command/FixEncryptedVersionTest.php | 2 |
2 files changed, 39 insertions, 14 deletions
diff --git a/apps/encryption/lib/Command/FixEncryptedVersion.php b/apps/encryption/lib/Command/FixEncryptedVersion.php index ab9cc528c54..de476786af0 100644 --- a/apps/encryption/lib/Command/FixEncryptedVersion.php +++ b/apps/encryption/lib/Command/FixEncryptedVersion.php @@ -29,10 +29,12 @@ use OCP\Files\IRootFolder; use OCP\HintException; use OCP\IConfig; use OCP\ILogger; +use OCP\IUser; use OCP\IUserManager; use Symfony\Component\Console\Command\Command; 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 FixEncryptedVersion extends Command { @@ -84,13 +86,18 @@ class FixEncryptedVersion extends Command { ->setDescription('Fix the encrypted version if the encrypted file(s) are not downloadable.') ->addArgument( 'user', - InputArgument::REQUIRED, + InputArgument::OPTIONAL, 'The id of the user whose files need fixing' )->addOption( 'path', 'p', - InputArgument::OPTIONAL, + InputOption::VALUE_REQUIRED, 'Limit files to fix with path, e.g., --path="/Music/Artist". If path indicates a directory, all the files inside directory will be fixed.' + )->addOption( + 'all', + null, + InputOption::VALUE_NONE, + 'Run the fix for all users on the system, mutually exclusive with specifying a user id.' ); } @@ -108,22 +115,40 @@ class FixEncryptedVersion extends Command { return 1; } - $user = (string)$input->getArgument('user'); - $pathToWalk = "/$user/files"; - + $user = $input->getArgument('user'); + $all = $input->getOption('all'); $pathOption = \trim(($input->getOption('path') ?? ''), '/'); - if ($pathOption !== "") { - $pathToWalk = "$pathToWalk/$pathOption"; - } - if ($user === '') { - $output->writeln("<error>No user id provided.</error>\n"); + if ($user) { + if ($all) { + $output->writeln("Specifying a user id and --all are mutually exclusive"); + return 1; + } + + if ($this->userManager->get($user) === null) { + $output->writeln("<error>User id $user does not exist. Please provide a valid user id</error>"); + return 1; + } + + return $this->runForUser($user, $pathOption, $output); + } elseif ($all) { + $result = 0; + $this->userManager->callForSeenUsers(function(IUser $user) use ($pathOption, $output, &$result) { + $output->writeln("Processing files for " . $user->getUID()); + $result = $this->runForUser($user->getUID(), $pathOption, $output); + return $result === 0; + }); + return $result; + } else { + $output->writeln("Either a user id or --all needs to be provided"); return 1; } + } - if ($this->userManager->get($user) === null) { - $output->writeln("<error>User id $user does not exist. Please provide a valid user id</error>"); - return 1; + private function runForUser(string $user, string $pathOption, OutputInterface $output): int { + $pathToWalk = "/$user/files"; + if ($pathOption !== "") { + $pathToWalk = "$pathToWalk/$pathOption"; } return $this->walkPathOfUser($user, $pathToWalk, $output); } diff --git a/apps/encryption/tests/Command/FixEncryptedVersionTest.php b/apps/encryption/tests/Command/FixEncryptedVersionTest.php index ee9ad1ac89f..5c938b4350d 100644 --- a/apps/encryption/tests/Command/FixEncryptedVersionTest.php +++ b/apps/encryption/tests/Command/FixEncryptedVersionTest.php @@ -344,7 +344,7 @@ The file \"/$this->userId/files/sub/hello.txt\" is: OK", $output); $output = $this->commandTester->getDisplay(); - $this->assertStringContainsString('No user id provided', $output); + $this->assertStringContainsString('Either a user id or --all needs to be provided', $output); } public function testExecuteWithBadUser() { |