Skip to content

Commit da22e07

Browse files
committed
Fixed a bug that prevented the mfa to be enabled
1 parent 0bfd2f9 commit da22e07

File tree

3 files changed

+27
-20
lines changed

3 files changed

+27
-20
lines changed

backend/internal/mfa.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const authModel = require('../models/auth');
2-
const error = require('../lib/error');
2+
const error = require('../lib/error');
33
const speakeasy = require('speakeasy');
44

55
module.exports = {
@@ -13,10 +13,10 @@ module.exports = {
1313
throw new error.AuthError('MFA is not enabled for this user.');
1414
}
1515
const verified = speakeasy.totp.verify({
16-
secret: auth.mfa_secret,
16+
secret: auth.mfa_secret,
1717
encoding: 'base32',
18-
token: token,
19-
window: 2
18+
token: token,
19+
window: 2
2020
});
2121
if (!verified) {
2222
throw new error.AuthError('Invalid MFA token.');
@@ -58,10 +58,10 @@ module.exports = {
5858
throw new error.AuthError('MFA is not set up for this user.');
5959
}
6060
const verified = speakeasy.totp.verify({
61-
secret: auth.mfa_secret,
61+
secret: auth.mfa_secret,
6262
encoding: 'base32',
63-
token: token,
64-
window: 2
63+
token: token,
64+
window: 2
6565
});
6666
if (!verified) {
6767
throw new error.AuthError('Invalid MFA token.');

backend/routes/mfa.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
const express = require('express');
2-
const jwtdecode = require('../lib/express/jwt-decode');
1+
const express = require('express');
2+
const jwtdecode = require('../lib/express/jwt-decode');
33
const apiValidator = require('../lib/validator/api');
4-
const schema = require('../schema');
5-
const internalMfa = require('../internal/mfa');
6-
const qrcode = require('qrcode');
7-
const speakeasy = require('speakeasy');
8-
const userModel = require('../models/user');
4+
const schema = require('../schema');
5+
const internalMfa = require('../internal/mfa');
6+
const qrcode = require('qrcode');
7+
const speakeasy = require('speakeasy');
8+
const userModel = require('../models/user');
99

1010
let router = express.Router({
1111
caseSensitive: true,
12-
strict: true,
13-
mergeParams: true
12+
strict: true,
13+
mergeParams: true
1414
});
1515

1616
router
@@ -35,7 +35,7 @@ router
3535
.then(({ secret, user }) => {
3636
const otpAuthUrl = speakeasy.otpauthURL({
3737
secret: secret.ascii,
38-
label: user.email,
38+
label: user.email,
3939
issuer: 'Nginx Proxy Manager'
4040
});
4141
qrcode.toDataURL(otpAuthUrl, (err, dataUrl) => {

frontend/js/app/user/form.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ module.exports = Mn.View.extend({
3333
let view = this;
3434
let data = this.ui.form.serializeJSON();
3535

36-
// Save "mfa_validation" value and remove it from data
3736
let mfaToken = data.mfa_validation;
3837
delete data.mfa_validation;
38+
delete data.mfa_password;
3939

4040
let show_password = this.model.get('email') === '[email protected]';
4141

@@ -77,7 +77,12 @@ module.exports = Mn.View.extend({
7777

7878
if (mfaToken) {
7979
return App.Api.Mfa.enable(mfaToken)
80-
.then(() => result);
80+
.then(() => result)
81+
.catch(err => {
82+
view.ui.mfaError.text(err.message).show();
83+
err.mfaHandled = true;
84+
return Promise.reject(err);
85+
});
8186
}
8287
return result;
8388
})
@@ -92,7 +97,9 @@ module.exports = Mn.View.extend({
9297
});
9398
})
9499
.catch(err => {
95-
this.ui.error.text(err.message).show();
100+
if (!err.mfaHandled) {
101+
this.ui.error.text(err.message).show();
102+
}
96103
this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
97104
});
98105
},

0 commit comments

Comments
 (0)