ForgeTotal.js 5
nl

Total.js 5

Een echte lokale LDAP-directie zoeken

Total.js 5 · total5@0.0.19 total5reference Uitgevoerd met Total.js 5

LDAP(options, callback) is de native leesclient. options.ldap levert host en port; user is de bind-DN, password het wachtwoord, dn de zoekbasis en type de gevraagde objectklasse (person of group). type:'profile' gebruikt login om sAMAccountName te zoeken en geeft één object of null terug. noauth:true slaat de bind over; het geeft geen directorymachtigingen. Geef de zoekbasis altijd expliciet op.

attributes koppelt namen van teruggegeven attributen aan conversietypen (string, number, date, buffer, hex, base64, enz.); het is geen toegestane lijst van op te halen attributen. Een directory kan scalaire waarden of arrays teruggeven wanneer een attribuut zich herhaalt. Beperk de gegevens die je HTTP-API blootstelt.

Deze uitvoerbare fixture vereist lokale OpenLDAP-tools: slapd, ldapadd en de schemabestanden core/cosine/inetorgperson. Op macOS gebruiken de standaardwaarden hieronder de systeemtools; andere installaties kunnen FORGE_SLAPD, FORGE_LDAPADD en FORGE_LDAP_SCHEMA instellen. Hij draait een aparte, onbevoorrechte loopback-server met een tijdelijke LDIF-database en beëindigt die daarna. Een bestaande directory wordt nooit gebruikt. De test dekt zoeken, meerdere attribuutwaarden en een grens bij ongeldige bind; hij certificeert geen compatibiliteit met Active Directory, TLS/StartTLS, groepen of heropbouwgedrag. Stuur nooit echte inloggegevens over een onbeschermd netwerk.

Beslist de authenticatie van de band. Check het resultaat van de binding in uw eigen code en behandel een geretourneerd profiel als geauthenticated pas nadat de band succesvol is.

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