Căutați un director local LDAP
LDAP(options, callback) este clientul nativ de citire. options.ldap furnizează host și port; user este DN-ul de bind, password parola sa, dn baza de căutare, iar type clasa de obiect cerută (person sau group). type:'profile' folosește login pentru a căuta sAMAccountName și returnează un obiect sau null. noauth:true sare peste bind; nu acordă permisiuni în director. Specifică întotdeauna explicit o bază de căutare.
attributes mapează numele atributelor returnate la tipuri de conversie (string, number, date, buffer, hex, base64 etc.); nu este o listă permisă de atribute de preluat. Un director poate returna valori scalare sau array-uri când un atribut se repetă. Restrânge datele pe care le expune API-ul tău HTTP.
Acest fixture executabil necesită uneltele locale OpenLDAP: slapd, ldapadd și fișierele de schemă core/cosine/inetorgperson. Pe macOS valorile implicite de mai jos folosesc uneltele sistemului; alte instalări pot seta FORGE_SLAPD, FORGE_LDAPADD și FORGE_LDAP_SCHEMA. Rulează un server loopback separat, fără privilegii, cu o bază LDIF temporară, apoi îl oprește. Nu folosește niciodată un director existent. Testul acoperă căutarea, mai multe valori de atribut și o limită de bind invalid; nu certifică compatibilitatea cu Active Directory, TLS/StartTLS, grupurile sau comportamentul la reconectare. Nu trimite niciodată credențiale reale printr-o rețea neprotejată.
Defindeți autentificarea de la bandă. Verificați rezultatul bandei în codul dvs. și tratați un profil returnat ca autentic numai după ce bandă a reușit.
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 })) });
});
}