ForgeTotal.js 5
it

Total.js 5

Interroga una directory LDAP locale reale

Total.js 5 · total5@0.0.19 total5reference Eseguita con Total.js 5

LDAP(options, callback) è il client di lettura nativo. options.ldap fornisce host e port; user è il DN di bind, password la sua password, dn la base di ricerca e type la classe di oggetto richiesta (person o group). type:'profile' usa login per cercare sAMAccountName e restituisce un oggetto o null. noauth:true salta il bind; non concede permessi nella directory. Specifica sempre esplicitamente una base di ricerca.

attributes mappa i nomi degli attributi restituiti a tipi di conversione (string, number, date, buffer, hex, base64, ecc.); non è una lista consentita di attributi da recuperare. Una directory può restituire valori scalari o array quando un attributo si ripete. Limita i dati esposti dalla tua API HTTP.

Questo fixture eseguibile richiede gli strumenti locali di OpenLDAP: slapd, ldapadd e i file di schema core/cosine/inetorgperson. Su macOS i valori predefiniti qui sotto usano gli strumenti di sistema; altre installazioni possono impostare FORGE_SLAPD, FORGE_LDAPADD e FORGE_LDAP_SCHEMA. Avvia un server loopback separato e senza privilegi con un database LDIF temporaneo, poi lo termina. Non usa mai una directory esistente. Il test copre ricerca, più valori di attributo e un confine di bind non valido; non certifica la compatibilità con Active Directory, TLS/StartTLS, gruppi né il comportamento di riconnessione. Non inviare mai credenziali reali su una rete non protetta.

Dichiara l'autenticazione dal bando. Verifica il risultato del bando nel tuo codice, e trattare un profilo restituito come autenticato solo dopo che il bando è riuscito.

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