Added MFA to model and internal user

This commit is contained in:
Julian Gassner
2025-01-15 14:33:11 +00:00
parent 69f7920675
commit 35938db24b
2 changed files with 75 additions and 0 deletions

View File

@@ -7,6 +7,8 @@ const authModel = require('../models/auth');
const gravatar = require('gravatar');
const internalToken = require('./token');
const internalAuditLog = require('./audit-log');
const authenticator = require('authenticator');
const qrcode = require('qrcode');
function omissions () {
return ['is_deleted'];
@@ -507,6 +509,36 @@ const internalUser = {
.then((user) => {
return internalToken.getTokenFromUser(user);
});
},
createMFAKey: (access, data) => {
return access.can('users:activate_mfa', data.id)
.then(() => {
return internalUser.get(access, {id: data.id});
})
.then((user) => {
let secret = authenticator.generateKey();
return userModel
.query()
.patchAndFetchById(user.id, { mfa_key: secret })
.then(() => {
let uri = authenticator.generateTotpUri(secret, user.email, 'NginxProxyManager');
return qrcode.toDataURL(uri);
})
.then((qrCode) => {
return { user, qrCode };
});
})
.then(({ user, qrCode }) => {
return internalAuditLog.add(access, {
action: 'updated',
object_type: 'user',
object_id: user.id,
meta: data
})
.then(() => ({ user, qrCode }));
});
}
};