1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-16 16:23:44 +00:00
Files
browser/src/app/settings/settingsTwoStepU2fController.js
2017-06-27 08:14:03 -04:00

105 lines
3.5 KiB
JavaScript

angular
.module('bit.settings')
.controller('settingsTwoStepU2fController', function ($scope, apiService, $uibModalInstance, cryptoService,
authService, toastr, $analytics, constants, $timeout, $window) {
$analytics.eventTrack('settingsTwoStepU2fController', { category: 'Modal' });
var _masterPasswordHash;
var closed = false;
$scope.deviceResponse = null;
$scope.deviceListening = false;
$scope.deviceError = false;
$scope.auth = function (model) {
_masterPasswordHash = cryptoService.hashPassword(model.masterPassword);
$scope.authPromise = apiService.twoFactor.getU2f({}, {
masterPasswordHash: _masterPasswordHash
}).$promise.then(function (response) {
$scope.enabled = response.Enabled;
$scope.challenge = response.Challenge;
$scope.authed = true;
return $scope.readDevice();
});
};
$scope.readDevice = function () {
if (closed) {
return;
}
console.log('listening for key...');
$scope.deviceResponse = null;
$scope.deviceError = false;
$scope.deviceListening = true;
$window.u2f.register($scope.challenge.AppId, [{
version: $scope.challenge.Version,
challenge: $scope.challenge.Challenge
}], [], function (data) {
$scope.deviceListening = false;
if (data.errorCode === 5) {
$scope.readDevice();
return;
}
else if (data.errorCode) {
$scope.deviceError = true;
$scope.$apply();
console.log('error: ' + data.errorCode);
return;
}
$scope.deviceResponse = JSON.stringify(data);
$scope.$apply();
}, 10);
};
$scope.submit = function () {
if ($scope.enabled) {
disable();
return;
}
update();
};
function disable() {
if (!confirm('Are you sure you want to disable the U2F provider?')) {
return;
}
$scope.submitPromise = apiService.twoFactor.disable({}, {
masterPasswordHash: _masterPasswordHash,
type: constants.twoFactorProvider.u2f
}, function (response) {
$analytics.eventTrack('Disabled Two-step U2F');
toastr.success('U2F has been disabled.');
$scope.enabled = response.Enabled;
$scope.close();
}).$promise;
}
function update() {
$scope.submitPromise = apiService.twoFactor.putU2f({}, {
deviceResponse: $scope.deviceResponse,
masterPasswordHash: _masterPasswordHash
}, function (response) {
$analytics.eventTrack('Enabled Two-step U2F');
$scope.enabled = response.Enabled;
$scope.challenge = null;
$scope.deviceResponse = null;
$scope.deviceError = false;
}).$promise;
}
$scope.close = function () {
$uibModalInstance.close($scope.enabled);
};
$scope.$on('modal.closing', function (event) {
closed = true;
});
});