@@ -25,8 +25,10 @@ namespace OCA\Encryption\AppInfo; | |||
\OCP\Util::addscript('encryption', 'encryption'); | |||
$app = new Application(); | |||
if (\OC::$server->getEncryptionManager()->isReady()) { | |||
$encryptionSystemReady = \OC::$server->getEncryptionManager()->isReady(); | |||
$app = new Application([], $encryptionSystemReady); | |||
if ($encryptionSystemReady) { | |||
$app->registerEncryptionModule(); | |||
$app->registerHooks(); | |||
$app->registerSettings(); |
@@ -52,12 +52,18 @@ class Application extends \OCP\AppFramework\App { | |||
/** | |||
* @param array $urlParams | |||
* @param bool $encryptionSystemReady | |||
*/ | |||
public function __construct($urlParams = array()) { | |||
public function __construct($urlParams = array(), $encryptionSystemReady = true) { | |||
parent::__construct('encryption', $urlParams); | |||
$this->encryptionManager = \OC::$server->getEncryptionManager(); | |||
$this->config = \OC::$server->getConfig(); | |||
$this->registerServices(); | |||
if($encryptionSystemReady === false) { | |||
/** @var Session $session */ | |||
$session = $this->getContainer()->query('Session'); | |||
$session->setStatus(Session::RUN_MIGRATION); | |||
} | |||
} | |||
/** |
@@ -60,20 +60,29 @@ class StatusController extends Controller { | |||
public function getStatus() { | |||
$status = 'error'; | |||
$message = ''; | |||
$message = 'no valid init status'; | |||
switch( $this->session->getStatus()) { | |||
case Session::RUN_MIGRATION: | |||
$status = 'interactionNeeded'; | |||
$message = (string)$this->l->t( | |||
'You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run \'occ encryption:migrate\' or contact your administrator' | |||
); | |||
break; | |||
case Session::INIT_EXECUTED: | |||
$status = 'success'; | |||
$status = 'interactionNeeded'; | |||
$message = (string)$this->l->t( | |||
'Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.' | |||
); | |||
break; | |||
case Session::NOT_INITIALIZED: | |||
$status = 'success'; | |||
$status = 'interactionNeeded'; | |||
$message = (string)$this->l->t( | |||
'Encryption App is enabled but your keys are not initialized, please log-out and log-in again' | |||
); | |||
break; | |||
case Session::INIT_SUCCESSFUL: | |||
$status = 'success'; | |||
$message = (string)$this->l->t('Encryption App is enabled and ready'); | |||
} | |||
return new DataResponse( |
@@ -22,7 +22,7 @@ OC.Encryption = { | |||
$.get( | |||
OC.generateUrl('/apps/encryption/ajax/getStatus'), | |||
function (result) { | |||
if (result.status === "success") { | |||
if (result.status === "interactionNeeded") { | |||
OC.Notification.show(result.data.message); | |||
} | |||
} |
@@ -33,6 +33,7 @@ class Session { | |||
const NOT_INITIALIZED = '0'; | |||
const INIT_EXECUTED = '1'; | |||
const INIT_SUCCESSFUL = '2'; | |||
const RUN_MIGRATION = '3'; | |||
/** | |||
* @param ISession $session |
@@ -0,0 +1,90 @@ | |||
<?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\Controller; | |||
use OCA\Encryption\Controller\StatusController; | |||
use OCA\Encryption\Session; | |||
use Test\TestCase; | |||
class StatusControllerTest extends TestCase { | |||
/** @var \PHPUnit_Framework_MockObject_MockObject */ | |||
protected $requestMock; | |||
/** @var \PHPUnit_Framework_MockObject_MockObject */ | |||
protected $l10nMock; | |||
/** @var \OCA\Encryption\Session | \PHPUnit_Framework_MockObject_MockObject */ | |||
protected $sessionMock; | |||
/** @var StatusController */ | |||
protected $controller; | |||
protected function setUp() { | |||
parent::setUp(); | |||
$this->sessionMock = $this->getMockBuilder('OCA\Encryption\Session') | |||
->disableOriginalConstructor()->getMock(); | |||
$this->requestMock = $this->getMock('OCP\IRequest'); | |||
$this->l10nMock = $this->getMockBuilder('OCP\IL10N') | |||
->disableOriginalConstructor()->getMock(); | |||
$this->l10nMock->expects($this->any()) | |||
->method('t') | |||
->will($this->returnCallback(function($message) { | |||
return $message; | |||
})); | |||
$this->controller = new StatusController('encryptionTest', | |||
$this->requestMock, | |||
$this->l10nMock, | |||
$this->sessionMock); | |||
} | |||
/** | |||
* @dataProvider dataTestGetStatus | |||
* | |||
* @param string $status | |||
* @param string $expectedStatus | |||
*/ | |||
public function testGetStatus($status, $expectedStatus) { | |||
$this->sessionMock->expects($this->once()) | |||
->method('getStatus')->willReturn($status); | |||
$result = $this->controller->getStatus(); | |||
$data = $result->getData(); | |||
$this->assertSame($expectedStatus, $data['status']); | |||
} | |||
public function dataTestGetStatus() { | |||
return array( | |||
array(Session::RUN_MIGRATION, 'interactionNeeded'), | |||
array(Session::INIT_EXECUTED, 'interactionNeeded'), | |||
array(Session::INIT_SUCCESSFUL, 'success'), | |||
array(Session::NOT_INITIALIZED, 'interactionNeeded'), | |||
array('unknown', 'error'), | |||
); | |||
} | |||
} |