3 changed files with 196 additions and 0 deletions
-
7apps/encryption/appinfo/register_command.php
-
86apps/encryption/command/enablemasterkey.php
-
103apps/encryption/tests/command/testenablemasterkey.php
@ -0,0 +1,86 @@ |
|||
<?php |
|||
/** |
|||
* @author Björn Schießle <schiessle@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
|
|||
|
|||
namespace OCA\Encryption\Command; |
|||
|
|||
|
|||
use OCA\Encryption\Util; |
|||
use OCP\IConfig; |
|||
use Symfony\Component\Console\Command\Command; |
|||
use Symfony\Component\Console\Helper\QuestionHelper; |
|||
use Symfony\Component\Console\Input\InputInterface; |
|||
use Symfony\Component\Console\Output\OutputInterface; |
|||
use Symfony\Component\Console\Question\ConfirmationQuestion; |
|||
|
|||
class EnableMasterKey extends Command { |
|||
|
|||
/** @var Util */ |
|||
protected $util; |
|||
|
|||
/** @var IConfig */ |
|||
protected $config; |
|||
|
|||
/** @var QuestionHelper */ |
|||
protected $questionHelper; |
|||
|
|||
/** |
|||
* @param Util $util |
|||
* @param IConfig $config |
|||
* @param QuestionHelper $questionHelper |
|||
*/ |
|||
public function __construct(Util $util, |
|||
IConfig $config, |
|||
QuestionHelper $questionHelper) { |
|||
|
|||
$this->util = $util; |
|||
$this->config = $config; |
|||
$this->questionHelper = $questionHelper; |
|||
parent::__construct(); |
|||
} |
|||
|
|||
protected function configure() { |
|||
$this |
|||
->setName('encryption:enable-master-key') |
|||
->setDescription('Enable the master key. Only available for fresh installations with no existing encrypted data! There is also no way to disable it again.'); |
|||
} |
|||
|
|||
protected function execute(InputInterface $input, OutputInterface $output) { |
|||
|
|||
$isAlreadyEnabled = $this->util->isMasterKeyEnabled(); |
|||
|
|||
if($isAlreadyEnabled) { |
|||
$output->writeln('Master key already enabled'); |
|||
} else { |
|||
$question = new ConfirmationQuestion( |
|||
'Warning: Only available for fresh installations with no existing encrypted data! ' |
|||
. 'There is also no way to disable it again. Do you want to continue? (y/n) ', false); |
|||
if ($this->questionHelper->ask($input, $output, $question)) { |
|||
$this->config->setAppValue('encryption', 'useMasterKey', '1'); |
|||
$output->writeln('Master key successfully enabled.'); |
|||
} else { |
|||
$output->writeln('aborted.'); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,103 @@ |
|||
<?php |
|||
/** |
|||
* @author Björn Schießle <schiessle@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
|
|||
|
|||
namespace OCA\Encryption\Tests\Command; |
|||
|
|||
|
|||
use OCA\Encryption\Command\EnableMasterKey; |
|||
use Test\TestCase; |
|||
|
|||
class TestEnableMasterKey extends TestCase { |
|||
|
|||
/** @var EnableMasterKey */ |
|||
protected $enableMasterKey; |
|||
|
|||
/** @var Util | \PHPUnit_Framework_MockObject_MockObject */ |
|||
protected $util; |
|||
|
|||
/** @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject */ |
|||
protected $config; |
|||
|
|||
/** @var \Symfony\Component\Console\Helper\QuestionHelper | \PHPUnit_Framework_MockObject_MockObject */ |
|||
protected $questionHelper; |
|||
|
|||
/** @var \Symfony\Component\Console\Output\OutputInterface | \PHPUnit_Framework_MockObject_MockObject */ |
|||
protected $output; |
|||
|
|||
/** @var \Symfony\Component\Console\Input\InputInterface | \PHPUnit_Framework_MockObject_MockObject */ |
|||
protected $input; |
|||
|
|||
public function setUp() { |
|||
parent::setUp(); |
|||
|
|||
$this->util = $this->getMockBuilder('OCA\Encryption\Util') |
|||
->disableOriginalConstructor()->getMock(); |
|||
$this->config = $this->getMockBuilder('OCP\IConfig') |
|||
->disableOriginalConstructor()->getMock(); |
|||
$this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') |
|||
->disableOriginalConstructor()->getMock(); |
|||
$this->output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface') |
|||
->disableOriginalConstructor()->getMock(); |
|||
$this->input = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface') |
|||
->disableOriginalConstructor()->getMock(); |
|||
|
|||
$this->enableMasterKey = new EnableMasterKey($this->util, $this->config, $this->questionHelper); |
|||
} |
|||
|
|||
/** |
|||
* @dataProvider dataTestExecute |
|||
* |
|||
* @param bool $isAlreadyEnabled |
|||
* @param string $answer |
|||
*/ |
|||
public function testExecute($isAlreadyEnabled, $answer) { |
|||
|
|||
$this->util->expects($this->once())->method('isMasterKeyEnabled') |
|||
->willReturn($isAlreadyEnabled); |
|||
|
|||
if ($isAlreadyEnabled) { |
|||
$this->output->expects($this->once())->method('writeln') |
|||
->with('Master key already enabled'); |
|||
} else { |
|||
if ($answer === 'y') { |
|||
$this->questionHelper->expects($this->once())->method('ask')->willReturn(true); |
|||
$this->config->expects($this->once())->method('setAppValue') |
|||
->with('encryption', 'useMasterKey', '1'); |
|||
} else { |
|||
$this->questionHelper->expects($this->once())->method('ask')->willReturn(false); |
|||
$this->config->expects($this->never())->method('setAppValue'); |
|||
|
|||
} |
|||
} |
|||
|
|||
$this->invokePrivate($this->enableMasterKey, 'execute', [$this->input, $this->output]); |
|||
} |
|||
|
|||
public function dataTestExecute() { |
|||
return [ |
|||
[true, ''], |
|||
[false, 'y'], |
|||
[false, 'n'], |
|||
[false, ''] |
|||
]; |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue