feat: make auth backend configurable

This commit is contained in:
2019-08-05 04:34:00 +02:00
parent f673d199b2
commit 3d940de3f7
+58 -39
View File
@@ -61,7 +61,7 @@ function IsValidLDAPUser(username) {
var dcstrings = domain.split(".");
if (dcstrings.length > 0) {
dcstring += dcstrings.join(",dc=");
}
}
}
var search_options = { scope : 'sub' };
var _filter = '(&(objectClass=inetOrgPerson)';
@@ -115,14 +115,14 @@ function IsValidLDAPUser(username) {
console.log(moment().format("LTS") + " [valid LDAP user] ", username);
resolve(true);
} else {
console.log(moment().format("LTS") + " [no valid LDAP user] - sending 401");
console.log(moment().format("LTS") + " [no valid LDAP user] - sending 401");
resolve(false);
}
});
});
}
}
);
);
});
}
@@ -147,17 +147,17 @@ function IsValidLDAPAuth(username, password) {
console.error(moment().format("LTS") + " [profile ldap] unsupported config.ldap.ldapType : '"+config.ldap.ldapType+"'");
resolve(false);
}
ldap.bind( uiddn, password,
ldap.bind( uiddn, password,
err => {
if (err) {
console.error(moment().format("LTS") + " [user ldap.bind] fail ", err);
resolve(false);
} else {
console.error(moment().format("LTS") + " [user ldap.bind]", err);
resolve(true);
resolve(true);
}
}
);
);
});
}
@@ -181,8 +181,8 @@ function IsValidRedmineUser(username) {
console.log("db connection error: ", derr);
resolve(false);
}
}
);
}
);
});
}
@@ -196,7 +196,7 @@ function IsValidRedmineAuth(username, password) {
queryparams[1] = password;
queryparams[2] = "sha1";
queryparams[3] = "hex";
var query = "SELECT DISTINCT ON (uid) users.login AS uid, users.firstname AS givenName, users.lastname AS sn FROM users ";
query += "WHERE users.status=1 AND users.login=$1 AND substring(users.hashed_password, 0, length(users.hashed_password)+1) = encode(digest(users.salt||encode(digest($2, $3), $4), $3), $4)";
dbpool.query(query, queryparams, function (derr, dres) {
@@ -210,8 +210,8 @@ function IsValidRedmineAuth(username, password) {
console.log("db connection error: ", derr);
resolve(false);
}
}
);
}
);
});
}
@@ -225,7 +225,7 @@ function IsValidOldSecret(username, password) {
var OldDay = secretTimeseed.substring(0,2);
var OldMonth = secretTimeseed.substring(2,4);
var OldHour = secretTimeseed.substring(8,10);
var oldMoment = moment.utc(OldYear + "-" + OldMonth + "-" + OldDay + " " + OldHour).valueOf();
var oldMoment = moment.utc(OldYear + "-" + OldMonth + "-" + OldDay + " " + OldHour).valueOf();
var nowMoment = moment.utc().valueOf();
if (oldMoment >= nowMoment) {
// OldSecretTest is still within valid time Timeseed as moment
@@ -235,7 +235,7 @@ function IsValidOldSecret(username, password) {
mangledarray.push(uid.charCodeAt(i) + 1);
}
var mangledusername=mangledarray.join('');
var testSecret = secretTimeseed + mangledusername + config.xmppToken;
var testdigest = md5(testSecret);
var testhash = testdigest;
@@ -247,16 +247,16 @@ function IsValidOldSecret(username, password) {
return true;
} else {
console.log(moment().format("LTS") + " [OldSecretTest] oldSecret invalid for ", username);
return false;
}
return false;
}
} else {
console.log(moment().format("LTS") + " [OldSecretTest] oldSecret expired for ", username);
return false;
}
}
} catch (e) {
console.error(moment().format("LTS") + " [OldSecretTest] error: ", e);
return false;
}
}
}
function IsValidJWT(username,password) {
@@ -269,11 +269,11 @@ function IsValidJWT(username,password) {
} catch (e) {
console.error(moment().format("LTS") + " [JWTValidation] error: ", e);
return false;
}
}
}
app.get('/', async function (req, res) {
if (req.headers.authorization && req.headers.authorization.startsWith("Basic")) {
app.get('/', async function (req, res) {
if (req.headers.authorization && req.headers.authorization.startsWith("Basic")) {
try {
var b64input = req.headers.authorization.split(" ")[1];
var decodedInput = new Buffer(b64input, 'base64').toString('ascii');
@@ -286,32 +286,51 @@ app.get('/', async function (req, res) {
password += ":";
}
}
let validRedmineUser = await IsValidRedmineUser(username);
console.log(moment().format("LTS") + ' username ' + username +' - IsValidRedmineUser: ', validRedmineUser);
console.log(moment().format("LTS") + ' username ' + username +' - password: ', password);
console.log(moment().format("LTS") + ' username ' + username +' - indesxforOldToken: ', password.indexOf("-"));
if (validRedmineUser === true) {
let validRedmineAuth = await IsValidRedmineAuth(username, password);
console.log("IsValidRedmineAuth: ", validRedmineAuth);
console.log("IsValidOldSecret: ", IsValidOldSecret(username, password));
console.log("IsValidJWT: ", IsValidJWT(username, password));
if (validRedmineUser && (validRedmineAuth || IsValidOldSecret(username, password) || IsValidJWT(username, password))) {
res.status(200).json(null);
} else {
res.status(401).json(null);
}
if (config.useRedmineAuth) {
let validRedmineUser = await IsValidRedmineUser(username);
console.log(moment().format("LTS") + ' username ' + username +' - IsValidRedmineUser: ', validRedmineUser);
console.log(moment().format("LTS") + ' username ' + username +' - password: ', password);
console.log(moment().format("LTS") + ' username ' + username +' - indesxforOldToken: ', password.indexOf("-"));
if (validRedmineUser === true) {
let validRedmineAuth = await IsValidRedmineAuth(username, password);
console.log("IsValidRedmineAuth: ", validRedmineAuth);
console.log("IsValidOldSecret: ", IsValidOldSecret(username, password));
console.log("IsValidJWT: ", IsValidJWT(username, password));
if (validRedmineUser && (validRedmineAuth || IsValidOldSecret(username, password) || IsValidJWT(username, password))) {
res.status(200).json(null);
} else {
res.status(401).json(null);
}
} else {
res.status(401).json(null);
}
} else {
res.status(401).json(null);
}
// res.status(200).json(null);
let validLdapUser = await IsValidLDAPUser(username);
console.log(moment().format("LTS") + ' username ' + username +' - validInLDAP: ', validLdapUser);
console.log(moment().format("LTS") + ' username ' + username +' - password: ', password);
console.log(moment().format("LTS") + ' username ' + username +' - indesxforOldToken: ', password.indexOf("-"));
if (validLdapUser === true) {
let validLdapAuth = await IsValidLDAPAuth(username, password);
if (validLdapUser && (validLdapAuth || IsValidOldSecret(username, password) || IsValidJWT(username, password))) {
res.status(200).json(null);
} else {
res.status(401).json(null);
}
} else {
res.status(401).json(null);
}
}
// res.status(200).json(null);
} catch (e) {
console.log(moment().format("LTS") + ' Error: ', e);
}
}
} else {
console.log(moment().format("LTS") + ' no auth header');
res.status(401).json(null);
}
});