UNPKG

1.44 kBJavaScriptView Raw
1'use strict'
2const ldap = require('ldapjs')
3const ldapChanges = require('./changes')
4const utils = require('./utils')
5
6module.exports = function ({adminDn, adminPassword, username, upn, userdn, email}) {
7 return new Promise((resolve, reject) => {
8 // create client connection
9 const client = this.getClient()
10 // login to LDAP
11 client.bind(adminDn, adminPassword, async (err) => {
12 // console.log('ldap client bind')
13 if (err) {
14 console.log(err)
15 client.destroy()
16 return reject(err)
17 }
18 // set up changes to replace user password
19 const changes = [ldapChanges.enableUser()]
20 // figure out which filter to use to identify the user
21 let filter
22 if (username) {
23 filter = '(sAMAccountName=' + username + ')'
24 } else if (email) {
25 filter = '(mail=' + email + ')'
26 } else if (upn) {
27 filter = '(userPrincipalName=' + upn + ')'
28 } else if (userDn) {
29 filter = '(distinguishedName=' + userDn + ')'
30 }
31 // find user by filter
32 const opts = {
33 filter,
34 scope: 'sub',
35 attributes: ['objectGUID']
36 }
37
38 try {
39 const user = await utils.applyChanges.call(this, client, this.baseDn, opts, changes)
40 // console.log('Password reset for ' + user.dn)
41 client.destroy()
42 resolve(user)
43 } catch (e) {
44 client.destroy()
45 reject(e)
46 }
47 })
48 })
49}