# Zapytaj o prawdziwy lokalny adres LDAP

> Wyszukaj izolowaną instancję OpenLDAP i sprawdź wynik wiązania w łącznej liczbie 5 0,019.

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

`LDAP(options, callback)` to natywny klient odczytu. `options.ldap` dostarcza `host` i `port`; `user` to DN bind, `password` jego hasło, `dn` baza wyszukiwania, a `type` żądana klasa obiektu (`person` lub `group`). `type:'profile'` używa `login` do wyszukania `sAMAccountName` i zwraca jeden obiekt lub `null`. `noauth:true` pomija bind; nie przyznaje uprawnień w katalogu. Zawsze jawnie podawaj bazę wyszukiwania.

`attributes` mapuje nazwy zwracanych atrybutów na typy konwersji (`string`, `number`, `date`, `buffer`, `hex`, `base64` itd.); **nie jest** to lista dozwolonych atrybutów do pobrania. Katalog może zwrócić wartości skalarne lub tablice, gdy atrybut się powtarza. Ogranicz dane, które udostępnia Twoje API HTTP.

Ten wykonywalny fixture wymaga lokalnych narzędzi **OpenLDAP**: `slapd`, `ldapadd` i plików schematów core/cosine/inetorgperson. Na macOS poniższe wartości domyślne używają narzędzi systemowych; inne instalacje mogą ustawić `FORGE_SLAPD`, `FORGE_LDAPADD` i `FORGE_LDAP_SCHEMA`. Uruchamia osobny, nieuprzywilejowany serwer loopback z tymczasową bazą LDIF, a następnie go kończy. Nigdy nie używa istniejącego katalogu. Test obejmuje wyszukiwanie, wiele wartości atrybutu i granicę nieprawidłowego bind; nie poświadcza zgodności z Active Directory, TLS/StartTLS, grupami ani zachowania przy ponownym połączeniu. Nigdy nie wysyłaj prawdziwych danych logowania przez niezabezpieczoną sieć.

**Zdecyduj się na autentyzację z wiązki.** Sprawdź wynik wiązania w swoim własnym kodzie i traktuj zwrócony profil jako autentyczny dopiero po tym, jak wiązka odniosła sukces.

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