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