const ldapjs = require('ldapjs'); const fs = require('fs'); const tlsOptions = { key: fs.readFileSync(__dirname + '/cert/key.pem'), certificate: fs.readFileSync(__dirname + '/cert/cert.pem'), }; function newServer(port, dn, provokeSearchError = false, ssl = false) { const server = ssl ? ldapjs.createServer(tlsOptions) : ldapjs.createServer(); server.bind('o=example', function (req, res, next) { if (req.dn.toString() !== dn || req.credentials !== 'secret') { return next(new ldapjs.InvalidCredentialsError()); } res.end(); return next(); }); server.search('o=example', function (req, res, next) { if (provokeSearchError) { res.end(ldapjs.LDAP_SIZE_LIMIT_EXCEEDED); return next(); } const obj = { dn: req.dn.toString(), attributes: { objectclass: ['organization', 'top'], o: 'example', }, }; const group = { dn: req.dn.toString(), attributes: { objectClass: ['groupOfUniqueNames', 'top'], uniqueMember: ['uid=testuser, o=example'], cn: 'powerusers', ou: 'powerusers', }, }; if (req.filter.matches(obj.attributes)) { res.send(obj); } if (req.filter.matches(group.attributes)) { res.send(group); } res.end(); }); return new Promise(resolve => server.listen(port, () => resolve(server))); } module.exports = newServer;