2017-05-30 14:22:48 +03:00
< ? php
/**
* @ copyright Copyright ( c ) 2017 Bjoern Schiessle < bjoern @ schiessle . org >
*
2017-11-06 17:56:42 +03:00
* @ author Bjoern Schiessle < bjoern @ schiessle . org >
2020-04-29 12:57:22 +03:00
* @ author Christoph Wurst < christoph @ winzerhof - wurst . at >
2017-11-06 17:56:42 +03:00
*
2017-05-30 14:22:48 +03:00
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* 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
2019-12-03 21:57:53 +03:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2017-05-30 14:22:48 +03:00
*
*/
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 DisableMasterKey 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:disable-master-key' )
-> setDescription ( 'Disable the master key and use per-user keys instead. Only available for fresh installations with no existing encrypted data! There is no way to enable it again.' );
}
2020-06-26 16:12:11 +03:00
protected function execute ( InputInterface $input , OutputInterface $output ) : int {
2017-05-30 14:22:48 +03:00
$isMasterKeyEnabled = $this -> util -> isMasterKeyEnabled ();
2020-04-10 15:19:56 +03:00
if ( ! $isMasterKeyEnabled ) {
2017-05-30 14:22:48 +03:00
$output -> writeln ( 'Master key already disabled' );
} else {
$question = new ConfirmationQuestion (
'Warning: Only perform this operation for a fresh installations with no existing encrypted data! '
. 'There is no way to enable the master key again. '
. 'We strongly recommend to keep the master key, it provides significant performance improvements '
. 'and is easier to handle for both, users and administrators. '
. 'Do you really want to switch to per-user keys? (y/n) ' , false );
if ( $this -> questionHelper -> ask ( $input , $output , $question )) {
$this -> config -> setAppValue ( 'encryption' , 'useMasterKey' , '0' );
$output -> writeln ( 'Master key successfully disabled.' );
} else {
$output -> writeln ( 'aborted.' );
2020-06-26 16:12:11 +03:00
return 1 ;
2017-05-30 14:22:48 +03:00
}
}
2020-06-26 16:12:11 +03:00
return 0 ;
2017-05-30 14:22:48 +03:00
}
}