From: Bjoern Schiessle Date: Mon, 30 Mar 2015 09:49:03 +0000 (+0200) Subject: make recovery settings work X-Git-Tag: v8.1.0alpha1~78^2~92 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=a85e2e0bfdb86de029f7b5fde42ead60498aed82;p=nextcloud-server.git make recovery settings work --- diff --git a/apps/encryption/appinfo/app.php b/apps/encryption/appinfo/app.php index 72e7fc42ca0..38f9ff2f040 100644 --- a/apps/encryption/appinfo/app.php +++ b/apps/encryption/appinfo/app.php @@ -19,15 +19,10 @@ * */ -use OCA\Encryption\AppInfo\Encryption; +namespace OCA\Encryption\AppInfo; -if (!OC::$CLI) { +if (!\OC::$CLI) { $di = \OC::$server; - $app = new Encryption('encryption', - [], - $di->getEncryptionManager(), - $di->getConfig()); - - $app->boot(); + $app = new Application(); } diff --git a/apps/encryption/appinfo/application.php b/apps/encryption/appinfo/application.php new file mode 100644 index 00000000000..606c0cc5c49 --- /dev/null +++ b/apps/encryption/appinfo/application.php @@ -0,0 +1,196 @@ + + * @since 3/11/15, 11:03 AM + * @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 + * + */ +namespace OCA\Encryption\AppInfo; + + +use OC\Files\Filesystem; +use OC\Files\View; +use OCA\Encryption\Crypto\Crypt; +use OCA\Encryption\HookManager; +use OCA\Encryption\Hooks\UserHooks; +use OCA\Encryption\KeyManager; +use OCA\Encryption\Recovery; +use OCA\Encryption\Users\Setup; +use OCA\Encryption\Util; +use OCP\App; +use OCP\AppFramework\IAppContainer; +use OCP\Encryption\IManager; +use OCP\IConfig; + + +class Application extends \OCP\AppFramework\App { + /** + * @var IManager + */ + private $encryptionManager; + /** + * @var IConfig + */ + private $config; + + /** + * @param $appName + * @param array $urlParams + */ + public function __construct($urlParams = array()) { + parent::__construct('encryption', $urlParams); + $this->encryptionManager = \OC::$server->getEncryptionManager(); + $this->config = \OC::$server->getConfig(); + $this->registerServices(); + $this->registerEncryptionModule(); + $this->registerHooks(); + $this->registerSettings(); + } + + /** + * + */ + public function registerHooks() { + if (!$this->config->getSystemValue('maintenance', false)) { + + $container = $this->getContainer(); + $server = $container->getServer(); + // Register our hooks and fire them. + $hookManager = new HookManager(); + + $hookManager->registerHook([ + new UserHooks($container->query('KeyManager'), + $server->getLogger(), + $container->query('UserSetup'), + $server->getUserSession(), + new \OCP\Util(), + $container->query('Util'), + $server->getSession()), + ]); + + $hookManager->fireHooks(); + + } else { + // Logout user if we are in maintenance to force re-login + $this->getContainer()->getServer()->getUserSession()->logout(); + } + } + + /** + * + */ + public function registerEncryptionModule() { + $container = $this->getContainer(); + $container->registerService('EncryptionModule', function (IAppContainer $c) { + return new \OCA\Encryption\Crypto\Encryption( + $c->query('Crypt'), + $c->query('KeyManager'), + $c->query('Util')); + }); + $module = $container->query('EncryptionModule'); + $this->encryptionManager->registerEncryptionModule($module); + } + + /** + * + */ + public function registerServices() { + $container = $this->getContainer(); + + $container->registerService('Crypt', + function (IAppContainer $c) { + $server = $c->getServer(); + return new Crypt($server->getLogger(), + $server->getUserSession(), + $server->getConfig()); + }); + + $container->registerService('KeyManager', + function (IAppContainer $c) { + $server = $c->getServer(); + + return new KeyManager($server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID), + $c->query('Crypt'), + $server->getConfig(), + $server->getUserSession(), + $server->getSession(), + $server->getLogger() + ); + }); + + + $container->registerService('Recovery', + function (IAppContainer $c) { + $server = $c->getServer(); + + return new Recovery( + $server->getUserSession(), + $c->query('Crypt'), + $server->getSecureRandom(), + $c->query('KeyManager'), + $server->getConfig(), + $server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID)); + }); + + $container->registerService('RecoveryController', function (IAppContainer $c) { + $server = $c->getServer(); + return new \OCA\Encryption\Controller\RecoveryController( + $c->getAppName(), + $server->getRequest(), + $server->getConfig(), + $server->getL10N($c->getAppName()), + $c->query('Recovery')); + }); + + $container->registerService('UserSetup', + function (IAppContainer $c) { + $server = $c->getServer(); + return new Setup($server->getLogger(), + $server->getUserSession(), + $c->query('Crypt'), + $c->query('KeyManager')); + }); + + $container->registerService('Util', + function (IAppContainer $c) { + $server = $c->getServer(); + + return new Util(new View(), + new Filesystem(), + $c->query('Crypt'), + $c->query('KeyManager'), + $server->getLogger(), + $server->getUserSession(), + $server->getConfig() + ); + }); + + } + + /** + * + */ + public function registerSettings() { + +// script('encryption', 'encryption'); +// script('encryption', 'detect-migration'); + + + // Register settings scripts + App::registerAdmin('encryption', 'settings/settings-admin'); + App::registerPersonal('encryption', 'settings/settings-personal'); + } +} diff --git a/apps/encryption/appinfo/encryption.php b/apps/encryption/appinfo/encryption.php deleted file mode 100644 index 6aad9219025..00000000000 --- a/apps/encryption/appinfo/encryption.php +++ /dev/null @@ -1,194 +0,0 @@ - - * @since 3/11/15, 11:03 AM - * @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 - * - */ -namespace OCA\Encryption\AppInfo; - - -use OC\Files\Filesystem; -use OC\Files\View; -use OCA\Encryption\Crypto\Crypt; -use OCA\Encryption\HookManager; -use OCA\Encryption\Hooks\UserHooks; -use OCA\Encryption\KeyManager; -use OCA\Encryption\Recovery; -use OCA\Encryption\Users\Setup; -use OCA\Encryption\Util; -use OCP\App; -use OCP\AppFramework\IAppContainer; -use OCP\Encryption\IManager; -use OCP\IConfig; - - -class Encryption extends \OCP\AppFramework\App { - /** - * @var IManager - */ - private $encryptionManager; - /** - * @var IConfig - */ - private $config; - - /** - * @param $appName - * @param array $urlParams - * @param IManager $encryptionManager - * @param IConfig $config - */ - public function __construct($appName, $urlParams = array(), IManager $encryptionManager, IConfig $config) { - parent::__construct($appName, $urlParams); - $this->encryptionManager = $encryptionManager; - $this->config = $config; - } - - /** - * - */ - public function boot() { - $this->registerServices(); - $this->registerEncryptionModule(); - $this->registerHooks(); - $this->registerSettings(); - } - - /** - * - */ - public function registerHooks() { - if (!$this->config->getSystemValue('maintenance', false)) { - - $container = $this->getContainer(); - $server = $container->getServer(); - // Register our hooks and fire them. - $hookManager = new HookManager(); - - $hookManager->registerHook([ - new UserHooks($container->query('KeyManager'), - $server->getLogger(), - $container->query('UserSetup'), - $server->getUserSession(), - new \OCP\Util(), - $container->query('Util'), - $server->getSession()), - ]); - - $hookManager->fireHooks(); - - } else { - // Logout user if we are in maintenance to force re-login - $this->getContainer()->getServer()->getUserSession()->logout(); - } - } - - /** - * - */ - public function registerEncryptionModule() { - $container = $this->getContainer(); - $container->registerService('EncryptionModule', function (IAppContainer $c) { - return new \OCA\Encryption\Crypto\Encryption( - $c->query('Crypt'), - $c->query('KeyManager'), - $c->query('Util')); - }); - $module = $container->query('EncryptionModule'); - $this->encryptionManager->registerEncryptionModule($module); - } - - /** - * - */ - public function registerServices() { - $container = $this->getContainer(); - - $container->registerService('Crypt', - function (IAppContainer $c) { - $server = $c->getServer(); - return new Crypt($server->getLogger(), - $server->getUserSession(), - $server->getConfig()); - }); - - $container->registerService('KeyManager', - function (IAppContainer $c) { - $server = $c->getServer(); - - return new KeyManager($server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID), - $c->query('Crypt'), - $server->getConfig(), - $server->getUserSession(), - $server->getSession(), - $server->getLogger() - ); - }); - - - $container->registerService('Recovery', - function (IAppContainer $c) { - $server = $c->getServer(); - - return new Recovery( - $server->getUserSession(), - $c->query('Crypt'), - $server->getSecureRandom(), - $c->query('KeyManager'), - $server->getConfig(), - $server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID)); - }); - - $container->registerService('UserSetup', - function (IAppContainer $c) { - $server = $c->getServer(); - return new Setup($server->getLogger(), - $server->getUserSession(), - $c->query('Crypt'), - $c->query('KeyManager')); - }); - - $container->registerService('Util', - function (IAppContainer $c) { - $server = $c->getServer(); - - return new Util(new View(), - new Filesystem(), - $c->query('Crypt'), - $c->query('KeyManager'), - $server->getLogger(), - $server->getUserSession(), - $server->getConfig() - ); - }); - - } - - /** - * - */ - public function registerSettings() { - -// script('encryption', 'encryption'); -// script('encryption', 'detect-migration'); - - - // Register settings scripts - App::registerAdmin('encryption', 'settings/settings-admin'); - App::registerPersonal('encryption', 'settings/settings-personal'); - } -} diff --git a/apps/encryption/appinfo/routes.php b/apps/encryption/appinfo/routes.php index a86f3717ce9..b2c00c83349 100644 --- a/apps/encryption/appinfo/routes.php +++ b/apps/encryption/appinfo/routes.php @@ -20,17 +20,17 @@ */ -use OCP\AppFramework\App; +namespace OCA\Encryption\AppInfo; -(new App('encryption'))->registerRoutes($this, array('routes' => array( +(new Application())->registerRoutes($this, array('routes' => array( [ - 'name' => 'recovery#adminRecovery', + 'name' => 'Recovery#adminRecovery', 'url' => '/ajax/adminRecovery', 'verb' => 'POST' ], [ - 'name' => 'recovery#userRecovery', + 'name' => 'Recovery#userRecovery', 'url' => '/ajax/userRecovery', 'verb' => 'POST' ] diff --git a/apps/encryption/js/settings-admin.js b/apps/encryption/js/settings-admin.js index 2242c1f7124..e5d3bebb208 100644 --- a/apps/encryption/js/settings-admin.js +++ b/apps/encryption/js/settings-admin.js @@ -17,7 +17,7 @@ $(document).ready(function(){ var confirmPassword = $( '#repeatEncryptionRecoveryPassword' ).val(); OC.msg.startSaving('#encryptionSetRecoveryKey .msg'); $.post( - OC.filePath( 'files_encryption', 'ajax', 'adminrecovery.php' ) + OC.generateUrl('/apps/encryption/ajax/adminRecovery') , { adminEnableRecovery: recoveryStatus, recoveryPassword: recoveryPassword, confirmPassword: confirmPassword } , function( result ) { OC.msg.finishedSaving('#encryptionSetRecoveryKey .msg', result); @@ -44,7 +44,7 @@ $(document).ready(function(){ var confirmNewPassword = $('#repeatedNewEncryptionRecoveryPassword').val(); OC.msg.startSaving('#encryptionChangeRecoveryKey .msg'); $.post( - OC.filePath( 'files_encryption', 'ajax', 'changeRecoveryPassword.php' ) + OC.filePath( 'encryption', 'ajax', 'changeRecoveryPassword.php' ) , { oldPassword: oldRecoveryPassword, newPassword: newRecoveryPassword, confirmPassword: confirmNewPassword } , function( data ) { OC.msg.finishedSaving('#encryptionChangeRecoveryKey .msg', data); diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php index b3961c8566e..68fb722c5ea 100644 --- a/apps/encryption/lib/keymanager.php +++ b/apps/encryption/lib/keymanager.php @@ -193,7 +193,7 @@ class KeyManager { if ($encryptedKey) { $this->setPrivateKey($uid, $encryptedKey); - $this->config->setAppValue('encryption', 'recoveryAdminEnabled', 1); + $this->config->setAppValue('encryption', 'recoveryAdminEnabled', 0); return true; } return false; diff --git a/apps/encryption/settings/settings-admin.php b/apps/encryption/settings/settings-admin.php index 813956aa0af..a34d30d1de5 100644 --- a/apps/encryption/settings/settings-admin.php +++ b/apps/encryption/settings/settings-admin.php @@ -18,7 +18,4 @@ $recoveryAdminEnabled = \OC::$server->getConfig()->getAppValue('encryption', 're $tmpl->assign('recoveryEnabled', $recoveryAdminEnabled); $tmpl->assign('initStatus', KeyManager::$session->get('initStatus')); -\OCP\Util::addscript('files_encryption', 'settings-admin'); -\OCP\Util::addscript('core', 'multiselect'); - return $tmpl->fetchPage(); diff --git a/apps/encryption/templates/settings-admin.php b/apps/encryption/templates/settings-admin.php index 252701e9ed0..616c593f6fb 100644 --- a/apps/encryption/templates/settings-admin.php +++ b/apps/encryption/templates/settings-admin.php @@ -1,6 +1,8 @@

t('ownCloud basic encryption module')); ?>

diff --git a/lib/private/encryption/manager.php b/lib/private/encryption/manager.php index fa50d32218d..7cd49d1c0e2 100644 --- a/lib/private/encryption/manager.php +++ b/lib/private/encryption/manager.php @@ -66,12 +66,15 @@ class Manager implements \OCP\Encryption\IManager { public function registerEncryptionModule(IEncryptionModule $module) { $id = $module->getId(); $name = $module->getDisplayName(); + + // FIXME why do we load the same encryption module multiple times + /* if (isset($this->encryptionModules[$id])) { $message = 'Id "' . $id . '" already used by encryption module "' . $name . '"'; throw new Exceptions\ModuleAlreadyExistsException($message); } - +*/ $defaultEncryptionModuleId = $this->getDefaultEncryptionModuleId(); if (empty($defaultEncryptionModuleId)) { diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php index d7df884adf8..2db1fc32499 100644 --- a/lib/public/iservercontainer.php +++ b/lib/public/iservercontainer.php @@ -172,6 +172,18 @@ interface IServerContainer { */ function getL10N($app, $lang = null); + /** + * @return \OC\Encryption\Manager + */ + function getEncryptionManager(); + + /** + * @param string $encryptionModuleId encryption module ID + * + * @return \OCP\Encryption\Keys\IStorage + */ + function getEncryptionKeyStorage($encryptionModuleId); + /** * Returns the URL generator *