# Търсене на реална локална LDAP директория

> Търсете изолирана OpenLDAP инстанция и проверете резултата от връзката в обща стойност5 0.0.19.

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

`LDAP(options, callback)` е нативният клиент за четене. `options.ldap` предоставя `host` и `port`; `user` е DN на bind, `password` е паролата му, `dn` е базата за търсене, а `type` е поисканият клас обект (`person` или `group`). `type:'profile'` използва `login` за търсене на `sAMAccountName` и връща един обект или `null`. `noauth:true` прескача bind; не дава права в директория. Винаги задавайте изрично база за търсене.

`attributes` съпоставя имената на върнатите атрибути с типове конверсия (`string`, `number`, `date`, `buffer`, `hex`, `base64` и т.н.); **не е** списък с разрешени атрибути за извличане. Директорийът може да върне скаларни стойности или масиви, когато атрибут се повтаря. Ограничете данните, които вашето HTTP API излага.

Този изпълним fixture изисква локални инструменти на **OpenLDAP**: `slapd`, `ldapadd` и файловете със схеми core/cosine/inetorgperson. На macOS стойностите по подразбиране по-долу използват системните инструменти; други инсталации могат да зададат `FORGE_SLAPD`, `FORGE_LDAPADD` и `FORGE_LDAP_SCHEMA`. Изпълнява отделен непривилегирован loopback сървър с временна LDIF база и после го прекратява. Никога не използва съществуващ директорий. Тестът покрива търсене, няколко стойности на атрибут и граница при невалиден bind; не удостоверява съвместимост с Active Directory, TLS/StartTLS, групи или поведение при повторно свързване. Никога не изпращайте реални идентификационни данни по незащитена мрежа.

**Решете за автентичност от връзката.** Проверете резултата на връзките в собствения си код и третиране на възстановения профил като автентирано само след успеха на връщането.

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