# Dotaz na skutočný lokálny adresár LDAP

> Dopytujte izolovanú inštanciu OpenLDAP a overte výsledok väzby celkovo5 0.0.19.

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

`LDAP(options, callback)` je natívny čítací klient. `options.ldap` poskytuje `host` a `port`; `user` je DN bindu, `password` jeho heslo, `dn` základ vyhľadávania a `type` požadovaná trieda objektu (`person` alebo `group`). `type:'profile'` používa `login` na vyhľadanie `sAMAccountName` a vráti jeden objekt alebo `null`. `noauth:true` vynechá bind; neudeľuje oprávnenia v adresári. Základ vyhľadávania vždy zadajte explicitne.

`attributes` mapuje názvy vrátených atribútov na typy konverzie (`string`, `number`, `date`, `buffer`, `hex`, `base64` atď.); **nie je** to povolený zoznam atribútov na načítanie. Adresár môže vrátiť skalárne hodnoty alebo polia, keď sa atribút opakuje. Obmedzte dáta, ktoré vaše HTTP API sprístupňuje.

Tento spustiteľný fixture vyžaduje lokálne nástroje **OpenLDAP**: `slapd`, `ldapadd` a súbory schém core/cosine/inetorgperson. Na macOS predvolené hodnoty nižšie používajú systémové nástroje; iné inštalácie môžu nastaviť `FORGE_SLAPD`, `FORGE_LDAPADD` a `FORGE_LDAP_SCHEMA`. Spustí samostatný neprivilegovaný loopback server s dočasnou databázou LDIF a potom ho ukončí. Nikdy nepoužíva existujúci adresár. Test pokrýva vyhľadávanie, viaceré hodnoty atribútu a hranicu neplatného bindu; nepotvrdzuje kompatibilitu s Active Directory, TLS/StartTLS, skupinami ani správanie pri opätovnom pripojení. Nikdy neposielajte skutočné prihlasovacie údaje cez nechránenú sieť.

** Rozhodnite sa o autentizácii z spojky.** Skontrolujte výsledok spojky vo vlastnom kóde a zaobchádzajte s vráteným profilom ako s autentizáciou až po úspešnom 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 })) });
	});
}
```
