UNPKG

1.73 kBJavaScriptView Raw
1'use strict'
2const utils = require('./utils')
3
4module.exports = function ({ adminDn, adminPassword, userDn, upn, username, email, attributes }) {
5 return new Promise((resolve, reject) => {
6 // validate input
7 if (
8 (!adminDn || adminDn === '') &&
9 (!adminPassword || adminPassword === '') &&
10 (!attributes || attributes === '')
11 ) {
12 // inform user the error of their ways
13 reject('adminDn, adminPassword, and attributes are required')
14 }
15 if (
16 (!userDn || userDn === '') &&
17 (!upn || upn === '') &&
18 (!username || username === '') &&
19 (!email || email === '')
20 ) {
21 // inform the user of the error of their ways
22 return reject('userDn, upn, username, or email is required')
23 }
24 const client = this.getClient()
25 // login to LDAP
26 client.bind(adminDn, adminPassword, async (err) => {
27 // console.log('ldap client bind')
28 if (err) {
29 console.log(err)
30 client.destroy(err)
31 reject(err)
32 }
33 // figure out which filter to use to identify the user
34 let filter
35 if (username) {
36 filter = '(sAMAccountName=' + username + ')'
37 } else if (email) {
38 filter = '(mail=' + email + ')'
39 } else if (upn) {
40 filter = '(userPrincipalName=' + upn + ')'
41 } else if (userDn) {
42 filter = '(distinguishedName=' + userDn + ')'
43 }
44 // find user by filter
45 const opts = {
46 filter,
47 scope: 'sub',
48 attributes
49 }
50
51 try {
52 const user = await utils.getUser.call(this, client, this.baseDn, opts)
53 client.destroy()
54 resolve(user)
55 } catch (e) {
56 client.destroy()
57 reject(e)
58 }
59 })
60 })
61}