2015-12-09 04:35:05 +01:00
|
|
|
|
angular
|
|
|
|
|
.module('bit.settings')
|
|
|
|
|
|
2016-08-12 02:43:05 +02:00
|
|
|
|
.controller('settingsTwoFactorController', function ($scope, apiService, $uibModalInstance, cryptoService, authService, $q, toastr, $analytics) {
|
|
|
|
|
$analytics.eventTrack('settingsTwoFactorController', { category: 'Modal' });
|
2015-12-09 04:35:05 +01:00
|
|
|
|
var _issuer = 'bitwarden',
|
|
|
|
|
_profile = authService.getUserProfile(),
|
|
|
|
|
_masterPasswordHash;
|
|
|
|
|
|
|
|
|
|
$scope.account = _profile.email;
|
|
|
|
|
$scope.enabled = function () {
|
|
|
|
|
return _profile.extended && _profile.extended.twoFactorEnabled;
|
2015-12-27 05:15:35 +01:00
|
|
|
|
};
|
2015-12-09 04:35:05 +01:00
|
|
|
|
|
|
|
|
|
$scope.auth = function (model) {
|
|
|
|
|
_masterPasswordHash = cryptoService.hashPassword(model.masterPassword);
|
|
|
|
|
|
|
|
|
|
$scope.authPromise = apiService.accounts.getTwoFactor({
|
|
|
|
|
masterPasswordHash: _masterPasswordHash,
|
|
|
|
|
provider: 0 /* Only authenticator provider for now. */
|
|
|
|
|
}, function (response) {
|
2016-12-01 05:22:25 +01:00
|
|
|
|
processResponse(response);
|
2015-12-09 04:35:05 +01:00
|
|
|
|
}).$promise;
|
|
|
|
|
};
|
|
|
|
|
|
2016-11-15 04:35:59 +01:00
|
|
|
|
function formatString(s) {
|
2016-11-15 04:45:01 +01:00
|
|
|
|
if (!s) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-15 04:35:59 +01:00
|
|
|
|
return s.replace(/(.{4})/g, '$1 ').trim().toUpperCase();
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-01 05:22:25 +01:00
|
|
|
|
function processResponse(response) {
|
|
|
|
|
var key = response.AuthenticatorKey;
|
|
|
|
|
$scope.twoFactorModel = {
|
|
|
|
|
enabled: response.TwoFactorEnabled,
|
|
|
|
|
key: formatString(key),
|
|
|
|
|
recovery: formatString(response.TwoFactorRecoveryCode),
|
|
|
|
|
qr: 'https://chart.googleapis.com/chart?chs=120x120&chld=L|0&cht=qr&chl=otpauth://totp/' +
|
|
|
|
|
_issuer + ':' + encodeURIComponent(_profile.email) +
|
|
|
|
|
'%3Fsecret=' + encodeURIComponent(key) +
|
|
|
|
|
'%26issuer=' + _issuer
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-09 04:35:05 +01:00
|
|
|
|
$scope.update = function (model) {
|
|
|
|
|
var currentlyEnabled = $scope.twoFactorModel.enabled;
|
|
|
|
|
if (currentlyEnabled && !confirm('Are you sure you want to disable two-step login?')) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var request = {
|
|
|
|
|
enabled: !currentlyEnabled,
|
2016-12-01 05:22:25 +01:00
|
|
|
|
token: model.token.replace(' ', ''),
|
2016-08-12 02:43:05 +02:00
|
|
|
|
masterPasswordHash: _masterPasswordHash
|
2015-12-09 04:35:05 +01:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$scope.updatePromise = apiService.accounts.putTwoFactor({}, request, function (response) {
|
|
|
|
|
if (response.TwoFactorEnabled) {
|
2016-08-12 02:43:05 +02:00
|
|
|
|
$analytics.eventTrack('Enabled Two-step Login');
|
2015-12-09 04:35:05 +01:00
|
|
|
|
toastr.success('Two-step login has been enabled.');
|
|
|
|
|
if (_profile.extended) _profile.extended.twoFactorEnabled = true;
|
2016-12-01 05:22:25 +01:00
|
|
|
|
processResponse(response);
|
|
|
|
|
$('#token').blur();
|
|
|
|
|
model.token = null;
|
2015-12-09 04:35:05 +01:00
|
|
|
|
}
|
|
|
|
|
else {
|
2016-08-12 02:43:05 +02:00
|
|
|
|
$analytics.eventTrack('Disabled Two-step Login');
|
2015-12-09 04:35:05 +01:00
|
|
|
|
toastr.success('Two-step login has been disabled.');
|
|
|
|
|
if (_profile.extended) _profile.extended.twoFactorEnabled = false;
|
2016-12-01 05:22:25 +01:00
|
|
|
|
$scope.close();
|
2015-12-09 04:35:05 +01:00
|
|
|
|
}
|
|
|
|
|
}).$promise;
|
|
|
|
|
};
|
|
|
|
|
|
2017-02-11 20:21:21 +01:00
|
|
|
|
$scope.print = function (printContent) {
|
|
|
|
|
var w = window.open();
|
|
|
|
|
w.document.write('<div style="font-size: 18px; text-align: center;"><p>bitwarden two-step login recovery code:</p>' +
|
|
|
|
|
'<pre>' + printContent + '</pre>');
|
|
|
|
|
w.print();
|
|
|
|
|
w.close();
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-09 04:35:05 +01:00
|
|
|
|
$scope.close = function () {
|
2017-02-11 23:08:06 +01:00
|
|
|
|
$uibModalInstance.close(!_profile.extended ? null : _profile.extended.twoFactorEnabled);
|
2015-12-09 04:35:05 +01:00
|
|
|
|
};
|
|
|
|
|
});
|