From 4b5d367fdb780598ec2c2742e01ef102d092bab1 Mon Sep 17 00:00:00 2001 From: Tankred Hase Date: Fri, 28 Mar 2014 18:08:04 +0100 Subject: [PATCH] Login to IMAP (appcontroller.onConnect) after show mail-list --- src/js/app-controller.js | 15 +-------------- src/js/controller/login-existing.js | 23 +++-------------------- src/js/controller/login.js | 29 +++++++++++++++++++---------- src/js/controller/navigation.js | 5 ++--- src/js/crypto/pgp.js | 2 +- src/js/dao/email-dao.js | 26 ++++++++++++++++++-------- 6 files changed, 44 insertions(+), 56 deletions(-) diff --git a/src/js/app-controller.js b/src/js/app-controller.js index 27cc70c..341888f 100644 --- a/src/js/app-controller.js +++ b/src/js/app-controller.js @@ -127,11 +127,6 @@ define(function(require) { console.log('IMAP reconnecting...'); // re-init client modules on error self.onConnect(function(err) { - if (!self._initialized) { - callback(err); - return; - } - if (err) { console.error('IMAP reconnect failed!', err); return; @@ -398,15 +393,7 @@ define(function(require) { return; } - // connect tcp clients on first startup - self.onConnect(function(err) { - if (err) { - callback(err); - return; - } - - callback(null, keypair); - }); + callback(null, keypair); }); } }; diff --git a/src/js/controller/login-existing.js b/src/js/controller/login-existing.js index 0a3b9b7..f5cdbf2 100644 --- a/src/js/controller/login-existing.js +++ b/src/js/controller/login-existing.js @@ -15,23 +15,6 @@ define(function(require) { $scope.buttonEnabled = true; $scope.incorrect = false; - // - // Try unlocking without passphrase - // - - unlockCrypto(function(err) { - if (err) { - return; - } - - $location.path('/desktop'); - $scope.$apply(); - }); - - // - // Unlock using passphrase - // - $scope.change = function() { $scope.incorrect = false; }; @@ -44,10 +27,10 @@ define(function(require) { // disable button once loggin has started $scope.buttonEnabled = false; $scope.incorrect = false; - unlockCrypto(onUnlock); + unlockCrypto(); }; - function unlockCrypto(callback) { + function unlockCrypto() { var userId = emailDao._account.emailAddress; appController._emailDao._keychain.getUserKeyPair(userId, function(err, keypair) { if (err) { @@ -58,7 +41,7 @@ define(function(require) { emailDao.unlock({ keypair: keypair, passphrase: $scope.passphrase - }, callback); + }, onUnlock); }); } diff --git a/src/js/controller/login.js b/src/js/controller/login.js index 8baeb04..ba22ba1 100644 --- a/src/js/controller/login.js +++ b/src/js/controller/login.js @@ -35,7 +35,7 @@ define(function(require) { // check if account needs to be selected if (!emailAddress) { - firstLogin(); + goTo('/add-account'); return; } @@ -53,23 +53,32 @@ define(function(require) { }); } - function firstLogin() { - $location.path('/add-account'); - $scope.$apply(); - } - function redirect(availableKeys) { // redirect if needed if (typeof availableKeys === 'undefined') { // no public key available, start onboarding process - $location.path('/login-initial'); + goTo('/login-initial'); } else if (!availableKeys.privateKey) { // no private key, import key - $location.path('/login-new-device'); + goTo('/login-new-device'); } else { - // public and private key available, just login - $location.path('/login-existing'); + // public and private key available, try empty passphrase + appController._emailDao.unlock({ + keypair: availableKeys, + passphrase: undefined + }, function(err) { + if (err) { + goTo('/login-existing'); + return; + } + + goTo('/desktop'); + }); } + } + + function goTo(location) { + $location.path(location); $scope.$apply(); } }; diff --git a/src/js/controller/navigation.js b/src/js/controller/navigation.js index 73f3c5e..9e33930 100644 --- a/src/js/controller/navigation.js +++ b/src/js/controller/navigation.js @@ -19,9 +19,6 @@ define(function(require) { // attach global error handler errorUtil.attachHandler($scope); - // app controller is initialized - appController._initialized = true; - emailDao = appController._emailDao; outboxBo = appController._outboxBo; @@ -70,6 +67,8 @@ define(function(require) { initFolders(); // select inbox as the current folder on init $scope.openFolder($scope.account.folders[0]); + // connect imap/smtp clients on first startup + appController.onConnect($scope.onError); // // helper functions diff --git a/src/js/crypto/pgp.js b/src/js/crypto/pgp.js index e7af821..3ef6abb 100644 --- a/src/js/crypto/pgp.js +++ b/src/js/crypto/pgp.js @@ -19,7 +19,7 @@ define(function(require) { PGP.prototype.generateKeys = function(options, callback) { var userId; - if (!util.emailRegEx.test(options.emailAddress) || !options.keySize || typeof options.passphrase !== 'string') { + if (!util.emailRegEx.test(options.emailAddress) || !options.keySize) { callback({ errMsg: 'Crypto init failed. Not all options set!' }); diff --git a/src/js/dao/email-dao.js b/src/js/dao/email-dao.js index ce706fa..78d1fc6 100644 --- a/src/js/dao/email-dao.js +++ b/src/js/dao/email-dao.js @@ -73,7 +73,24 @@ define(function(require) { return; } - self._account.folders = folders; + // if empty (first time login) use dummy folders ... overwritten in onConnect + self._account.folders = (folders) ? folders : [{ + type: 'Inbox', + path: 'INBOX' + }, { + type: 'Sent', + path: 'SENT' + }, { + type: 'Outbox', + path: 'OUTBOX' + }, { + type: 'Drafts', + path: 'DRAFTS' + }, { + type: 'Trash', + path: 'TRASH' + }]; + callback(null, keypair); }); } @@ -114,13 +131,6 @@ define(function(require) { // set status to online self._account.online = true; - // check memory - if (self._account.folders) { - // no need to init folder again on connect... already in memory - callback(); - return; - } - // init folders self._imapListFolders(function(err, folders) { if (err) {