# Een echte lokale LDAP-directie zoeken

> Zoek een geïsoleerde OpenLDAP-instantie en controleer het bindresultaat in totaal5 0.0.19.

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

`LDAP(options, callback)` is de native leesclient. `options.ldap` levert `host` en `port`; `user` is de bind-DN, `password` het wachtwoord, `dn` de zoekbasis en `type` de gevraagde objectklasse (`person` of `group`). `type:'profile'` gebruikt `login` om `sAMAccountName` te zoeken en geeft één object of `null` terug. `noauth:true` slaat de bind over; het geeft geen directorymachtigingen. Geef de zoekbasis altijd expliciet op.

`attributes` koppelt namen van teruggegeven attributen aan conversietypen (`string`, `number`, `date`, `buffer`, `hex`, `base64`, enz.); het is **geen** toegestane lijst van op te halen attributen. Een directory kan scalaire waarden of arrays teruggeven wanneer een attribuut zich herhaalt. Beperk de gegevens die je HTTP-API blootstelt.

Deze uitvoerbare fixture vereist lokale **OpenLDAP**-tools: `slapd`, `ldapadd` en de schemabestanden core/cosine/inetorgperson. Op macOS gebruiken de standaardwaarden hieronder de systeemtools; andere installaties kunnen `FORGE_SLAPD`, `FORGE_LDAPADD` en `FORGE_LDAP_SCHEMA` instellen. Hij draait een aparte, onbevoorrechte loopback-server met een tijdelijke LDIF-database en beëindigt die daarna. Een bestaande directory wordt nooit gebruikt. De test dekt zoeken, meerdere attribuutwaarden en een grens bij ongeldige bind; hij certificeert geen compatibiliteit met Active Directory, TLS/StartTLS, groepen of heropbouwgedrag. Stuur nooit echte inloggegevens over een onbeschermd netwerk.

** Beslist de authenticatie van de band.** Check het resultaat van de binding in uw eigen code en behandel een geretourneerd profiel als geauthenticated pas nadat de band succesvol is.

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