Interroga una directory LDAP locale reale
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.
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 })) });
});
}