From 342daf4f412e60a80f24d821a8629b9a8eab5991 Mon Sep 17 00:00:00 2001 From: ManifoldFR <wilson.jallet@gmail.com> Date: Thu, 22 Mar 2018 17:58:39 +0100 Subject: [PATCH] rechercherLDAP will properly reject promise when wrong data supplied (No Such Object) --- src/graphql/connectors/connectors.js | 5 --- src/ldap/ldap_data.js | 63 ++++++++++++++-------------- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/src/graphql/connectors/connectors.js b/src/graphql/connectors/connectors.js index d2257ce..c72eccc 100644 --- a/src/graphql/connectors/connectors.js +++ b/src/graphql/connectors/connectors.js @@ -12,11 +12,6 @@ import ldap_bind_user from '../../../ldap_connexion_config.json'; const utilisateur = new ldap.UtilisateurAnonyme(); -let result = utilisateur.listMembers("br").then(res => { - console.log("Got it"); - return res; -}); - export { utilisateur }; /* diff --git a/src/ldap/ldap_data.js b/src/ldap/ldap_data.js index 27d0c56..c25d66a 100644 --- a/src/ldap/ldap_data.js +++ b/src/ldap/ldap_data.js @@ -15,6 +15,7 @@ import path from 'path'; */ /**/var ldap = require('ldapjs'); var fs = require('fs'); +var assert = require('assert'); var ldapEscape = require('ldap-escape'); var path = require('path'); @@ -60,33 +61,37 @@ function rechercherLDAP(base, attributes, filter="(objectClass=*)") { return new Promise((resolve, reject) => { let vals=[]; // Interrogation LDAP selon la configuration fournie en argument - client.search(base, { - "scope": "sub", - "filter": filter, - "attributes": attributes - }, - function(err, res) { - // Gestion erreur - if (err) { - reject(err); - } else { + client.search(base, + { + "scope": "sub", + "filter": filter, + "attributes": attributes + }, function(err, res) { + if (err) { + reject(err); + } else { // Dès que la recherche renvoie une entrée, on stocke les attributs qui nous intéressent - res.on('searchEntry', function(entry) { + res.on('searchEntry', function(entry) { // Cas un seul attribut où le résultat est une liste directement - if (!Array.isArray(attributes)) { vals.push(entry.object[attributes]); } - else if (attributes.length == 1) { vals.push(entry.object[attributes[0]]); } - // Plusieurs attributs: le résultat est un dictionnaire - else { - vals.push({}); - attributes.forEach((attribute) => { - vals.slice(-1)[0][attribute]=entry.object[attribute]; - }); - } - }); - // Si la recherche est finie on se déconnecte et on renvoie la liste - res.on('end', function(res) { resolve(vals); }); - } - }); + if (!Array.isArray(attributes)) { vals.push(entry.object[attributes]); } + else if (attributes.length == 1) { vals.push(entry.object[attributes[0]]); } + // Plusieurs attributs: le résultat est un dictionnaire + else { + vals.push({}); + attributes.forEach((attribute) => { + vals.slice(-1)[0][attribute]=entry.object[attribute]; + }); + } + }); + + res.on('error', function(resErr) { + reject(resErr); + }); + + // Si la recherche est finie on se déconnecte et on renvoie la liste + res.on('end', function(res) { resolve(vals); }); + } + }); }); } @@ -257,9 +262,7 @@ function repliquerTOLModulable(data, return_attributes) { * @return {Promise(Object[])} Liste de dictionnaires de profils en cohérence avec l'input avec pour clés tous les attributs disponibles ou presque (voir config). */ function repliquerTOL(data) { - return new Promise((resolve, reject) => { - repliquerTOLModulable(data, config.user.profil).then(res => resolve(res)); - }); + return repliquerTOLModulable(data, config.user.profil); } /** @@ -447,9 +450,7 @@ class UtilisateurAnonyme { * voir `ldap_config.json`(..\..\ldap_config.json) pour les clés exactes. */ getUser(uid) { - return new Promise((resolve, reject) => { - rechercherLDAP(ldapEscape.filter(config.key_id+"=${id},"+config.dn_users, {id : uid}), config.user.profil).then(res => resolve(res)); - }); + return rechercherLDAP(ldapEscape.filter(config.key_id+"=${id},"+config.dn_users, {id : uid}), config.user.profil); } /** -- GitLab