ForgeTotal.js 5
pt

Total.js 5

Querer um diretório LDAP local real

Total.js 5 · total5@0.0.19 total5reference Executada com o Total.js 5

LDAP(options, callback) é o cliente de leitura nativo. options.ldap fornece host e port; user é o DN de bind, password a sua palavra-passe, dn a base de pesquisa e type a classe de objeto pedida (person ou group). type:'profile' usa login para pesquisar sAMAccountName e devolve um objeto ou null. noauth:true salta o bind; não concede permissões no diretório. Especifique sempre uma base de pesquisa de forma explícita.

attributes mapeia os nomes dos atributos devolvidos para tipos de conversão (string, number, date, buffer, hex, base64, etc.); não é uma lista permitida de atributos a obter. Um diretório pode devolver valores escalares ou arrays quando um atributo se repete. Restrinja os dados que a sua API HTTP expõe.

Este fixture executável requer as ferramentas locais do OpenLDAP: slapd, ldapadd e os ficheiros de esquema core/cosine/inetorgperson. No macOS os valores por omissão abaixo usam as ferramentas do sistema; outras instalações podem definir FORGE_SLAPD, FORGE_LDAPADD e FORGE_LDAP_SCHEMA. Executa um servidor loopback separado e sem privilégios com uma base LDIF temporária e depois termina-o. Nunca usa um diretório existente. O teste cobre pesquisa, vários valores de atributo e um limite de bind inválido; não certifica compatibilidade com Active Directory, TLS/StartTLS, grupos nem o comportamento de religação. Nunca envie credenciais reais por uma rede sem proteção.

Decida a autenticação do bando. Verifique o resultado do bingo em seu próprio código e trate um perfil devolvido como autenticado apenas depois que o bando tenha sido bem sucedido.

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