will-lib
Version:
Library classes
101 lines (100 loc) • 4.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActiveAuthen = void 0;
const AuthenError_1 = require("../AuthenError");
const HTTP_1 = require("../HTTP");
let ActiveDirectory = require('activedirectory');
class ActiveAuthen {
static getAccountDomain(username) {
let idx = username.indexOf("@");
if (idx && idx > 0) {
let domain = username.substring(idx + 1);
username = username.substring(0, idx);
return { accountName: username, domainName: domain };
}
return { accountName: username, domainName: undefined };
}
getUserName(username, config) {
let idx = username.indexOf("@");
if (idx && idx < 0) {
username = username + "@" + config.domain;
}
return username;
}
static getActiveAccount(username) {
let names = username.split(" ");
if (names.length > 1) {
let name = names[0];
let surname = names[1];
let displaysurname = surname;
if (displaysurname.length > 3) {
displaysurname = displaysurname.substring(0, 3);
}
return { firstName: name, lastName: surname, displayName: name + "_" + displaysurname };
}
return { firstName: username, lastName: "", displayName: username };
}
async isAuthenticate(username, password, config) {
let ad = new ActiveDirectory(config);
username = this.getUserName(username, config);
return new Promise((resolve, reject) => {
ad.authenticate(username, password, function (aerr, auth) {
if (aerr) {
reject(new AuthenError_1.AuthenError("Unauthorized", HTTP_1.HTTP.UNAUTHORIZED, 401, aerr));
return;
}
console.log("isAuthenticate", JSON.stringify(auth));
if (auth) {
resolve(true);
}
else {
resolve(false);
}
});
});
}
async getActiveUser(username, password, config) {
let account = ActiveAuthen.getAccountDomain(username);
let sAMAccountName = account.accountName;
username = this.getUserName(username, config);
let findcfg = {
url: config?.url,
baseDN: config?.baseDN,
username: username,
password: password
};
console.log("getActiveUser", sAMAccountName);
let ad = new ActiveDirectory(findcfg);
return new Promise((resolve, reject) => {
ad.findUser(sAMAccountName, function (ferr, user) {
if (ferr) {
reject(new AuthenError_1.AuthenError("User not found", HTTP_1.HTTP.NOT_FOUND, 404, ferr));
return;
}
if (user) {
console.log("getActiveUser", JSON.stringify(user));
let ac = ActiveAuthen.getActiveAccount(user.cn ? user.cn : user.displayName);
resolve({
accountName: sAMAccountName,
principalName: user.userPrincipalName,
commonName: user.cn ? user.cn : user.displayName,
displayName: ac.displayName,
firstName: ac.firstName,
lastName: ac.lastName
});
}
else {
reject(new AuthenError_1.AuthenError("User not found", HTTP_1.HTTP.NOT_FOUND));
}
});
});
}
async authenticate(username, password, config) {
let valid = await this.isAuthenticate(username, password, config);
if (valid) {
return await this.getActiveUser(username, password, config);
}
return Promise.reject(new AuthenError_1.AuthenError("Invalid user or password", HTTP_1.HTTP.UNAUTHORIZED, -3004));
}
}
exports.ActiveAuthen = ActiveAuthen;