ad-promise
Advanced tools
Comparing version 1.5.2 to 1.5.3
@@ -104,7 +104,2 @@ const events = require('events'); | ||
// Enable connection pooling | ||
// TODO: To be disabled / removed in future release of ldapjs > 0.7.1 | ||
if (typeof (this.opts.maxConnections) === 'undefined') { | ||
this.opts.maxConnections = 20; | ||
} | ||
events.EventEmitter.call(this); | ||
@@ -111,0 +106,0 @@ } |
module.exports = { | ||
reconnect : true | ||
reconnect : true, | ||
maxConnections : 20, | ||
maxIdleTime : 120000, | ||
checkInterval : 30000 | ||
} |
module.exports = { | ||
chunks : null, | ||
maxSearchesAtOnce: 2000, | ||
chunksItems : null, | ||
maxSearchesAtOnce: 6000, | ||
members : null, | ||
searchTimeoutAndReject : { | ||
@@ -9,3 +10,3 @@ // Timeout : { | ||
// retryAttempts: 1, | ||
// timeoutMillis: 2000 | ||
// timeoutMillis: 30000 | ||
// }, | ||
@@ -12,0 +13,0 @@ Reject : { |
@@ -44,3 +44,3 @@ | ||
}) | ||
}, [members], null, "members", { | ||
}, [members], maxPromiseConfig.chunksItems, "members", { | ||
Reject : { | ||
@@ -47,0 +47,0 @@ rejectBehaviour : "retry", |
@@ -11,15 +11,14 @@ const pendingRangeRetrievals = require('./service.search.pendingRangeRetrievals'); | ||
* @param {Array} results The search results | ||
* @param {Function} callback The Callback of the search | ||
* @param {Function} resolve resolve the search | ||
* @param {Function} reject reject the search | ||
*/ | ||
function onSearchEnd(client, baseDN, opts, results, callback, resolve, reject) { | ||
function onSearchEnd(client, baseDN, opts, results, resolve, reject) { | ||
if ((!pendingRangeRetrievals.get()) && (pendingReferrals.get().length <= 0)) { | ||
client.unbind(); | ||
log.info('Active directory search (%s) for "%s" returned %d entries.', | ||
baseDN, truncateLogOutput(opts.filter), | ||
(results || []).length); | ||
if (callback) callback(null, results); | ||
if (resolve) resolve(results); | ||
return; | ||
if(client.connected){ | ||
client.unbind( () => { | ||
return resolve(results); | ||
}); | ||
} else { | ||
return resolve(results); | ||
} | ||
} | ||
@@ -26,0 +25,0 @@ } |
@@ -8,10 +8,15 @@ const log = require('../service.log'); | ||
* @param {String} baseDN | ||
* @param {Object} opts Options | ||
* @param {Function} resolve Resolve the search request | ||
* @param {Function} reject reject the search request | ||
* @param {Object} res The optional server response. | ||
* | ||
* @returns {void} | ||
*/ | ||
function onClientError(err, client, searchStarted, baseDN, opts, callback, resolve, reject, SentBy) { | ||
let ignoreError = false; | ||
function onClientError(err, client, searchStarted, baseDN, opts, results, resolve, reject) { | ||
// let ignoreError = false; | ||
if ((err || {}).name === 'SizeLimitExceededError') { | ||
onSearchEnd(resolve, reject); | ||
onSearchEnd(client, baseDN, opts, results, resolve, reject); | ||
return; | ||
@@ -25,19 +30,17 @@ } | ||
if((err || {}).errno ==='ECONNRESET'){ | ||
ignoreError = true; | ||
// ignoreError = true; | ||
} | ||
client.unbind(); | ||
log.error(err, '[%s] An error occurred performing the requested LDAP search on %s (%j)', | ||
(err || {}).errno || 'UNKNOWN', baseDN, opts); | ||
if(ignoreError){ | ||
if (callback){ | ||
callback(err); | ||
} | ||
if(reject){ | ||
reject(err); | ||
} | ||
} | ||
return; | ||
if(client.connected) { | ||
client.unbind(() => { | ||
// log.error(err, '[%s] An error occurred performing the requested LDAP search on %s (%j)', | ||
// (err || {}).errno || 'UNKNOWN', baseDN, opts); | ||
return reject(err); | ||
}); | ||
} else { | ||
return reject(err); | ||
} | ||
} | ||
module.exports = onClientError; |
@@ -18,3 +18,3 @@ const limitpromises = require('limitpromises'); | ||
*/ | ||
function onReferralChase(self, ref, opts, controls, results, resolve, reject) { | ||
function onReferralChase(self, client, baseDN, ref, opts, controls, results, resolve, reject) { | ||
var index = 0; | ||
@@ -55,6 +55,6 @@ var referralUrl; | ||
res.on('searchEntry', entry => { | ||
onSearchEntry(entry, self, opts, isDone, results, resolve, reject); | ||
onSearchEntry(entry, client, baseDN, self, opts, isDone, results, resolve, reject); | ||
}); | ||
res.on('searchReference', ref => { | ||
onReferralChase(self, ref, opts, controls, results, resolve, reject); | ||
onReferralChase(self, client, baseDN, ref, opts, controls, results, resolve, reject); | ||
}); | ||
@@ -61,0 +61,0 @@ res.on('error', onReferralError); |
const parseRangeAttributes = require('../service.parseRangeAttributes'); | ||
const pendingRangeRetrievals = require('./service.search.pendingRangeRetrievals'); | ||
const log = require('../service.log'); | ||
const onSearchEnd = require('./service.onSearchEnd'); | ||
@@ -13,3 +14,3 @@ /** | ||
*/ | ||
function onSearchEntry(entry, self, opts, isDone, results, resolve, reject) { | ||
function onSearchEntry(entry, client, baseDN, self, opts, isDone, results, resolve, reject) { | ||
/** | ||
@@ -38,3 +39,3 @@ * The default entry parser to use. Does not modifications. | ||
if ((!pendingRangeRetrievals.get()) && (isDone)) { | ||
onSearchEnd(client, baseDN, opts, results, isDone, callback, resolve, reject); | ||
onSearchEnd(client, baseDN, opts, results, resolve, reject); | ||
} | ||
@@ -41,0 +42,0 @@ }); |
@@ -9,3 +9,3 @@ const pendingReferrals = require('./service.search.pendingReferrals'); | ||
function removeReferral(client) { | ||
if (!client) return; | ||
if (!client || !client.connected) return; | ||
@@ -12,0 +12,0 @@ client.unbind(); |
@@ -18,3 +18,3 @@ const _ = require('underscore'); | ||
'queueDisable', 'bindDN', 'bindCredentials', | ||
'maxConnections', 'reconnect' | ||
'maxConnections', 'reconnect', 'checkInterval', 'maxIdleTime' | ||
)); | ||
@@ -21,0 +21,0 @@ |
@@ -46,7 +46,4 @@ | ||
var client = createClient.call(self, null, opts); | ||
client.on('error', err => { | ||
onClientError(err, client, searchStarted, baseDN, opts, null, null, "Client") | ||
}); | ||
var controls = opts.controls || (opts.controls = []); | ||
@@ -74,7 +71,11 @@ // Add paging results control by default if not already added. | ||
// We want to limit the total of the searches, we will use [true] as InputValues as we don't use it anyways in the function | ||
limitpromises(Input => { | ||
let s = limitpromises(Input => { | ||
return new Promise((resolve, reject) => { | ||
var client = createClient.call(self, null, opts); | ||
client.on('error', err => { | ||
onClientError(err, client, searchStarted, baseDN, opts, results, resolve, reject) | ||
}); | ||
client.search(baseDN, getLdapOpts(opts), controls, function onSearch(err, res) { | ||
if (err) { | ||
if (callback) callback(err); | ||
reject(err); | ||
@@ -84,13 +85,13 @@ } | ||
res.on('searchEntry', entry => { | ||
onSearchEntry(entry, self, opts, isDone, results, resolve, reject); | ||
onSearchEntry(entry, client, baseDN, self, opts, isDone, results, resolve, reject); | ||
}); | ||
res.on('searchReference', ref => { | ||
onReferralChase(self, ref, opts, controls, results, resolve, reject); | ||
onReferralChase(self, client, ref, opts, controls, results, resolve, reject); | ||
}); | ||
res.on('error', function (err) { | ||
onClientError(err, client, searchStarted, baseDN, opts, callback, resolve, reject, "Search"); | ||
onClientError(err, client, searchStarted, baseDN, opts, results, resolve, reject); | ||
}); | ||
res.on('end', function (result) { | ||
isDone = true; // Flag that the primary query is complete | ||
onSearchEnd(client, baseDN, opts, results, callback, resolve, reject); | ||
onSearchEnd(client, baseDN, opts, results, resolve, reject); | ||
}); | ||
@@ -101,4 +102,13 @@ | ||
}, [true], self.opts.maxSearchesAtOnce || maxPromiseConfig.maxSearchesAtOnce, "searches", maxPromiseConfig.searchTimeoutAndReject); | ||
Promise.all(s.map(r => {return r.result})).then(results => { | ||
for(index in results){ | ||
callback(null, results[index]); | ||
} | ||
}, err => { | ||
callback(err); | ||
}); | ||
} | ||
module.exports = search; |
@@ -45,3 +45,3 @@ var _ = require('underscore'); | ||
}); | ||
}, [groupName], null, "members", { | ||
}, [groupName], maxPromiseConfig.members, "members", { | ||
Reject: { | ||
@@ -48,0 +48,0 @@ rejectBehaviour: "retry", |
{ | ||
"author": "Relief Melone (relief.melone@gmail.com)", | ||
"name": "ad-promise", | ||
"version": "1.5.2", | ||
"version": "1.5.3", | ||
"description": "This is a fork of the gheeres node-activedirectory. It fixes some issues with timeouts with very large AD-Groups as well as returning also promises so you won't have to use callbacks", | ||
@@ -25,3 +25,3 @@ "main": "index.js", | ||
"underscore": ">= 1.4.3", | ||
"limitpromises": ">=1.5.2" | ||
"limitpromises": ">=1.5.3" | ||
}, | ||
@@ -28,0 +28,0 @@ "repository": { |
221268
4304
Updatedlimitpromises@>=1.5.3