UNPKG

will-lib

Version:
101 lines (100 loc) 4.17 kB
"use strict"; 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;