//Extract last cn from DN.
var input=extractCN(input);
return input;
function extractCN(userDN) {
var result = [];
var regexCN = /cn=(.*?),/m;
try {
var cnMatch = regexCN.exec(userDN);
var userCN = cnMatch[1];
result.push({ key: userDN, value: userCN });
} catch (error) {
return error;
}
return result;
}
//Get localization from eDir attributes like nrfLocalizedDescr or nrfLocalizedName
//Returns "de" localization if aveilable. If not - returns "en"
let res=getAvailableLocalization(input,"de","en");
if(res && res.length>0){
return res.toString();
}
return input;
function getAvailableLocalization(localString, firstLocalization, secondLocalization) {
var res = ""
var primaryLocalization = getLocalization(localString, firstLocalization)
if (primaryLocalization && primaryLocalization.length > 0) {
res = primaryLocalization;
} else {
var secondaryLocalization = getLocalization(localString, secondLocalization)
if (secondaryLocalization && secondaryLocalization.length > 0) {
res = secondaryLocalization;
}
}
return res;
}
function getLocalization(localizedAttr, localization) {
if (localizedAttr && localizedAttr.length > 0) {
try {
var locz = localizedAttr.split('|');
for (i in locz) {
var currentLocalozation = locz[i].split("~");
if (currentLocalozation[0] === localization) {
return [currentLocalozation[1]];
}
}
} catch (e) { }
}
}
//Parse user DNs from XML like
/*
20220514095402Z
498765468498bdfgkjdfgn6454
cn=ysommer,ou=users,o=data
approved
20220515095402Z
cn=afuhrmann,ou=users,o=data
denied
20220515255402Z
20220531184746Z
*/
//AVAILABLE since ACD v.3.2!!! due to returning array of objects- result.push({key:userDN, value:userCN})
//ACD of older varsions have to return string only!
var input=extractDN(input);
return input;
function extractDN(XMLtext) {
var result = [];
var regexApprover = /(.*?)<\/user>/m;
var regexCN=/cn=(.*?),/m;
try {
var splitVal = XMLtext.split("");
for (var j = 0; j < splitVal.length - 1; j++) {
path = splitVal[j];
var approverMatch = regexApprover.exec(path);
var userDN = approverMatch[1];
var cnMatch = regexCN.exec(userDN);
var userCN = cnMatch[1];
result.push({key:userDN, value:userCN});
}
} catch (error) {
return error;
}
return result;
}
//Parse DNs fron JSON of format: {"reason":"GN-USR-Identity - orgunit add L40","approver":"cn=mlang,ou=users,o=data"}. "approver" may contain either string or array of strings
//AVAILABLE since ACD v.3.2!!! due to returning array of objects- result.push({key:userDN, value:userCN})
//ACD of older varsions have to return string only!
var input=extractDNfromJSON(input);
return input;
function extractDNfromJSON(nrfDescription) {
var result = [];
try {
//console.log("Description: "+ nrfDescription)
var approveJSON = JSON.parse(nrfDescription);
var approvers = [];
approvers.push(approveJSON.approver);
for (i in approvers) {
var regexCN=/cn=(.*?),/m;
if (typeof approvers[i] !== "string") {
for (j in approvers[i]) {
var cnMatch = regexCN.exec(approvers[i][j]);
var userCN = cnMatch[1];
result.push({key:approvers[i][j], value:userCN});
}
} else {
var cnMatch = regexCN.exec(approvers[i]);
var userCN = cnMatch[1];
result.push({key:approvers[i], value:userCN});
}
}
} catch (e) {
console.log("nrfDescription: "+ nrfDescription)
console.log(e);
}
return result;
}