| 43 | } |
| 44 | |
| 45 | function tryFind(client) { |
| 46 | var resolver = Promise.defer() |
| 47 | var query = { |
| 48 | scope: options.search.scope |
| 49 | , filter: new ldap.AndFilter({ |
| 50 | filters: [ |
| 51 | new ldap.EqualityFilter({ |
| 52 | attribute: 'objectClass' |
| 53 | , value: options.search.objectClass |
| 54 | }) |
| 55 | , new ldap.EqualityFilter({ |
| 56 | attribute: options.search.field |
| 57 | , value: username |
| 58 | }) |
| 59 | ] |
| 60 | }) |
| 61 | } |
| 62 | |
| 63 | if (options.search.filter) { |
| 64 | var parsedFilter = ldap.parseFilter(options.search.filter) |
| 65 | query.filter.filters.push(parsedFilter) |
| 66 | } |
| 67 | |
| 68 | client.search(options.search.dn, query, function(err, search) { |
| 69 | if (err) { |
| 70 | return resolver.reject(err) |
| 71 | } |
| 72 | |
| 73 | function entryListener(entry) { |
| 74 | resolver.resolve(entry) |
| 75 | } |
| 76 | |
| 77 | function endListener() { |
| 78 | resolver.reject(new InvalidCredentialsError(username)) |
| 79 | } |
| 80 | |
| 81 | function errorListener(err) { |
| 82 | resolver.reject(err) |
| 83 | } |
| 84 | |
| 85 | search.on('searchEntry', entryListener) |
| 86 | search.on('end', endListener) |
| 87 | search.on('error', errorListener) |
| 88 | |
| 89 | resolver.promise.finally(function() { |
| 90 | search.removeListener('searchEntry', entryListener) |
| 91 | search.removeListener('end', endListener) |
| 92 | search.removeListener('error', errorListener) |
| 93 | }) |
| 94 | }) |
| 95 | |
| 96 | return resolver.promise |
| 97 | } |
| 98 | |
| 99 | function tryBind(client, entry) { |
| 100 | return new Promise(function(resolve, reject) { |