ForgeTotal.js 5
bg

Total.js 5

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

Total.js 5 · total5@0.0.19 total5reference Изпълнено с Total.js 5

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, групи или поведение при повторно свързване. Никога не изпращайте реални идентификационни данни по незащитена мрежа.

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

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