2016-09-03 06:03:13 +02:00
|
|
|
|
angular
|
|
|
|
|
.module('bit.services')
|
|
|
|
|
|
2017-10-17 05:11:32 +02:00
|
|
|
|
.factory('authService', function (cryptoService, apiService, userService, tokenService, $q, $rootScope,
|
2017-06-27 04:24:10 +02:00
|
|
|
|
folderService, settingsService, syncService, appIdService, utilsService, constantsService) {
|
2016-09-03 06:03:13 +02:00
|
|
|
|
var _service = {};
|
|
|
|
|
|
2017-06-27 04:24:10 +02:00
|
|
|
|
_service.logIn = function (email, masterPassword, twoFactorProvider, twoFactorToken, remember) {
|
2016-09-21 05:30:16 +02:00
|
|
|
|
email = email.toLowerCase();
|
2017-10-17 15:25:22 +02:00
|
|
|
|
var key = cryptoService.makeKey(masterPassword, email),
|
|
|
|
|
deferred = $q.defer(),
|
|
|
|
|
deviceRequest = null;
|
2016-09-03 06:03:13 +02:00
|
|
|
|
|
2017-10-17 15:25:22 +02:00
|
|
|
|
appIdService.getAppId().then(function (appId) {
|
|
|
|
|
deviceRequest = new DeviceRequest(appId, utilsService);
|
|
|
|
|
return tokenService.getTwoFactorToken(email);
|
|
|
|
|
}).then(function (twoFactorRememberedToken) {
|
|
|
|
|
cryptoService.hashPassword(masterPassword, key, function (hashedPassword) {
|
|
|
|
|
var request;
|
|
|
|
|
|
|
|
|
|
if (twoFactorToken && typeof (twoFactorProvider) !== 'undefined' && twoFactorProvider !== null) {
|
|
|
|
|
request = new TokenRequest(email, hashedPassword, twoFactorProvider, twoFactorToken, remember,
|
|
|
|
|
deviceRequest);
|
|
|
|
|
}
|
|
|
|
|
else if (twoFactorRememberedToken) {
|
|
|
|
|
request = new TokenRequest(email, hashedPassword, constantsService.twoFactorProvider.remember,
|
|
|
|
|
twoFactorRememberedToken, false, deviceRequest);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
request = new TokenRequest(email, hashedPassword, null, null, false, deviceRequest);
|
|
|
|
|
}
|
2017-06-27 04:24:10 +02:00
|
|
|
|
|
2017-10-17 15:25:22 +02:00
|
|
|
|
apiService.postIdentityToken(request, function (response) {
|
|
|
|
|
// success
|
|
|
|
|
if (!response || !response.accessToken) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2016-09-03 06:03:13 +02:00
|
|
|
|
|
2017-10-17 15:25:22 +02:00
|
|
|
|
if (response.twoFactorToken) {
|
|
|
|
|
tokenService.setTwoFactorToken(response.twoFactorToken, email, function () { });
|
|
|
|
|
}
|
2017-06-27 04:24:10 +02:00
|
|
|
|
|
2017-10-17 15:25:22 +02:00
|
|
|
|
tokenService.setTokens(response.accessToken, response.refreshToken, function () {
|
|
|
|
|
cryptoService.setKey(key, function () {
|
|
|
|
|
cryptoService.setKeyHash(hashedPassword, function () {
|
|
|
|
|
userService.setUserIdAndEmail(tokenService.getUserId(), tokenService.getEmail(),
|
|
|
|
|
function () {
|
|
|
|
|
cryptoService.setEncKey(response.key).then(function () {
|
|
|
|
|
return cryptoService.setEncPrivateKey(response.privateKey);
|
|
|
|
|
}).then(function () {
|
|
|
|
|
chrome.runtime.sendMessage({ command: 'loggedIn' });
|
|
|
|
|
deferred.resolve({
|
|
|
|
|
twoFactor: false,
|
|
|
|
|
twoFactorProviders: null
|
2017-06-27 04:24:10 +02:00
|
|
|
|
});
|
2017-06-26 15:55:07 +02:00
|
|
|
|
});
|
2017-10-17 15:25:22 +02:00
|
|
|
|
});
|
2017-01-19 04:14:51 +01:00
|
|
|
|
});
|
2016-10-25 04:16:47 +02:00
|
|
|
|
});
|
2016-09-03 06:03:13 +02:00
|
|
|
|
});
|
2017-10-17 15:25:22 +02:00
|
|
|
|
}, function (providers) {
|
|
|
|
|
// two factor required
|
|
|
|
|
deferred.resolve({
|
|
|
|
|
twoFactor: true,
|
|
|
|
|
twoFactorProviders: providers
|
|
|
|
|
});
|
|
|
|
|
}, function (error) {
|
|
|
|
|
// error
|
|
|
|
|
deferred.reject(error);
|
2016-09-03 06:03:13 +02:00
|
|
|
|
});
|
|
|
|
|
});
|
2016-09-05 06:03:49 +02:00
|
|
|
|
});
|
2016-09-05 07:49:44 +02:00
|
|
|
|
return deferred.promise;
|
2016-09-03 06:03:13 +02:00
|
|
|
|
};
|
|
|
|
|
|
2016-09-03 21:44:32 +02:00
|
|
|
|
_service.logOut = function (callback) {
|
2017-10-14 22:31:35 +02:00
|
|
|
|
$rootScope.vaultCiphers = null;
|
2017-01-19 06:21:20 +01:00
|
|
|
|
$rootScope.vaultFolders = null;
|
|
|
|
|
callback();
|
2016-09-03 06:03:13 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return _service;
|
|
|
|
|
});
|