Dotaz na skutočný lokálny adresár LDAP
LDAP(options, callback) je natívny čítací klient. options.ldap poskytuje host a port; user je DN bindu, password jeho heslo, dn základ vyhľadávania a type požadovaná trieda objektu (person alebo group). type:'profile' používa login na vyhľadanie sAMAccountName a vráti jeden objekt alebo null. noauth:true vynechá bind; neudeľuje oprávnenia v adresári. Základ vyhľadávania vždy zadajte explicitne.
attributes mapuje názvy vrátených atribútov na typy konverzie (string, number, date, buffer, hex, base64 atď.); nie je to povolený zoznam atribútov na načítanie. Adresár môže vrátiť skalárne hodnoty alebo polia, keď sa atribút opakuje. Obmedzte dáta, ktoré vaše HTTP API sprístupňuje.
Tento spustiteľný fixture vyžaduje lokálne nástroje OpenLDAP: slapd, ldapadd a súbory schém core/cosine/inetorgperson. Na macOS predvolené hodnoty nižšie používajú systémové nástroje; iné inštalácie môžu nastaviť FORGE_SLAPD, FORGE_LDAPADD a FORGE_LDAP_SCHEMA. Spustí samostatný neprivilegovaný loopback server s dočasnou databázou LDIF a potom ho ukončí. Nikdy nepoužíva existujúci adresár. Test pokrýva vyhľadávanie, viaceré hodnoty atribútu a hranicu neplatného bindu; nepotvrdzuje kompatibilitu s Active Directory, TLS/StartTLS, skupinami ani správanie pri opätovnom pripojení. Nikdy neposielajte skutočné prihlasovacie údaje cez nechránenú sieť.
Rozhodnite sa o autentizácii z spojky. Skontrolujte výsledok spojky vo vlastnom kóde a zaobchádzajte s vráteným profilom ako s autentizáciou až po úspešnom spojení.
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 })) });
});
}