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
56 lines (51 loc) • 2.15 kB
JavaScript
const _ = require('underscore');
let log = require('./internal/service.log');
/**
* Checks to see if the specified user is a member of the specified group.
*
* @param {Object} [opts] Optional LDAP query string parameters to execute. { scope: '', filter: '', attributes: [ '', '', ... ], sizeLimit: 0, timelimit: 0 }
* @param {String} username The username to check for membership.
* @param {String} groupName The group to check for membership.
* @param {Function} callback The callback to execute when completed. callback(err: {Object}, result: {Boolean})
*/
function isUserMemberOf(opts, username, groupName, callback) {
var self = this;
return new Promise((resolve, reject) => {
if (typeof (groupName) === 'function' || !groupName) {
callback = groupName;
groupName = username;
username = opts;
opts = undefined;
}
log.trace('isUserMemberOf(%j,%s,%s)', opts, username, groupName);
opts = _.defaults(_.omit(opts || {}, 'attributes'), {
attributes: ['cn', 'dn']
});
let usersOfGroup = self.getUsersForGroup(opts, groupName);
let user = self.findUser(opts, username);
Promise.all([usersOfGroup, user]).then(data => {
let usersOfGroup = data[0];
let user = data[1];
if(usersOfGroup.map(userOfGroup => {
return userOfGroup.dn;
}).indexOf(user.dn) !== -1){
if(callback){
callback(null, true);
}
return resolve(true);
} else {
log.info('"%s" IS NOT a member of "%s". No groups found for user.', username, groupName);
if(callback){
callback(null, false);
}
return resolve(false);
}
}, err => {
if(callback){
callback(err);
}
return reject(err);
});
});
};
module.exports = isUserMemberOf;