# Vyhledejte místní adresář LDAP

> Vyhledejte izolovanou příklad OpenLDAP a ověřte výsledek spojení v celkovém počtu 5 0.0.19.

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

`LDAP(options, callback)` je nativní čtecí klient. `options.ldap` poskytuje `host` a `port`; `user` je DN bindu, `password` jeho heslo, `dn` základ vyhledávání a `type` požadovaná třída objektu (`person` nebo `group`). `type:'profile'` používá `login` k vyhledání `sAMAccountName` a vrací jeden objekt nebo `null`. `noauth:true` přeskočí bind; neuděluje oprávnění v adresáři. Základ vyhledávání vždy zadejte explicitně.

`attributes` mapuje názvy vrácených atributů na typy konverze (`string`, `number`, `date`, `buffer`, `hex`, `base64` atd.); **není** to povolený seznam atributů k načtení. Adresář může vrátit skalární hodnoty nebo pole, když se atribut opakuje. Omezte data, která vaše HTTP API zpřístupňuje.

Tento spustitelný fixture vyžaduje lokální nástroje **OpenLDAP**: `slapd`, `ldapadd` a soubory schémat core/cosine/inetorgperson. Na macOS výchozí hodnoty níže používají systémové nástroje; jiné instalace mohou nastavit `FORGE_SLAPD`, `FORGE_LDAPADD` a `FORGE_LDAP_SCHEMA`. Spustí samostatný neprivilegovaný loopback server s dočasnou databází LDIF a poté jej ukončí. Nikdy nepoužívá existující adresář. Test pokrývá vyhledávání, více hodnot atributu a hranici neplatného bindu; nepotvrzuje kompatibilitu s Active Directory, TLS/StartTLS, skupinami ani chování při opětovném připojení. Nikdy neposílejte skutečné přihlašovací údaje přes nechráněnou síť.

**Rozhodněte se o ověření z spojení.** Zkontrolujte výsledek spojení ve svém vlastním kódu a zpracujte vrácený profil jako autentický pouze po úspěšném spojení

```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 })) });
	});
}
```
