ad-promise
Version:
This is a fork of the gheeres node-activedirectory. It fixes some issues with timeouts with very large AD-Groups as well as returning also promises so you won't have to use callbacks
51 lines (43 loc) • 1.83 kB
JavaScript
const parseDistinguishedName = require('./service.parseDistinguishedName');
const isDistinguishedName = require('./service.isDistinguishedName');
const log = require('./service.log');
/**
* Gets the ActiveDirectory LDAP query string for a user search.
*
* @private
* @param {String|String[]} username The samAccountName(s) or userPrincipalName(s) (email) of the user.
* @returns {String}
*/
function getUserQueryFilter(username) {
log.trace('getUserQueryFilter(%s)', username);
var self = this;
let filter;
// if username is acually an array of multiple usernames create an or query
if (!username) return ('(objectCategory=User)');
if(typeof(username) === 'object' && username.length){
filter = '(|';
for(ind in username){
filter += getSingleQueryFilter(username[ind], self);
}
filter += ')';
// If a filter has already been defined
} else if (typeof(username) === 'object' && username.filter){
if(username.filter.indexOf('objectCategory=User') === -1){
filter = '(&(objectCategory=User)' + username.filter + ')'
} else {
filter = username.filter;
}
} else {
// if its a single username
filter = getSingleQueryFilter(username, self);
}
return filter;
}
function getSingleQueryFilter(username, adObject){
if (isDistinguishedName.call(adObject, username)) {
return ('(&(objectCategory=User)(distinguishedName=' + parseDistinguishedName(username) + '))');
} else {
return ('(&(objectCategory=User)(|(sAMAccountName=' + username + ')(userPrincipalName=' + username + ')))');
}
}
module.exports = getUserQueryFilter;