1
0
mirror of https://github.com/moparisthebest/mail synced 2024-08-13 16:43:47 -04:00
mail/src/js/controller/login.js
Felix Hammerl 3e80138a10 [WO-188][WO-421] introduce password-based login
* add custom login ability
* encrypt email password
* allow arbitrary tcp connections
* add db migration script v3 -> v4
* add bug reporting capability with the axe logger
* fix nonexistent folder handling
* enable message upload after sent
* use plain text alternative body when replying to html mails
* Move set-credentials.* -> login-set-credentials.*
* Use login styles for set-credentials
* Make OAuth optional
2014-07-23 13:51:10 +02:00

101 lines
3.1 KiB
JavaScript

define(function(require) {
'use strict';
var appController = require('js/app-controller');
var LoginCtrl = function($scope, $location) {
// check for app update
appController.checkForUpdate();
// start main application controller
appController.start({
onError: $scope.onError
}, function(err) {
if (err) {
$scope.onError(err);
return;
}
initializeUser();
});
function initializeUser() {
// get OAuth token from chrome
appController._auth.getEmailAddress(function(err, info) {
if (err) {
$scope.onError(err);
return;
}
// check if account needs to be selected
if (!info.emailAddress) {
goTo('/add-account');
return;
}
// initiate controller by creating email dao
appController.init({
emailAddress: info.emailAddress,
realname: info.realname
}, function(err, availableKeys) {
if (err) {
$scope.onError(err);
return;
}
redirect(availableKeys);
});
});
}
function redirect(availableKeys) {
// redirect if needed
if (typeof availableKeys === 'undefined') {
// no public key available, start onboarding process
goTo('/login-initial');
} else if (availableKeys && !availableKeys.privateKey) {
// check if private key is synced
appController._keychain.requestPrivateKeyDownload({
userId: availableKeys.publicKey.userId,
keyId: availableKeys.publicKey._id,
}, function(err, privateKeySynced) {
if (err) {
$scope.onError(err);
return;
}
if (privateKeySynced) {
// private key is synced, proceed to download
goTo('/login-privatekey-download');
return;
}
// no private key, import key file
goTo('/login-new-device');
});
} else {
// 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();
}
};
return LoginCtrl;
});