1.4.1 • Published 9 years ago
ldapcrud v1.4.1
LDAPCRUD
A lightweight wrapper for ldapjs for CRUD actions and some more.
Install it via npm
npm install ldapcrudSetup
First of all, install and require ldapcrud module in your script and create new instance of LDAPCRUD class with your config;
const LDAPCRUD = require('ldapcrud');
let config = {
clientOptions: {
url: 'ldaps://your-ldap-url',
tlsOptions: {
rejectUnauthorized: false
}
},
baseDN: 'OU=Customers,DC=Company,DC=local',
userDN: 'CN=serviceadmin,OU=Customers,DC=Company,DC=local',
password: 'secret',
attributes: [
'sAMAccountName',
'mail',
'sn',
'givenName'
],
defaultFilter: '(mail=*@*)',
suffix: '@Company.local',
model: {
'sAMAccountName': 'ldap',
'mail': 'email',
'sn': 'name.last',
'givenName': 'name.first'
}
};
let ldap = new LDAPCRUD(config);Config
clientOptionsobject - options for ldapjs client creation. See morebaseDNstring - DN where search users.userDNstring - Admin User DN, that can performs operations against the LDAP server.passwordstring - Admin User password.attributesArray - Array of properties to selectdefaultFilterstring - LDAP Filter stringsuffixstring - User model suffixmodelobject - relation LDAP properties to your custom User model, where keys are LDAP properties and values are yours User model fields.
convertModel(data, toLdapModel)
Convert LDAP User model to yours format or vice versa.
model param of config is required. Also you can use flatten module, if
you have nested user object
Example:
let user = flatten({
name: {
first: 'John',
last: 'Doe'
},
email: 'johndoe@mail.com'
});
let ldapModel = ldap.convertModel(user, true);
// ldapModel === {
// sn: 'Doe',
// givenName: 'John',
// mail: 'johndoe@mail.com'
// }Params:
- object data (JS object)
- boolean toLdapModel (if true convert Node model to LDAP, else LDAP to Node)
Return:
- object result model
createClient(dn, password, callback)
Create LDAP client
Example:
ldap.createClient((err, client) => {
// Handle error and do something
});Params:
- string dn (custom User DN for bind)
- string password (custom password for bind)
- function callback (callback(err, client))
authenticate(dn, password, callback)
LDAP Authentication
Example:
let dn = '(sAMAccountName=username)';
let pwd = 'secret';
ldap.authenticate(dn, pwd, (err, auth) => {
if (err) return console.error(err);
console.log('Authorize:', (auth) ? 'success' : 'failed');
});Params:
- string dn (User DN for bind)
- string password (bind password)
- function callback (callback(err, auth))
Return:
- interrupt executing on error
create(entry, callback)
Create entry in LDAP by provided entry properties.
displayName,cn,nameproperties generetes fromsnandgivenName.dn / distinguishedNamegeneretes bycn, provideddnproperty andbaseDNproperty of configuserPrincipalNameconcatenates from providedsAMAccountNameproperty andsuffixproperty of config
Example:
let entry = {
sn: 'User',
givenName: 'Test',
sAMAccountName: 'testUser',
mail: 'testUser@mail.com',
};
ldap.create(entry, (err) => {
// Handle error and do something
});Params:
- object entry (user data)
- function callback (callback)
Return:
- execute callback with error
read(options, callback)
Read entries in LDAP.
findUsers is alias for read
Example:
ldap.read({
filter: '(sAMAccountName=username)'
}, (err, users) => {
// Handle error and do something
});Params:
- object options (search options)
- function callback (callback)
update(filter, changedAttrs, callback)
Update user
Example:
Change password in Active Directory
function encodePassword(password) {
return new Buffer('"' + password + '"', 'utf16le').toString();
}
let pwd = 'secret';
let attrs = [
{
type: 'replace',
attr: 'unicodePwd',
value: encodePassword(pwd)
},
{
type: 'replace',
attr: 'userAccountControl',
value: '66048'
}
];
ldap.update('(sAMAccountName=username)', attrs, (err) => {
// Handle error and do something
});Params:
- string filter (LDAP search filter)
- Array changedAttrs (array of objects attributes to change)
- function callback (callback(err))
Return:
- execute callback with error
delete(filter, callback)
Delete user
Example:
ldap.delete('(sAMAccountName=username)', (err) => {
// Handle error and do something
});Params:
- string filter (LDAP search filter)
- function callback (callback(err))
Return:
- execute callback with error
move(filter, newDN, callback)
Move user to other DN. Work in progress! Not tested!
Params:
- string filter (LDAP search filter)
- string newDN (new DN for user without cn)
- function callback (callback(err))
Return:
- execute callback with error