From 590b1e8698f459b00a98267ba65fa6825a7e0f8a Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Thu, 21 Nov 2024 17:19:33 +0100 Subject: [PATCH] feat: Warn about maintenance in EncryptAll command Signed-off-by: Louis Chemineau --- core/Command/Encryption/EncryptAll.php | 13 ++++++++----- tests/Core/Command/Encryption/EncryptAllTest.php | 9 --------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/core/Command/Encryption/EncryptAll.php b/core/Command/Encryption/EncryptAll.php index 868c240e26d96..684591f4586b5 100644 --- a/core/Command/Encryption/EncryptAll.php +++ b/core/Command/Encryption/EncryptAll.php @@ -17,7 +17,6 @@ class EncryptAll extends Command { protected bool $wasTrashbinEnabled = false; - protected bool $wasMaintenanceModeEnabled = false; public function __construct( protected IManager $encryptionManager, @@ -33,7 +32,6 @@ public function __construct( */ protected function forceMaintenanceAndTrashbin(): void { $this->wasTrashbinEnabled = (bool)$this->appManager->isEnabledForUser('files_trashbin'); - $this->wasMaintenanceModeEnabled = $this->config->getSystemValueBool('maintenance'); $this->config->setSystemValue('maintenance', true); $this->appManager->disableApp('files_trashbin'); } @@ -42,7 +40,7 @@ protected function forceMaintenanceAndTrashbin(): void { * Reset the maintenance mode and re-enable the trashbin app */ protected function resetMaintenanceAndTrashbin(): void { - $this->config->setSystemValue('maintenance', $this->wasMaintenanceModeEnabled); + $this->config->setSystemValue('maintenance', false); if ($this->wasTrashbinEnabled) { $this->appManager->enableApp('files_trashbin'); } @@ -73,6 +71,11 @@ protected function execute(InputInterface $input, OutputInterface $output): int throw new \Exception('Server side encryption is not enabled'); } + if ($this->config->getSystemValueBool('maintenance')) { + $output->writeln('This command cannot be run with maintenance mode enabled.'); + return self::FAILURE; + } + $output->writeln("\n"); $output->writeln('You are about to encrypt all files stored in your Nextcloud installation.'); $output->writeln('Depending on the number of available files, and their size, this may take quite some time.'); @@ -92,9 +95,9 @@ protected function execute(InputInterface $input, OutputInterface $output): int } $this->resetMaintenanceAndTrashbin(); - return 0; + return self::SUCCESS; } $output->writeln('aborted'); - return 1; + return self::FAILURE; } } diff --git a/tests/Core/Command/Encryption/EncryptAllTest.php b/tests/Core/Command/Encryption/EncryptAllTest.php index 933f919ba7ff0..6e72e87b973fe 100644 --- a/tests/Core/Command/Encryption/EncryptAllTest.php +++ b/tests/Core/Command/Encryption/EncryptAllTest.php @@ -71,15 +71,6 @@ public function testEncryptAll(): void { // trash bin needs to be disabled in order to avoid adding dummy files to the users // trash bin which gets deleted during the encryption process $this->appManager->expects($this->once())->method('disableApp')->with('files_trashbin'); - // enable single user mode to avoid that other user login during encryption - // destructor should disable the single user mode again - $this->config->expects($this->once())->method('getSystemValueBool')->with('maintenance', false)->willReturn(false); - $this->config->expects($this->exactly(2)) - ->method('setSystemValue') - ->withConsecutive( - ['maintenance', true], - ['maintenance', false], - ); $instance = new EncryptAll($this->encryptionManager, $this->appManager, $this->config, $this->questionHelper); $this->invokePrivate($instance, 'forceMaintenanceAndTrashbin');