Merge pull request #399 from jsumners/no-bunyan
Remove dependency on Bunyan
This commit is contained in:
commit
2120ba142c
|
@ -26,13 +26,25 @@ client is:
|
||||||
|---------------|-----------------------------------------------------------|
|
|---------------|-----------------------------------------------------------|
|
||||||
|url |A valid LDAP URL (proto/host/port only) |
|
|url |A valid LDAP URL (proto/host/port only) |
|
||||||
|socketPath |Socket path if using AF\_UNIX sockets |
|
|socketPath |Socket path if using AF\_UNIX sockets |
|
||||||
|log |Bunyan logger instance (Default: built-in instance) |
|
|log |A compatible logger instance (Default: no-op logger) |
|
||||||
|timeout |Milliseconds client should let operations live for before timing out (Default: Infinity)|
|
|timeout |Milliseconds client should let operations live for before timing out (Default: Infinity)|
|
||||||
|connectTimeout |Milliseconds client should wait before timing out on TCP connections (Default: OS default)|
|
|connectTimeout |Milliseconds client should wait before timing out on TCP connections (Default: OS default)|
|
||||||
|tlsOptions |Additional options passed to TLS connection layer when connecting via `ldaps://` (See: The TLS docs for node.js)|
|
|tlsOptions |Additional options passed to TLS connection layer when connecting via `ldaps://` (See: The TLS docs for node.js)|
|
||||||
|idleTimeout |Milliseconds after last activity before client emits idle event|
|
|idleTimeout |Milliseconds after last activity before client emits idle event|
|
||||||
|strictDN |Force strict DN parsing for client methods (Default is true)|
|
|strictDN |Force strict DN parsing for client methods (Default is true)|
|
||||||
|
|
||||||
|
### Note On Logger
|
||||||
|
|
||||||
|
A passed in logger is expected to conform to the [Bunyan](https://www.npmjs.com/package/bunyan)
|
||||||
|
API. Specifically, the logger is expected to have a `child()` method. If a logger
|
||||||
|
is supplied that does not have such a method, then a shim version is added
|
||||||
|
that merely returns the passed in logger.
|
||||||
|
|
||||||
|
Known compatible loggers are:
|
||||||
|
|
||||||
|
+ [Bunyan](https://www.npmjs.com/package/bunyan)
|
||||||
|
+ [Pino](https://www.npmjs.com/package/pino)
|
||||||
|
|
||||||
## Connection management
|
## Connection management
|
||||||
|
|
||||||
As LDAP is a stateful protocol (as opposed to HTTP), having connections torn
|
As LDAP is a stateful protocol (as opposed to HTTP), having connections torn
|
||||||
|
|
|
@ -16,10 +16,22 @@ The code to create a new server looks like:
|
||||||
|
|
||||||
The full list of options is:
|
The full list of options is:
|
||||||
|
|
||||||
||log||You can optionally pass in a bunyan instance the client will use to acquire a logger.||
|
||log||You can optionally pass in a Bunyan compatible logger instance the client will use to acquire a child logger.||
|
||||||
||certificate||A PEM-encoded X.509 certificate; will cause this server to run in TLS mode.||
|
||certificate||A PEM-encoded X.509 certificate; will cause this server to run in TLS mode.||
|
||||||
||key||A PEM-encoded private key that corresponds to _certificate_ for SSL.||
|
||key||A PEM-encoded private key that corresponds to _certificate_ for SSL.||
|
||||||
|
|
||||||
|
### Note On Logger
|
||||||
|
|
||||||
|
The passed in logger is expected to conform to the Log4j standard API.
|
||||||
|
Internally, [abstract-logging](https://www.npmjs.com/packages/abstract-logging) is
|
||||||
|
used to implement the interface. As a result, no log messages will be generated
|
||||||
|
unless an external logger is supplied.
|
||||||
|
|
||||||
|
Known compatible loggers are:
|
||||||
|
|
||||||
|
+ [Bunyan](https://www.npmjs.com/package/bunyan)
|
||||||
|
+ [Pino](https://www.npmjs.com/package/pino)
|
||||||
|
|
||||||
## Properties on the server object
|
## Properties on the server object
|
||||||
|
|
||||||
### maxConnections
|
### maxConnections
|
||||||
|
|
|
@ -1,21 +1,10 @@
|
||||||
// Copyright 2012 Mark Cavage, Inc. All rights reserved.
|
// Copyright 2012 Mark Cavage, Inc. All rights reserved.
|
||||||
|
|
||||||
var assert = require('assert');
|
var logger = Object.create(require('abstract-logging'));
|
||||||
|
|
||||||
var Logger = require('bunyan');
|
|
||||||
|
|
||||||
var Client = require('./client');
|
var Client = require('./client');
|
||||||
|
|
||||||
|
|
||||||
///--- Globals
|
|
||||||
|
|
||||||
var DEF_LOG = new Logger({
|
|
||||||
name: 'ldapjs',
|
|
||||||
component: 'client',
|
|
||||||
stream: process.stderr,
|
|
||||||
serializers: Logger.stdSerializers
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
///--- Functions
|
///--- Functions
|
||||||
|
|
||||||
|
@ -47,7 +36,9 @@ module.exports = {
|
||||||
if (!xor(options.url, options.socketPath))
|
if (!xor(options.url, options.socketPath))
|
||||||
throw new TypeError('options.url ^ options.socketPath (String) required');
|
throw new TypeError('options.url ^ options.socketPath (String) required');
|
||||||
if (!options.log)
|
if (!options.log)
|
||||||
options.log = DEF_LOG;
|
options.log = logger;
|
||||||
|
if (!options.log.child)
|
||||||
|
options.log.child = function () { return options.log; }
|
||||||
if (typeof (options.log) !== 'object')
|
if (typeof (options.log) !== 'object')
|
||||||
throw new TypeError('options.log must be an object');
|
throw new TypeError('options.log must be an object');
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
|
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
|
||||||
|
|
||||||
var Logger = require('bunyan');
|
var logger = Object.create(require('abstract-logging'));
|
||||||
|
|
||||||
var client = require('./client');
|
var client = require('./client');
|
||||||
var Attribute = require('./attribute');
|
var Attribute = require('./attribute');
|
||||||
|
@ -8,7 +8,6 @@ var Change = require('./change');
|
||||||
var Protocol = require('./protocol');
|
var Protocol = require('./protocol');
|
||||||
var Server = require('./server');
|
var Server = require('./server');
|
||||||
|
|
||||||
var assert = require('assert');
|
|
||||||
var controls = require('./controls');
|
var controls = require('./controls');
|
||||||
var persistentSearch = require('./persistent_search');
|
var persistentSearch = require('./persistent_search');
|
||||||
var dn = require('./dn');
|
var dn = require('./dn');
|
||||||
|
@ -33,11 +32,7 @@ module.exports = {
|
||||||
throw new TypeError('options (object) required');
|
throw new TypeError('options (object) required');
|
||||||
|
|
||||||
if (!options.log) {
|
if (!options.log) {
|
||||||
options.log = new Logger({
|
options.log = logger;
|
||||||
name: 'ldapjs',
|
|
||||||
component: 'client',
|
|
||||||
stream: process.stderr
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Server(options);
|
return new Server(options);
|
||||||
|
|
|
@ -29,12 +29,12 @@
|
||||||
"node": ">=0.10"
|
"node": ">=0.10"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"abstract-logging": "^1.0.0",
|
||||||
"asn1": "0.2.3",
|
"asn1": "0.2.3",
|
||||||
"assert-plus": "^1.0.0",
|
"assert-plus": "^1.0.0",
|
||||||
"bunyan": "^1.8.3",
|
|
||||||
"dashdash": "^1.14.0",
|
|
||||||
"backoff": "^2.5.0",
|
"backoff": "^2.5.0",
|
||||||
"ldap-filter": "^0.2.2",
|
"ldap-filter": "^0.2.2",
|
||||||
|
"dashdash": "^1.14.0",
|
||||||
"once": "^1.4.0",
|
"once": "^1.4.0",
|
||||||
"vasync": "^1.6.4",
|
"vasync": "^1.6.4",
|
||||||
"verror": "^1.8.1"
|
"verror": "^1.8.1"
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
"tape": "^4.6.2"
|
"tape": "^4.6.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"report": "./node_modules/.bin/istanbul report html && open ./coverage/lcov-report/index.html",
|
"report": "./node_modules/.bin/istanbul report html && open ./coverage/lcov-report/index.html",
|
||||||
"test": "./node_modules/.bin/istanbul cover --print none test/test.js | ./node_modules/.bin/faucet"
|
"test": "./node_modules/.bin/istanbul cover --print none test/test.js | ./node_modules/.bin/faucet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
|
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
|
||||||
|
|
||||||
var Logger = require('bunyan');
|
var logger = Object.create(require('abstract-logging'));
|
||||||
|
|
||||||
var test = require('tape').test;
|
var test = require('tape').test;
|
||||||
var uuid = require('node-uuid');
|
var uuid = require('node-uuid');
|
||||||
|
@ -16,14 +16,6 @@ var SOCKET = '/tmp/.' + uuid();
|
||||||
|
|
||||||
var SUFFIX = 'dc=test';
|
var SUFFIX = 'dc=test';
|
||||||
|
|
||||||
var LOG = new Logger({
|
|
||||||
name: 'ldapjs_unit_test',
|
|
||||||
stream: process.stderr,
|
|
||||||
level: (process.env.LOG_LEVEL || 'info'),
|
|
||||||
serializers: Logger.stdSerializers,
|
|
||||||
src: true
|
|
||||||
});
|
|
||||||
|
|
||||||
var ldap;
|
var ldap;
|
||||||
var Attribute;
|
var Attribute;
|
||||||
var Change;
|
var Change;
|
||||||
|
@ -288,7 +280,7 @@ test('setup', function (t) {
|
||||||
client = ldap.createClient({
|
client = ldap.createClient({
|
||||||
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
||||||
socketPath: SOCKET,
|
socketPath: SOCKET,
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
t.ok(client);
|
t.ok(client);
|
||||||
t.end();
|
t.end();
|
||||||
|
@ -338,7 +330,7 @@ test('auto-bind bad credentials', function (t) {
|
||||||
socketPath: SOCKET,
|
socketPath: SOCKET,
|
||||||
bindDN: BIND_DN,
|
bindDN: BIND_DN,
|
||||||
bindCredentials: 'totallybogus',
|
bindCredentials: 'totallybogus',
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
clt.once('error', function (err) {
|
clt.once('error', function (err) {
|
||||||
t.equal(err.code, ldap.LDAP_INVALID_CREDENTIALS);
|
t.equal(err.code, ldap.LDAP_INVALID_CREDENTIALS);
|
||||||
|
@ -353,7 +345,7 @@ test('auto-bind success', function (t) {
|
||||||
socketPath: SOCKET,
|
socketPath: SOCKET,
|
||||||
bindDN: BIND_DN,
|
bindDN: BIND_DN,
|
||||||
bindCredentials: BIND_PW,
|
bindCredentials: BIND_PW,
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
clt.once('connect', function () {
|
clt.once('connect', function () {
|
||||||
t.ok(clt);
|
t.ok(clt);
|
||||||
|
@ -978,7 +970,7 @@ test('setup action', function (t) {
|
||||||
var setupClient = ldap.createClient({
|
var setupClient = ldap.createClient({
|
||||||
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
||||||
socketPath: SOCKET,
|
socketPath: SOCKET,
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
setupClient.on('setup', function (clt, cb) {
|
setupClient.on('setup', function (clt, cb) {
|
||||||
clt.bind(BIND_DN, BIND_PW, function (err, res) {
|
clt.bind(BIND_DN, BIND_PW, function (err, res) {
|
||||||
|
@ -1002,7 +994,7 @@ test('setup reconnect', function (t) {
|
||||||
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
||||||
socketPath: SOCKET,
|
socketPath: SOCKET,
|
||||||
reconnect: true,
|
reconnect: true,
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
rClient.on('setup', function (clt, cb) {
|
rClient.on('setup', function (clt, cb) {
|
||||||
clt.bind(BIND_DN, BIND_PW, function (err, res) {
|
clt.bind(BIND_DN, BIND_PW, function (err, res) {
|
||||||
|
@ -1059,7 +1051,7 @@ test('setup abort', function (t) {
|
||||||
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
||||||
socketPath: SOCKET,
|
socketPath: SOCKET,
|
||||||
reconnect: true,
|
reconnect: true,
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
var message = 'It\'s a trap!';
|
var message = 'It\'s a trap!';
|
||||||
setupClient.on('setup', function (clt, cb) {
|
setupClient.on('setup', function (clt, cb) {
|
||||||
|
@ -1081,7 +1073,7 @@ test('abort reconnect', function (t) {
|
||||||
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
|
||||||
socketPath: '/dev/null',
|
socketPath: '/dev/null',
|
||||||
reconnect: true,
|
reconnect: true,
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
var retryCount = 0;
|
var retryCount = 0;
|
||||||
abortClient.on('connectError', function () {
|
abortClient.on('connectError', function () {
|
||||||
|
@ -1109,7 +1101,7 @@ test('reconnect max retries', function (t) {
|
||||||
initialDelay: 10,
|
initialDelay: 10,
|
||||||
maxDelay: 100
|
maxDelay: 100
|
||||||
},
|
},
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
var count = 0;
|
var count = 0;
|
||||||
rClient.on('connectError', function () {
|
rClient.on('connectError', function () {
|
||||||
|
@ -1127,7 +1119,7 @@ test('reconnect on server close', function (t) {
|
||||||
var clt = ldap.createClient({
|
var clt = ldap.createClient({
|
||||||
socketPath: SOCKET,
|
socketPath: SOCKET,
|
||||||
reconnect: true,
|
reconnect: true,
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
clt.on('setup', function (sclt, cb) {
|
clt.on('setup', function (sclt, cb) {
|
||||||
sclt.bind(BIND_DN, BIND_PW, function (err, res) {
|
sclt.bind(BIND_DN, BIND_PW, function (err, res) {
|
||||||
|
@ -1153,7 +1145,7 @@ test('no auto-reconnect on unbind', function (t) {
|
||||||
var clt = ldap.createClient({
|
var clt = ldap.createClient({
|
||||||
socketPath: SOCKET,
|
socketPath: SOCKET,
|
||||||
reconnect: true,
|
reconnect: true,
|
||||||
log: LOG
|
log: logger
|
||||||
});
|
});
|
||||||
clt.on('setup', function (sclt, cb) {
|
clt.on('setup', function (sclt, cb) {
|
||||||
sclt.bind(BIND_DN, BIND_PW, function (err, res) {
|
sclt.bind(BIND_DN, BIND_PW, function (err, res) {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
|
|
||||||
var asn1 = require('asn1');
|
var asn1 = require('asn1');
|
||||||
var Logger = require('bunyan');
|
var logger = Object.create(require('abstract-logging'));
|
||||||
var test = require('tape').test;
|
var test = require('tape').test;
|
||||||
|
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ test('parse', function (t) {
|
||||||
ber.writeString('cn=test', 0x4a);
|
ber.writeString('cn=test', 0x4a);
|
||||||
|
|
||||||
var req = new DeleteRequest({
|
var req = new DeleteRequest({
|
||||||
log: new Logger({name: 'del_request.test.js'})
|
log: logger
|
||||||
});
|
});
|
||||||
var reader = new BerReader(ber.buffer);
|
var reader = new BerReader(ber.buffer);
|
||||||
reader.readSequence(0x4a);
|
reader.readSequence(0x4a);
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
// Copyright 2014 Joyent, Inc. All rights reserved.
|
// Copyright 2014 Joyent, Inc. All rights reserved.
|
||||||
|
|
||||||
var test = require('tape').test;
|
var test = require('tape').test;
|
||||||
var bunyan = require('bunyan');
|
var logger = Object.create(require('abstract-logging'));
|
||||||
|
|
||||||
///--- Globals
|
///--- Globals
|
||||||
|
|
||||||
var lib;
|
var lib;
|
||||||
var Parser;
|
var Parser;
|
||||||
var LOG = bunyan.createLogger({name: 'ldapjs-test'});
|
|
||||||
|
|
||||||
///--- Tests
|
///--- Tests
|
||||||
test('load library', function (t) {
|
test('load library', function (t) {
|
||||||
|
@ -19,7 +18,7 @@ test('load library', function (t) {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('wrong protocol error', function (t) {
|
test('wrong protocol error', function (t) {
|
||||||
var p = new Parser({log: LOG});
|
var p = new Parser({log: logger});
|
||||||
|
|
||||||
p.once('error', function (err) {
|
p.once('error', function (err) {
|
||||||
t.ok(err);
|
t.ok(err);
|
||||||
|
@ -31,7 +30,7 @@ test('wrong protocol error', function (t) {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('bad protocol op', function (t) {
|
test('bad protocol op', function (t) {
|
||||||
var p = new Parser({log: LOG});
|
var p = new Parser({log: logger});
|
||||||
var message = new lib.LDAPMessage({
|
var message = new lib.LDAPMessage({
|
||||||
protocolOp: 254 // bogus (at least today)
|
protocolOp: 254 // bogus (at least today)
|
||||||
});
|
});
|
||||||
|
@ -44,7 +43,7 @@ test('bad protocol op', function (t) {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('bad message structure', function (t) {
|
test('bad message structure', function (t) {
|
||||||
var p = new Parser({log: LOG});
|
var p = new Parser({log: logger});
|
||||||
|
|
||||||
// message with bogus structure
|
// message with bogus structure
|
||||||
var message = new lib.LDAPMessage({
|
var message = new lib.LDAPMessage({
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
|
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
|
||||||
|
|
||||||
var Logger = require('bunyan');
|
var logger = Object.create(require('abstract-logging'));
|
||||||
|
|
||||||
var test = require('tape').test;
|
var test = require('tape').test;
|
||||||
var uuid = require('node-uuid');
|
var uuid = require('node-uuid');
|
||||||
|
|
Loading…
Reference in New Issue