Fixed FIDO2 HW keys with LDAP.
Ylian Saint-Hilaire committed
Jul 28, 2020 at 10:29 UTC
11af25924a79eb257c4cd4bad55cdc6b6c38974c
1 file changed
+9
-2
webserver.js
+9
-2
@@ -948,6 +948,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
948
req.session.loginmode = '4';
949
req.session.tokenemail = ((user.email != null) && (user.emailVerified == true) && (parent.mailserver != null) && (user.otpekey != null));
950
req.session.tokensms = ((user.phone != null) && (parent.smsserver != null));
951
+ req.session.tokenuserid = userid;
952
req.session.tokenusername = xusername;
953
req.session.tokenpassword = xpassword;
954
if (direct === true) { handleRootRequestEx(req, res, domain); } else { res.redirect(domain.url + getQueryPortion(req)); }
@@ -1042,6 +1043,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1043
parent.debug('web', 'handleLoginRequest: login ok, password change requested');
1044
req.session.loginmode = '6';
1045
req.session.messageid = 113; // Password change requested.
1046
+ req.session.resettokenuserid = userid;
1047
req.session.resettokenusername = xusername;
1048
req.session.resettokenpassword = xpassword;
1049
if (direct === true) { handleRootRequestEx(req, res, domain); } else { res.redirect(domain.url + getQueryPortion(req)); }
@@ -1062,6 +1064,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1064
//req.session.regenerate(function () {
1065
// Store the user's primary key in the session store to be retrieved, or in this case the entire user object
1066
delete req.session.loginmode;
1067
+ delete req.session.tokenuserid;
1068
delete req.session.tokenusername;
1069
delete req.session.tokenpassword;
1070
delete req.session.tokenemail;
@@ -1254,8 +1257,10 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1257
if ((domain == null) || (domain.auth == 'sspi') || (domain.auth == 'ldap') || (typeof req.body.rpassword1 != 'string') || (typeof req.body.rpassword2 != 'string') || (req.body.rpassword1 != req.body.rpassword2) || (typeof req.body.rpasswordhint != 'string') || (req.session == null) || (typeof req.session.resettokenusername != 'string') || (typeof req.session.resettokenpassword != 'string')) {
1258
parent.debug('web', 'handleResetPasswordRequest: checks failed');
1259
delete req.session.loginmode;
1260
+ delete req.session.tokenuserid;
1261
delete req.session.tokenusername;
1262
delete req.session.tokenpassword;
1263
+ delete req.session.resettokenuserid;
1264
delete req.session.resettokenusername;
1265
delete req.session.resettokenpassword;
1266
delete req.session.tokenemail;
@@ -1317,8 +1322,10 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1322
// Failed, error out.
1323
parent.debug('web', 'handleResetPasswordRequest: failed authenticate()');
1324
delete req.session.loginmode;
1325
+ delete req.session.tokenuserid;
1326
delete req.session.tokenusername;
1327
delete req.session.tokenpassword;
1328
+ delete req.session.resettokenuserid;
1329
delete req.session.resettokenusername;
1330
delete req.session.resettokenpassword;
1331
delete req.session.tokenemail;
@@ -2268,8 +2275,8 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2275
// Send back the login application
2276
// If this is a 2 factor auth request, look for a hardware key challenge.
2277
// Normal login 2 factor request
2271
- if (req.session && (req.session.loginmode == '4') && (req.session.tokenusername)) {
2272
- var user = obj.users['user/' + domain.id + '/' + req.session.tokenusername.toLowerCase()];
2278
+ if (req.session && (req.session.loginmode == '4') && (req.session.tokenuserid)) {
2279
+ var user = obj.users[req.session.tokenuserid];
2280
if (user != null) {
2281
parent.debug('web', 'handleRootRequestEx: sending 2FA challenge.');
2282
getHardwareKeyChallenge(req, domain, user, function (hwchallenge) { handleRootRequestLogin(req, res, domain, hwchallenge, passRequirements); });