Skip to content

Instantly share code, notes, and snippets.

@joepuzzo
Created June 7, 2022 13:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joepuzzo/5338d2f397de789acc782c3159511ead to your computer and use it in GitHub Desktop.
Save joepuzzo/5338d2f397de789acc782c3159511ead to your computer and use it in GitHub Desktop.
const ldap = require('ldapjs');
const LDAP_HOST = "ldap://ldap.foobar.com";
const LDAP_PASSWORD = "**********";
const LDAP_USER = "**********";
const createClient = async () => {
const client = ldap.createClient({
url: LDAP_HOST,
});
client.on('error', (err) => {
if (err) {
throw err;
}
});
return new Promise((resolve, reject)=>{
client.bind(
`CN=${LDAP_USER},OU=SA,OU=Company Users,DC=company,DC=com`,
LDAP_PASSWORD,
(err) => {
if (err) {
return reject(err);
} else {
resolve(client);
}
},
);
})
}
const get = (client, email) => {
return new Promise((resolve, reject) => {
// const employeeNumber = '';
const groupName = 'MY_GROUP';
const realName = "Joseph Puzzo";
const options = {
// filter: `(&(employeeNumber=${employeeNumber}))`,
// filter: `(&(mail=${email}))`,
// filter: `(=${groupName})`,
// filter: `(&(memberOf=cn=${groupName}))`,
// filter: `(&(objectCategory=group)(cn=${groupName}))`,
// filter: `(displayName=${groupName})`,
filter: `(name=${realName})`,
// filter: `(&(memberOf=CN=${groupName}))`,
// filter: `(&(objectCategory=person)(objectClass=user)(memberOf=CN=${groupName}))`,
scope: 'sub',
// attributes: ['memberOf', 'mailNickname'],
attributes: ['member', 'mail', 'name'],
};
client.search(
'OU=Employees,OU=Comapny Users,DC=company,DC=com',
options,
(err, resp) => {
resp.on('searchRequest', (searchRequest) => {
console.log('searchRequest: ', searchRequest.messageID);
});
resp.on('searchEntry', (entry) => {
return resolve(entry.object);
});
resp.on('searchReference', (referral) => {
console.log('referral: ' + referral.uris.join());
});
resp.on('error', (err) => {
console.log('Error:', err);
if (err) {
return reject(err);
}
});
resp.on('end', (result) => {
console.log('status: ' + result.status);
resolve(result.status)
});
},
);
});
}
const go = async () => {
console.log('STARTING...');
try {
const client = await createClient();
const joe = await get(client, 'jpuzzo@foobar.com');
const foo = await get(client, 'foo@foobar.com');
const bar = await get(client, 'bar@foobar.com');
console.log('\n--------------------');
console.log('RES', joe);
console.log('\n--------------------');
console.log('RES', foo);
console.log('\n--------------------');
console.log('RES', bar);
client.unbind((err) => {
if(err){
console.log('Error while unbinding', err);
}
});
} catch(e){
console.log('Unable to create client', e);
}
}
go();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment