ldap-authentication 3.1.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/integration-test.yml +1 -1
- package/.vscode/launch.json +7 -0
- package/README.md +1 -1
- package/index.js +13 -54
- package/package.json +1 -1
- package/test/jasmine.js +1 -1
- /package/test/{test.js → test.spec.js} +0 -0
package/.vscode/launch.json
CHANGED
|
@@ -10,6 +10,13 @@
|
|
|
10
10
|
"name": "Debug Example",
|
|
11
11
|
"skipFiles": ["<node_internals>/**"],
|
|
12
12
|
"program": "${workspaceFolder}/example/index.js"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"type": "node",
|
|
16
|
+
"request": "launch",
|
|
17
|
+
"name": "Debug Test",
|
|
18
|
+
"skipFiles": ["<node_internals>/**"],
|
|
19
|
+
"program": "${workspaceFolder}/test/jasmine.js"
|
|
13
20
|
}
|
|
14
21
|
]
|
|
15
22
|
}
|
package/README.md
CHANGED
package/index.js
CHANGED
|
@@ -17,7 +17,7 @@ function _searchResultToUser(pojo) {
|
|
|
17
17
|
function _ldapBind(dn, password, starttls, ldapOpts) {
|
|
18
18
|
return new Promise(function (resolve, reject) {
|
|
19
19
|
ldapOpts.connectTimeout = ldapOpts.connectTimeout || 5000
|
|
20
|
-
|
|
20
|
+
let client = ldap.createClient(ldapOpts)
|
|
21
21
|
|
|
22
22
|
client.on('connect', function () {
|
|
23
23
|
if (starttls) {
|
|
@@ -29,7 +29,6 @@ function _ldapBind(dn, password, starttls, ldapOpts) {
|
|
|
29
29
|
client.bind(dn, password, function (err) {
|
|
30
30
|
if (err) {
|
|
31
31
|
reject(err)
|
|
32
|
-
client.unbind()
|
|
33
32
|
return
|
|
34
33
|
}
|
|
35
34
|
ldapOpts.log && ldapOpts.log.trace('bind success!')
|
|
@@ -40,7 +39,6 @@ function _ldapBind(dn, password, starttls, ldapOpts) {
|
|
|
40
39
|
client.bind(dn, password, function (err) {
|
|
41
40
|
if (err) {
|
|
42
41
|
reject(err)
|
|
43
|
-
client.unbind()
|
|
44
42
|
return
|
|
45
43
|
}
|
|
46
44
|
ldapOpts.log && ldapOpts.log.trace('bind success!')
|
|
@@ -78,7 +76,7 @@ async function _searchUser(
|
|
|
78
76
|
attributes = null
|
|
79
77
|
) {
|
|
80
78
|
return new Promise(function (resolve, reject) {
|
|
81
|
-
|
|
79
|
+
let filter = new ldap.filters.EqualityFilter({
|
|
82
80
|
attribute: usernameAttribute,
|
|
83
81
|
value: username,
|
|
84
82
|
})
|
|
@@ -91,10 +89,9 @@ async function _searchUser(
|
|
|
91
89
|
searchOptions.attributes = attributes
|
|
92
90
|
}
|
|
93
91
|
ldapClient.search(searchBase, searchOptions, function (err, res) {
|
|
94
|
-
|
|
92
|
+
let user = null
|
|
95
93
|
if (err) {
|
|
96
94
|
reject(err)
|
|
97
|
-
ldapClient.unbind()
|
|
98
95
|
return
|
|
99
96
|
}
|
|
100
97
|
res.on('searchEntry', function (entry) {
|
|
@@ -110,7 +107,6 @@ async function _searchUser(
|
|
|
110
107
|
})
|
|
111
108
|
res.on('error', function (err) {
|
|
112
109
|
reject(err)
|
|
113
|
-
ldapClient.unbind()
|
|
114
110
|
})
|
|
115
111
|
res.on('end', function (result) {
|
|
116
112
|
if (result.status != 0) {
|
|
@@ -118,7 +114,6 @@ async function _searchUser(
|
|
|
118
114
|
} else {
|
|
119
115
|
resolve(user)
|
|
120
116
|
}
|
|
121
|
-
ldapClient.unbind()
|
|
122
117
|
})
|
|
123
118
|
})
|
|
124
119
|
})
|
|
@@ -141,10 +136,9 @@ async function _searchUserGroups(
|
|
|
141
136
|
scope: 'sub',
|
|
142
137
|
},
|
|
143
138
|
function (err, res) {
|
|
144
|
-
|
|
139
|
+
let groups = []
|
|
145
140
|
if (err) {
|
|
146
141
|
reject(err)
|
|
147
|
-
ldapClient.unbind()
|
|
148
142
|
return
|
|
149
143
|
}
|
|
150
144
|
res.on('searchEntry', function (entry) {
|
|
@@ -153,7 +147,6 @@ async function _searchUserGroups(
|
|
|
153
147
|
res.on('searchReference', function (referral) {})
|
|
154
148
|
res.on('error', function (err) {
|
|
155
149
|
reject(err)
|
|
156
|
-
ldapClient.unbind()
|
|
157
150
|
})
|
|
158
151
|
res.on('end', function (result) {
|
|
159
152
|
if (result.status != 0) {
|
|
@@ -161,7 +154,6 @@ async function _searchUserGroups(
|
|
|
161
154
|
} else {
|
|
162
155
|
resolve(groups)
|
|
163
156
|
}
|
|
164
|
-
ldapClient.unbind()
|
|
165
157
|
})
|
|
166
158
|
}
|
|
167
159
|
)
|
|
@@ -183,7 +175,7 @@ async function authenticateWithAdmin(
|
|
|
183
175
|
groupMemberUserAttribute = 'dn',
|
|
184
176
|
attributes = null
|
|
185
177
|
) {
|
|
186
|
-
|
|
178
|
+
let ldapAdminClient
|
|
187
179
|
try {
|
|
188
180
|
ldapAdminClient = await _ldapBind(
|
|
189
181
|
adminDn,
|
|
@@ -194,14 +186,13 @@ async function authenticateWithAdmin(
|
|
|
194
186
|
} catch (error) {
|
|
195
187
|
throw { admin: error }
|
|
196
188
|
}
|
|
197
|
-
|
|
189
|
+
let user = await _searchUser(
|
|
198
190
|
ldapAdminClient,
|
|
199
191
|
userSearchBase,
|
|
200
192
|
usernameAttribute,
|
|
201
193
|
username,
|
|
202
194
|
attributes
|
|
203
195
|
)
|
|
204
|
-
ldapAdminClient.unbind()
|
|
205
196
|
if (!user || !user.dn) {
|
|
206
197
|
ldapOpts.log &&
|
|
207
198
|
ldapOpts.log.trace(
|
|
@@ -211,26 +202,15 @@ async function authenticateWithAdmin(
|
|
|
211
202
|
'user not found or usernameAttribute is wrong'
|
|
212
203
|
)
|
|
213
204
|
}
|
|
214
|
-
|
|
205
|
+
let userDn = user.dn
|
|
215
206
|
let ldapUserClient
|
|
216
207
|
try {
|
|
217
208
|
ldapUserClient = await _ldapBind(userDn, userPassword, starttls, ldapOpts)
|
|
218
209
|
} catch (error) {
|
|
219
210
|
throw error
|
|
220
211
|
}
|
|
221
|
-
ldapUserClient.unbind()
|
|
222
212
|
if (groupsSearchBase && groupClass && groupMemberAttribute) {
|
|
223
|
-
|
|
224
|
-
ldapAdminClient = await _ldapBind(
|
|
225
|
-
adminDn,
|
|
226
|
-
adminPassword,
|
|
227
|
-
starttls,
|
|
228
|
-
ldapOpts
|
|
229
|
-
)
|
|
230
|
-
} catch (error) {
|
|
231
|
-
throw error
|
|
232
|
-
}
|
|
233
|
-
var groups = await _searchUserGroups(
|
|
213
|
+
let groups = await _searchUserGroups(
|
|
234
214
|
ldapAdminClient,
|
|
235
215
|
groupsSearchBase,
|
|
236
216
|
user,
|
|
@@ -239,7 +219,6 @@ async function authenticateWithAdmin(
|
|
|
239
219
|
groupMemberUserAttribute
|
|
240
220
|
)
|
|
241
221
|
user.groups = groups
|
|
242
|
-
ldapAdminClient.unbind()
|
|
243
222
|
}
|
|
244
223
|
return user
|
|
245
224
|
}
|
|
@@ -266,10 +245,9 @@ async function authenticateWithUser(
|
|
|
266
245
|
}
|
|
267
246
|
if (!usernameAttribute || !userSearchBase) {
|
|
268
247
|
// if usernameAttribute is not provided, no user detail is needed.
|
|
269
|
-
ldapUserClient.unbind()
|
|
270
248
|
return true
|
|
271
249
|
}
|
|
272
|
-
|
|
250
|
+
let user = await _searchUser(
|
|
273
251
|
ldapUserClient,
|
|
274
252
|
userSearchBase,
|
|
275
253
|
usernameAttribute,
|
|
@@ -285,14 +263,8 @@ async function authenticateWithUser(
|
|
|
285
263
|
'user logged in, but user details could not be found. Probabaly usernameAttribute or userSearchBase is wrong?'
|
|
286
264
|
)
|
|
287
265
|
}
|
|
288
|
-
ldapUserClient.unbind()
|
|
289
266
|
if (groupsSearchBase && groupClass && groupMemberAttribute) {
|
|
290
|
-
|
|
291
|
-
ldapUserClient = await _ldapBind(userDn, userPassword, starttls, ldapOpts)
|
|
292
|
-
} catch (error) {
|
|
293
|
-
throw error
|
|
294
|
-
}
|
|
295
|
-
var groups = await _searchUserGroups(
|
|
267
|
+
let groups = await _searchUserGroups(
|
|
296
268
|
ldapUserClient,
|
|
297
269
|
groupsSearchBase,
|
|
298
270
|
user,
|
|
@@ -301,7 +273,6 @@ async function authenticateWithUser(
|
|
|
301
273
|
groupMemberUserAttribute
|
|
302
274
|
)
|
|
303
275
|
user.groups = groups
|
|
304
|
-
ldapUserClient.unbind()
|
|
305
276
|
}
|
|
306
277
|
return user
|
|
307
278
|
}
|
|
@@ -320,7 +291,7 @@ async function verifyUserExists(
|
|
|
320
291
|
groupMemberUserAttribute = 'dn',
|
|
321
292
|
attributes = null
|
|
322
293
|
) {
|
|
323
|
-
|
|
294
|
+
let ldapAdminClient
|
|
324
295
|
try {
|
|
325
296
|
ldapAdminClient = await _ldapBind(
|
|
326
297
|
adminDn,
|
|
@@ -331,14 +302,13 @@ async function verifyUserExists(
|
|
|
331
302
|
} catch (error) {
|
|
332
303
|
throw { admin: error }
|
|
333
304
|
}
|
|
334
|
-
|
|
305
|
+
let user = await _searchUser(
|
|
335
306
|
ldapAdminClient,
|
|
336
307
|
userSearchBase,
|
|
337
308
|
usernameAttribute,
|
|
338
309
|
username,
|
|
339
310
|
attributes
|
|
340
311
|
)
|
|
341
|
-
ldapAdminClient.unbind()
|
|
342
312
|
if (!user || !user.dn) {
|
|
343
313
|
ldapOpts.log &&
|
|
344
314
|
ldapOpts.log.trace(
|
|
@@ -349,17 +319,7 @@ async function verifyUserExists(
|
|
|
349
319
|
)
|
|
350
320
|
}
|
|
351
321
|
if (groupsSearchBase && groupClass && groupMemberAttribute) {
|
|
352
|
-
|
|
353
|
-
ldapAdminClient = await _ldapBind(
|
|
354
|
-
adminDn,
|
|
355
|
-
adminPassword,
|
|
356
|
-
starttls,
|
|
357
|
-
ldapOpts
|
|
358
|
-
)
|
|
359
|
-
} catch (error) {
|
|
360
|
-
throw error
|
|
361
|
-
}
|
|
362
|
-
var groups = await _searchUserGroups(
|
|
322
|
+
let groups = await _searchUserGroups(
|
|
363
323
|
ldapAdminClient,
|
|
364
324
|
groupsSearchBase,
|
|
365
325
|
user,
|
|
@@ -368,7 +328,6 @@ async function verifyUserExists(
|
|
|
368
328
|
groupMemberUserAttribute
|
|
369
329
|
)
|
|
370
330
|
user.groups = groups
|
|
371
|
-
ldapAdminClient.unbind()
|
|
372
331
|
}
|
|
373
332
|
return user
|
|
374
333
|
}
|
package/package.json
CHANGED
package/test/jasmine.js
CHANGED
|
File without changes
|