Zapytaj o prawdziwy lokalny adres LDAP
LDAP(options, callback) to natywny klient odczytu. options.ldap dostarcza host i port; user to DN bind, password jego hasło, dn baza wyszukiwania, a type żądana klasa obiektu (person lub group). type:'profile' używa login do wyszukania sAMAccountName i zwraca jeden obiekt lub null. noauth:true pomija bind; nie przyznaje uprawnień w katalogu. Zawsze jawnie podawaj bazę wyszukiwania.
attributes mapuje nazwy zwracanych atrybutów na typy konwersji (string, number, date, buffer, hex, base64 itd.); nie jest to lista dozwolonych atrybutów do pobrania. Katalog może zwrócić wartości skalarne lub tablice, gdy atrybut się powtarza. Ogranicz dane, które udostępnia Twoje API HTTP.
Ten wykonywalny fixture wymaga lokalnych narzędzi OpenLDAP: slapd, ldapadd i plików schematów core/cosine/inetorgperson. Na macOS poniższe wartości domyślne używają narzędzi systemowych; inne instalacje mogą ustawić FORGE_SLAPD, FORGE_LDAPADD i FORGE_LDAP_SCHEMA. Uruchamia osobny, nieuprzywilejowany serwer loopback z tymczasową bazą LDIF, a następnie go kończy. Nigdy nie używa istniejącego katalogu. Test obejmuje wyszukiwanie, wiele wartości atrybutu i granicę nieprawidłowego bind; nie poświadcza zgodności z Active Directory, TLS/StartTLS, grupami ani zachowania przy ponownym połączeniu. Nigdy nie wysyłaj prawdziwych danych logowania przez niezabezpieczoną sieć.
Zdecyduj się na autentyzację z wiązki. Sprawdź wynik wiązania w swoim własnym kodzie i traktuj zwrócony profil jako autentyczny dopiero po tym, jak wiązka odniosła sukces.
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 })) });
});
}