# Interroger un véritable annuaire LDAP local

> Interrogez une instance OpenLDAP isolée et vérifiez le résultat de la liaison dans total5 0.0.19.

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

`LDAP(options, callback)` est le client de lecture natif. `options.ldap` fournit `host` et `port` ; `user` est le DN de liaison, `password` son mot de passe, `dn` la base de recherche et `type` la classe d'objet demandée (`person` ou `group`). `type:'profile'` utilise `login` pour rechercher `sAMAccountName` et renvoie un objet ou `null`. `noauth:true` ignore la liaison ; il n'accorde pas d'autorisations de répertoire. Spécifiez toujours explicitement une base de recherche.

Les mappages `attributes` ont renvoyé les noms d'attribut aux types de conversion (`string`, `number`, `date`, `buffer`, `hex`, `base64`, etc.) ; il ne s'agit **pas** d'une liste autorisée d'attributs à récupérer. Un répertoire peut renvoyer des valeurs scalaires ou des tableaux lorsqu'un attribut se répète. Limitez les données exposées par votre API HTTP.

Cet appareil exécutable nécessite les outils **OpenLDAP** locaux : `slapd`, `ldapadd` et les fichiers de schéma core/cosine/inetorgperson. Sur macOS, les valeurs par défaut ci-dessous utilisent les outils système ; d'autres installations peuvent définir `FORGE_SLAPD`, `FORGE_LDAPADD` et `FORGE_LDAP_SCHEMA`. Il exécute un serveur de bouclage non privilégié distinct et une base de données LDIF temporaire, puis y met fin. Il n'utilise jamais un répertoire existant. Le test couvre la recherche, plusieurs valeurs d'attribut et une limite de liaison non valide ; il ne certifie pas la compatibilité Active Directory, TLS/StartTLS, les groupes ou le comportement de reconnexion. N'envoyez jamais de véritables informations d'identification sur un réseau non protégé.

**Décidez de l'authentification à partir de la liaison.** Vérifiez le résultat de la liaison dans votre propre code et traitez un profil renvoyé comme authentifié uniquement une fois la liaison réussie.

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