napi-ldap
Version:
OpenLDAP bindings for node
180 lines (162 loc) • 3.75 kB
JavaScript
/*jshint globalstrict:true, node:true, trailing:true, mocha:true unused:true */
;
var LDAP = require("../");
var assert = require("assert");
var ldap;
// Does not need to support GSSAPI
var uri = process.env.TEST_SASL_URI || "ldap://localhost:1234";
describe("SASL PLAIN bind", function() {
connect(uri);
it.skip("Should bind with user", function(done) {
ldap.saslbind(
{
mechanism: "PLAIN",
user: "test_user",
password: "secret",
securityproperties: "none"
},
function(err) {
assert.ifError(err);
done();
}
);
});
search();
after(cleanup);
});
describe("LDAP SASL Proxy User", function() {
connect(uri);
it.skip("Should bind with proxy user", function(done) {
ldap.saslbind(
{
mechanism: "PLAIN",
user: "test_user",
password: "secret",
proxyuser: "u:test_admin",
securityproperties: "none"
},
function(err) {
assert.ifError(err);
done();
}
);
});
search();
after(cleanup);
});
describe("SASL Error Handling", function() {
connect(uri);
it("Should fail to bind invalid password", function(done) {
ldap.saslbind(
{
mechanism: "PLAIN",
user: "test_user",
password: "bad password",
securityproperties: "none"
},
function(err) {
assert.ifError(err ? null : true);
done();
}
);
});
it("Should fail to bind invalid proxy user", function(done) {
ldap.saslbind(
{
mechanism: "PLAIN",
user: "test_user",
password: "secret",
proxyuser: "no_user",
securityproperties: "none"
},
function(err) {
assert.ifError(err ? null : true);
done();
}
);
});
it("Should throw on invalid mechanism", function(done) {
try {
ldap.saslbind({ mechanism: "INVALID" }, function(err) {
assert(false);
});
} catch (err) {}
done();
});
it("Should throw on invalid parameter", function(done) {
try {
ldap.saslbind({ realm: 0 }, function(err) {
assert(false);
});
} catch (err) {}
done();
});
after(cleanup);
});
// Needs to be a server that supports SASL authentication with default
// credentials (e.g. GSSAPI)
var gssapi_uri = process.env.TEST_SASL_GSSAPI_URI;
if (gssapi_uri) {
describe("LDAP SASL GSSAPI", function() {
connect(gssapi_uri);
it("Should bind with default credentials", function(done) {
this.timeout(10000);
ldap.saslbind(function(err) {
assert.ifError(err);
done();
});
});
search();
after(cleanup);
});
}
function connect(uri) {
it("Should connect", function(done) {
ldap = new LDAP({ uri: uri }, function(err) {
assert.ifError(err);
done();
});
});
}
function search() {
var dc;
it("Should be able to get root info", function(done) {
ldap.search(
{
base: "",
scope: LDAP.BASE,
attrs: "namingContexts"
},
function(err, res) {
assert.ifError(err);
assert(res.length);
var ctx = res[0].namingContexts.filter(function(c) {
return c.indexOf("{") < 0; // Avoid AD config context
});
dc = ctx[0];
done();
}
);
});
it("Should be able to search", function(done) {
ldap.search(
{
filter: "(objectClass=*)",
base: dc,
scope: LDAP.ONELEVEL,
attrs: "cn"
},
function(err, res) {
assert.ifError(err);
assert(res.length);
done();
}
);
});
}
function cleanup() {
if (ldap) {
ldap.close();
ldap = undefined;
}
}