From 2f102c1f0d2fc93d1d9091297b0cb920fc8947de Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 18 Sep 2015 08:53:02 +0200 Subject: Do not set single user in constructor --- core/command/encryption/decryptall.php | 18 ++++++++++++++---- core/command/encryption/encryptall.php | 15 ++++++++++++++- tests/core/command/encryption/decryptalltest.php | 7 +++++-- tests/core/command/encryption/encryptalltest.php | 4 +++- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/core/command/encryption/decryptall.php b/core/command/encryption/decryptall.php index 696570b7ae6..c71ba5f04c7 100644 --- a/core/command/encryption/decryptall.php +++ b/core/command/encryption/decryptall.php @@ -75,14 +75,22 @@ class DecryptAll extends Command { $this->config = $config; $this->decryptAll = $decryptAll; $this->questionHelper = $questionHelper; + } + /** + * Set single user mode and disable the trashbin app + */ + protected function forceSingleUserAndTrashbin() { $this->wasTrashbinEnabled = $this->appManager->isEnabledForUser('files_trashbin'); $this->wasSingleUserModeEnabled = $this->config->getSystemValue('singleuser', false); $this->config->setSystemValue('singleuser', true); $this->appManager->disableApp('files_trashbin'); } - public function __destruct() { + /** + * Reset the single user mode and re-enable the trashbin app + */ + protected function resetSingleUserAndTrashbin() { $this->config->setSystemValue('singleuser', $this->wasSingleUserModeEnabled); if ($this->wasTrashbinEnabled) { $this->appManager->enableApp('files_trashbin'); @@ -115,7 +123,6 @@ class DecryptAll extends Command { } else { $output->writeln('Server side encryption not enabled. Nothing to do.'); return; - } $output->writeln("\n"); @@ -126,12 +133,14 @@ class DecryptAll extends Command { $output->writeln(''); $question = new ConfirmationQuestion('Do you really want to continue? (y/n) ', false); if ($this->questionHelper->ask($input, $output, $question)) { + $this->forceSingleUserAndTrashbin(); $user = $input->getArgument('user'); $result = $this->decryptAll->decryptAll($input, $output, $user); if ($result === false) { - $this->output->writeln(' aborted.'); + $output->writeln(' aborted.'); $this->config->setAppValue('core', 'encryption_enabled', 'yes'); } + $this->resetSingleUserAndTrashbin(); } else { $output->write('Enable server side encryption... '); $this->config->setAppValue('core', 'encryption_enabled', 'yes'); @@ -141,8 +150,9 @@ class DecryptAll extends Command { } catch (\Exception $e) { // enable server side encryption again if something went wrong $this->config->setAppValue('core', 'encryption_enabled', 'yes'); + $this->resetSingleUserAndTrashbin(); throw $e; } - } + } } diff --git a/core/command/encryption/encryptall.php b/core/command/encryption/encryptall.php index 950ce5166d8..2269663b21f 100644 --- a/core/command/encryption/encryptall.php +++ b/core/command/encryption/encryptall.php @@ -67,13 +67,22 @@ class EncryptAll extends Command { $this->encryptionManager = $encryptionManager; $this->config = $config; $this->questionHelper = $questionHelper; + } + + /** + * Set single user mode and disable the trashbin app + */ + protected function forceSingleUserAndTrashbin() { $this->wasTrashbinEnabled = $this->appManager->isEnabledForUser('files_trashbin'); $this->wasSingleUserModeEnabled = $this->config->getSystemValue('singleuser', false); $this->config->setSystemValue('singleuser', true); $this->appManager->disableApp('files_trashbin'); } - public function __destruct() { + /** + * Reset the single user mode and re-enable the trashbin app + */ + protected function resetSingleUserAndTrashbin() { $this->config->setSystemValue('singleuser', $this->wasSingleUserModeEnabled); if ($this->wasTrashbinEnabled) { $this->appManager->enableApp('files_trashbin'); @@ -104,8 +113,12 @@ class EncryptAll extends Command { $output->writeln(''); $question = new ConfirmationQuestion('Do you really want to continue? (y/n) ', false); if ($this->questionHelper->ask($input, $output, $question)) { + $this->forceSingleUserAndTrashbin(); + $defaultModule = $this->encryptionManager->getEncryptionModule(); $defaultModule->encryptAll($input, $output); + + $this->resetSingleUserAndTrashbin(); } else { $output->writeln('aborted'); } diff --git a/tests/core/command/encryption/decryptalltest.php b/tests/core/command/encryption/decryptalltest.php index ef36d6d2827..972ea03150c 100644 --- a/tests/core/command/encryption/decryptalltest.php +++ b/tests/core/command/encryption/decryptalltest.php @@ -79,7 +79,8 @@ class DecryptAllTest extends TestCase { } - public function testConstructDesctruct() { + public function testSingleUserAndTrashbin() { + // on construct we enable single-user-mode and disable the trash bin $this->config->expects($this->at(1)) ->method('setSystemValue') @@ -103,6 +104,7 @@ class DecryptAllTest extends TestCase { $this->decryptAll, $this->questionHelper ); + $this->invokePrivate($instance, 'forceSingleUserAndTrashbin'); $this->assertTrue( $this->invokePrivate($instance, 'wasTrashbinEnabled') @@ -111,6 +113,7 @@ class DecryptAllTest extends TestCase { $this->assertFalse( $this->invokePrivate($instance, 'wasSingleUserModeEnabled') ); + $this->invokePrivate($instance, 'resetSingleUserAndTrashbin'); } /** @@ -187,7 +190,7 @@ class DecryptAllTest extends TestCase { ->with('core', 'encryption_enabled', 'no'); // make sure that we enable encryption again after a exception was thrown - $this->config->expects($this->at(1)) + $this->config->expects($this->at(3)) ->method('setAppValue') ->with('core', 'encryption_enabled', 'yes'); diff --git a/tests/core/command/encryption/encryptalltest.php b/tests/core/command/encryption/encryptalltest.php index 9f7f7375044..128b4caa148 100644 --- a/tests/core/command/encryption/encryptalltest.php +++ b/tests/core/command/encryption/encryptalltest.php @@ -85,7 +85,9 @@ class EncryptAllTest extends TestCase { $this->config->expects($this->at(1))->method('setSystemValue')->with('singleuser', true); $this->config->expects($this->at(2))->method('setSystemValue')->with('singleuser', false); - new EncryptAll($this->encryptionManager, $this->appManager, $this->config, $this->questionHelper); + $instance = new EncryptAll($this->encryptionManager, $this->appManager, $this->config, $this->questionHelper); + $this->invokePrivate($instance, 'forceSingleUserAndTrashbin'); + $this->invokePrivate($instance, 'resetSingleUserAndTrashbin'); } /** -- cgit v1.2.3