mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 00:12:30 -05:00
allow running encryption:fix-encrypted-version for all users
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
1efbbd885c
commit
e2fd59bfe0
2 changed files with 41 additions and 16 deletions
|
|
@ -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,23 +115,41 @@ 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 ($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;
|
||||
}
|
||||
}
|
||||
|
||||
private function runForUser(string $user, string $pathOption, OutputInterface $output): int {
|
||||
$pathToWalk = "/$user/files";
|
||||
if ($pathOption !== "") {
|
||||
$pathToWalk = "$pathToWalk/$pathOption";
|
||||
}
|
||||
|
||||
if ($user === '') {
|
||||
$output->writeln("<error>No user id provided.</error>\n");
|
||||
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->walkPathOfUser($user, $pathToWalk, $output);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue