]> source.dussan.org Git - nextcloud-server.git/commitdiff
display warning if password changed or if the keys are not initialized
authorBjoern Schiessle <schiessle@owncloud.com>
Thu, 16 Apr 2015 11:47:27 +0000 (13:47 +0200)
committerBjoern Schiessle <schiessle@owncloud.com>
Thu, 16 Apr 2015 12:30:19 +0000 (14:30 +0200)
apps/encryption/appinfo/app.php
apps/encryption/appinfo/application.php
apps/encryption/appinfo/routes.php
apps/encryption/controller/statuscontroller.php [new file with mode: 0644]
apps/encryption/js/encryption.js
apps/encryption/lib/keymanager.php

index 6bbf2113366bbf5103505a0622f45d687c11590a..cbc50e683e60922f5309c5855e9e196e68e9c297 100644 (file)
@@ -23,6 +23,8 @@
 
 namespace OCA\Encryption\AppInfo;
 
+\OCP\Util::addscript('encryption', 'encryption');
+
 $app = new Application();
 $app->registerEncryptionModule();
 $app->registerHooks();
index 34845ecf1e8b4d07ed1e3cb712424c24bea76013..267f14e8a249a6f998d6e2690fbe2701a3feb873 100644 (file)
@@ -31,6 +31,7 @@ use OCA\Encryption\HookManager;
 use OCA\Encryption\Hooks\UserHooks;
 use OCA\Encryption\KeyManager;
 use OCA\Encryption\Recovery;
+use OCA\Encryption\Session;
 use OCA\Encryption\Users\Setup;
 use OCA\Encryption\Util;
 use OCP\App;
@@ -73,7 +74,7 @@ class Application extends \OCP\AppFramework\App {
                                        $container->query('UserSetup'),
                                        $server->getUserSession(),
                                        $container->query('Util'),
-                                       new \OCA\Encryption\Session($server->getSession()),
+                                       $container->query('Session'),
                                        $container->query('Crypt'),
                                        $container->query('Recovery'))
                        ]);
@@ -109,6 +110,13 @@ class Application extends \OCP\AppFramework\App {
                                        $server->getConfig());
                        });
 
+               $container->registerService('Session',
+                       function (IAppContainer $c) {
+                               $server = $c->getServer();
+                               return new Session($server->getSession());
+                       }
+               );
+
                $container->registerService('KeyManager',
                        function (IAppContainer $c) {
                                $server = $c->getServer();
@@ -138,7 +146,7 @@ class Application extends \OCP\AppFramework\App {
                                        new \OC\Files\View());
                        });
 
-                       $container->registerService('RecoveryController', function (IAppContainer $c) {
+               $container->registerService('RecoveryController', function (IAppContainer $c) {
                        $server = $c->getServer();
                        return new \OCA\Encryption\Controller\RecoveryController(
                                $c->getAppName(),
@@ -148,6 +156,16 @@ class Application extends \OCP\AppFramework\App {
                                $c->query('Recovery'));
                });
 
+               $container->registerService('StatusController', function (IAppContainer $c) {
+                       $server = $c->getServer();
+                       return new \OCA\Encryption\Controller\StatusController(
+                               $c->getAppName(),
+                               $server->getRequest(),
+                               $server->getL10N($c->getAppName()),
+                               $c->query('Session')
+                       );
+               });
+
                $container->registerService('UserSetup',
                        function (IAppContainer $c) {
                                $server = $c->getServer();
index 0dab4a01b97efc54924670734b5586be5c7a488a..4194308a0ce625ec8ca48e01341c4f991d1fa844 100644 (file)
@@ -35,10 +35,15 @@ namespace OCA\Encryption\AppInfo;
                'url' => '/ajax/changeRecoveryPassword',
                'verb' => 'POST'
        ],
-               [
+       [
                'name' => 'Recovery#userSetRecovery',
                'url' => '/ajax/userSetRecovery',
                'verb' => 'POST'
+       ],
+       [
+               'name' => 'Status#getStatus',
+               'url' => '/ajax/getStatus',
+               'verb' => 'GET'
        ]
 
 
diff --git a/apps/encryption/controller/statuscontroller.php b/apps/encryption/controller/statuscontroller.php
new file mode 100644 (file)
index 0000000..fc06d7f
--- /dev/null
@@ -0,0 +1,89 @@
+<?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\Controller;
+
+
+use OCA\Encryption\Session;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\IL10N;
+use OCP\IRequest;
+
+class StatusController extends Controller {
+
+       /** @var IL10N */
+       private $l;
+
+       /** @var Session */
+       private $session;
+
+       /**
+        * @param string $AppName
+        * @param IRequest $request
+        * @param IL10N $l10n
+        * @param Session $session
+        */
+       public function __construct($AppName,
+                                                               IRequest $request,
+                                                               IL10N $l10n,
+                                                               Session $session
+                                                               ) {
+               parent::__construct($AppName, $request);
+               $this->l = $l10n;
+               $this->session = $session;
+       }
+
+       /**
+        * @NoAdminRequired
+        * @return DataResponse
+        */
+       public function getStatus() {
+
+               switch( $this->session->getStatus()) {
+                       case Session::INIT_EXECUTED:
+                               $status = 'success';
+                               $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.', array('app' => 'encryption'));
+                               break;
+                       case Session::NOT_INITIALIZED:
+                               $status = 'success';
+                               $message = (string)$this->l->t(
+                                       'Encryption App is enabled but your keys are not initialized,'
+                                       . ' please log-out and log-in again', array('app' => 'encryption'));
+                               break;
+                       default:
+                               $status = 'error';
+               }
+
+               return new DataResponse(
+                       array(
+                               'status' => $status,
+                               'data' => array(
+                                       'message' => $message)
+                       )
+               );
+       }
+
+}
index d2d1c3a1fc505dd41dc22dbf2798e4fbd0b4c6b2..c02b4d74ae8fde7132db6ef5f98feb936f6b479d 100644 (file)
@@ -9,8 +9,33 @@
  * @namespace
  * @memberOf OC
  */
-OC.Encryption={
-       MIGRATION_OPEN:0,
-       MIGRATION_COMPLETED:1,
-       MIGRATION_IN_PROGRESS:-1,
+OC.Encryption= {
+       MIGRATION_OPEN: 0,
+       MIGRATION_COMPLETED: 1,
+       MIGRATION_IN_PROGRESS: -1,
+
+
+       displayEncryptionWarning: function () {
+
+               if (!OC.Notification.isHidden()) {
+                       return;
+               }
+
+               $.get(
+                       OC.generateUrl('/apps/encryption/ajax/getStatus')
+                       ,  function( result ) {
+                               if (result.status === "success") {
+                                       OC.Notification.show(result.data.message);
+                               }
+                       }
+               );
+       }
 };
+
+$(document).ready(function() {
+       // wait for other apps/extensions to register their event handlers and file actions
+       // in the "ready" clause
+       _.defer(function() {
+               OC.Encryption.displayEncryptionWarning();
+       });
+});
index 87adf75c924eded299d1b1c3f27de7aae59e451d..0661b6762ee41193fabb6ba159d6d4de620189e0 100644 (file)
@@ -295,6 +295,9 @@ class KeyManager {
         * @return boolean
         */
        public function init($uid, $passPhrase) {
+
+               $this->session->setStatus(Session::INIT_EXECUTED);
+
                try {
                        $privateKey = $this->getPrivateKey($uid);
                        $privateKey = $this->crypt->decryptPrivateKey($privateKey,
@@ -305,10 +308,13 @@ class KeyManager {
                        return false;
                }
 
-               $this->session->setPrivateKey($privateKey);
-               $this->session->setStatus(Session::INIT_SUCCESSFUL);
+               if ($privateKey) {
+                       $this->session->setPrivateKey($privateKey);
+                       $this->session->setStatus(Session::INIT_SUCCESSFUL);
+                       return true;
+               }
 
-               return true;
+               return false;
        }
 
        /**