# Interroga una directory LDAP locale reale

> Interroga un'istanza OpenLDAP isolata e verifica il risultato del collegamento in totale5 0.0.19.

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

`LDAP(options, callback)` è il client di lettura nativo. `options.ldap` fornisce `host` e `port`; `user` è il DN di bind, `password` la sua password, `dn` la base di ricerca e `type` la classe di oggetto richiesta (`person` o `group`). `type:'profile'` usa `login` per cercare `sAMAccountName` e restituisce un oggetto o `null`. `noauth:true` salta il bind; non concede permessi nella directory. Specifica sempre esplicitamente una base di ricerca.

`attributes` mappa i nomi degli attributi restituiti a tipi di conversione (`string`, `number`, `date`, `buffer`, `hex`, `base64`, ecc.); **non** è una lista consentita di attributi da recuperare. Una directory può restituire valori scalari o array quando un attributo si ripete. Limita i dati esposti dalla tua API HTTP.

Questo fixture eseguibile richiede gli strumenti locali di **OpenLDAP**: `slapd`, `ldapadd` e i file di schema core/cosine/inetorgperson. Su macOS i valori predefiniti qui sotto usano gli strumenti di sistema; altre installazioni possono impostare `FORGE_SLAPD`, `FORGE_LDAPADD` e `FORGE_LDAP_SCHEMA`. Avvia un server loopback separato e senza privilegi con un database LDIF temporaneo, poi lo termina. Non usa mai una directory esistente. Il test copre ricerca, più valori di attributo e un confine di bind non valido; non certifica la compatibilità con Active Directory, TLS/StartTLS, gruppi né il comportamento di riconnessione. Non inviare mai credenziali reali su una rete non protetta.

**Dichiara l'autenticazione dal bando.** Verifica il risultato del bando nel tuo codice, e trattare un profilo restituito come autenticato solo dopo che il bando è riuscito.

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