Keresés egy igazi helyi LDAP-direktor
A LDAP(options, callback) a natív olvasó kliens. Az options.ldap adja a host és port értéket; a user a bind DN, a password a jelszava, a dn a keresési bázis, a type pedig a kért objektumosztály (person vagy group). A type:'profile' a login értékkel keresi az sAMAccountName attribútumot, és egy objektumot vagy null értéket ad vissza. A noauth:true kihagyja a bindot; nem ad jogosultságot a címtárban. Mindig add meg explicit módon a keresési bázist.
Az attributes a visszaadott attribútumnevekhez konverziós típusokat rendel (string, number, date, buffer, hex, base64 stb.); nem engedélyezési lista a lekérendő attribútumokról. A címtár skaláris értékeket vagy tömböket adhat vissza, ha egy attribútum ismétlődik. Korlátozd, hogy a HTTP API milyen adatokat tesz közzé.
Ehhez a futtatható fixture-höz helyi OpenLDAP eszközök kellenek: slapd, ldapadd és a core/cosine/inetorgperson sémafájlok. macOS-en az alábbi alapértékek a rendszereszközöket használják; más telepítések beállíthatják a FORGE_SLAPD, FORGE_LDAPADD és FORGE_LDAP_SCHEMA változókat. Külön, jogosultság nélküli loopback szervert futtat ideiglenes LDIF adatbázissal, majd leállítja. Soha nem használ meglévő címtárat. A teszt a keresést, a több attribútumértéket és az érvénytelen bind határát fedi le; nem igazolja az Active Directory, a TLS/StartTLS, a csoportok vagy az újracsatlakozás viselkedésének kompatibilitását. Soha ne küldj valódi hitelesítő adatokat védetlen hálózaton.
Válassza ki a kötődés hitelesítését. Ellenőrizze a kötés eredményét saját kódjában, és csak akkor kezelje a visszaküldött profilot hitelesítve, ha a kötött sikeres.
exports.install = function() {
ROUTE('POST /directory-fixture/ @json', directory);
};
function directory($) {
var port = Number($.body.port);
if (!Number.isInteger(port) || port < 1024 || port > 65535)
return $.invalid(400);
LDAP({
ldap: { host: '127.0.0.1', port: port },
user: 'cn=admin,dc=forge,dc=test',
password: $.body.wrong ? 'incorrect' : 'local-fixture-only',
dn: 'dc=forge,dc=test',
type: 'person',
attributes: { cn: 'string', mail: 'string' }
}, function(err, people) {
if (err)
$.json({ failed: true });
else
$.json({ people: people.map(person => ({ cn: person.cn, mail: person.mail })) });
});
}