bitwarden-estensione-browser/src/popup/app/services/authService.js

70 lines
3.1 KiB
JavaScript
Raw Normal View History

2016-09-03 06:03:13 +02:00
angular
.module('bit.services')
2017-01-04 00:40:07 +01:00
.factory('authService', function (cryptoService, apiService, userService, tokenService, $q, $rootScope, loginService,
2017-01-18 03:43:26 +01:00
folderService, settingsService, syncService) {
2016-09-03 06:03:13 +02:00
var _service = {};
_service.logIn = function (email, masterPassword, twoFactorCode) {
2016-09-21 05:30:16 +02:00
email = email.toLowerCase();
2016-09-03 06:03:13 +02:00
var key = cryptoService.makeKey(masterPassword, email);
var deferred = $q.defer();
2016-09-05 06:03:49 +02:00
cryptoService.hashPassword(masterPassword, key, function (hashedPassword) {
var request = new TokenRequest(email, hashedPassword, twoFactorCode);
2016-09-03 06:03:13 +02:00
2017-01-18 05:07:46 +01:00
apiService.postIdentityToken(request, function (response) {
// success
2017-01-18 05:07:46 +01:00
if (!response || !response.accessToken) {
2016-09-05 06:03:49 +02:00
return;
}
2016-09-03 06:03:13 +02:00
2017-01-18 05:07:46 +01:00
tokenService.setTokens(response.accessToken, response.refreshToken, function () {
2016-09-05 06:03:49 +02:00
cryptoService.setKey(key, function () {
cryptoService.setKeyHash(hashedPassword, function () {
userService.setUserIdAndEmail(tokenService.getUserId(), tokenService.getEmail(), function () {
chrome.runtime.sendMessage({ command: 'loggedIn' });
deferred.resolve(false);
});
});
2016-09-03 06:03:13 +02:00
});
});
}, function () {
// two factor required
deferred.resolve(true);
2016-09-05 06:03:49 +02:00
}, function (error) {
// error
2016-09-05 06:03:49 +02:00
deferred.reject(error);
2016-09-03 06:03:13 +02:00
});
2016-09-05 06:03:49 +02:00
});
return deferred.promise;
2016-09-03 06:03:13 +02:00
};
2017-01-18 03:43:26 +01:00
// TODO: Fix callback hell by moving to promises
_service.logOut = function (callback) {
userService.getUserId(function (userId) {
2017-01-18 03:43:26 +01:00
syncService.setLastSync(new Date(0), function () {
settingsService.clear(function () {
tokenService.clearToken(function () {
cryptoService.clearKey(function () {
cryptoService.clearKeyHash(function () {
userService.clearUserIdAndEmail(function () {
loginService.clear(userId, function () {
folderService.clear(userId, function () {
$rootScope.vaultLogins = null;
$rootScope.vaultFolders = null;
chrome.runtime.sendMessage({ command: 'loggedOut' });
callback();
2017-01-18 03:43:26 +01:00
});
});
});
});
});
2016-09-21 05:30:16 +02:00
});
});
2016-09-03 06:03:13 +02:00
});
});
};
return _service;
});