feat(core(js)): improve Google Authenticator on login page, add QR code

Closes #2722
This commit is contained in:
Francis Lachapelle
2020-05-07 16:45:37 -04:00
parent f78300a12e
commit e8f0471bcf
8 changed files with 116 additions and 34 deletions

View File

@@ -0,0 +1,41 @@
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
(function() {
/* jshint validthis: true, newcap: false */
'use strict';
/**
* sgQrCode - Build a otpauth URI and generate a QR Code for the provided secret.
* @see {@link https://davidshimjs.github.io/qrcodejs/|QRCode.js}
* @memberof SOGo.Common
* @example:
<sg-qr-code text="secret"/>
*/
sgQrCode.$inject = ['sgSettings'];
function sgQrCode(Settings) {
return {
restrict: 'E',
scope: {
text: '@',
width: '@',
height: '@'
},
link: link
};
function link(scope, element, attrs) {
var width = parseInt(scope.width) || 256,
height = parseInt(scope.height) || width,
uri = 'otpauth://totp/SOGo:' + Settings.activeUser('email') + '?secret=' + scope.text.replace(/=+$/, '') + '&issuer=SOGo';
new QRCode(element[0], {
text: uri,
width: width,
height: height
});
}
}
angular
.module('SOGo.Common')
.directive('sgQrCode', sgQrCode);
})();

View File

@@ -23,7 +23,9 @@
if (/\blanguage=/.test($window.location.search))
this.creds.language = $window.language;
this.loginState = false;
this.showGoogleAuthenticatorCode = false;
// Code pattern for Google verification code
this.verificationCodePattern = '\\d{6}';
// Show login once everything is initialized
this.showLogin = false;
@@ -35,9 +37,8 @@
Authentication.login(vm.creds)
.then(function(data) {
if (typeof data.gamissingkey != 'undefined' && data.gamissingkey == 1) {
vm.showGoogleAuthenticatorCode = true;
vm.loginState = 'error';
if (data.gamissingkey) {
vm.loginState = 'googleauthenticatorcode';
}
else {
vm.loginState = 'logged';
@@ -58,6 +59,11 @@
return false;
};
this.restoreLogin = function() {
vm.loginState = false;
delete vm.creds.verificationCode;
};
this.showAbout = function($event) {
$mdDialog.show({
targetEvent: $event,