# Căutați un director local LDAP

> Întreabă o instanță izolată OpenLDAP și verifică rezultatul de legătură în total5 0,019.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: ro
Content-SHA256: cdba0c612a69bd0299746a8bf45cac34dcccb76084e912c71721c749f8e7fbde
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`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.

```js controllers/directory.js
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 })) });
	});
}
```
