* @file Ce fichier gère les requêtes LDAP de type données ; liste des groupe d'un individu="", liste des membres d'un groupe... A ne pas confondre avec ldap_auth qui lui gère l'authentification.
* @file Ce fichier gère les requêtes LDAP de type données ; liste des groupe d'un individu, liste des membres d'un groupe... A ne pas confondre avec ldap_auth qui lui gère l'authentification. Il est à lire conjointement avec config.json qui détaille les pats et champs spécifique à un LDAP.
* @author hawkspar
* @author hawkspar
*/
*/
/* Ne pas hésiter à repasser en synthaxe ES5... Plus simple pour tester en solo avec node directement
/* Ne pas hésiter à repasser en synthaxe ES5... Plus simple pour tester en solo avec node directement */
importldapfrom'ldapjs';
importldapfrom'ldapjs';
importfsfrom'fs';
importfsfrom'fs';
import ldapEscape from 'ldap-escape'; */
importldapEscapefrom'ldap-escape';
varldap=require('ldapjs');
/*var ldap = require('ldapjs');
var fs = require('fs');
var fs = require('fs');
varldapEscape=require('ldap-escape');
var ldapEscape = require('ldap-escape');*/
// Important ; permet de vérifier que l'utilisateur reste connecté.
// Important ; permet de vérifier que l'utilisateur reste connecté.
* @summary Fonction qui interroge le LDAP et retrouve les groupes dont un individu est membre.
* @summary Fonction qui interroge le LDAP selon un protocole bien précis et renvoit les valeurs trouvées.
* @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma listGroups(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
* @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande avec ldapjs (voir [`Client API`](http://ldapjs.org/client.html) méthode search). Il faut l'appeler suivant un schéma requeteLDAP(dic).then((res) => { truc avec res });. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans `dic` et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
* @arg {int} uid - Identifiant de l'individu à interroger
* @arg {string} base - DN de l'emplacement de la requête
* @return {string} Liste des uid de groupes (noms flat des groupes) où l'id fourni est membre
* @arg {string} filter - Filtre logique de la recherche (format RFC2254)
* @arg {{}} filter_dic - Dictionnaire qui associe les faux champs dans filter aux vraies valeurs pertinentes de la recherche
* @arg {string[]} attributes - Liste des attributs qui figureront dans le résultat final
* @summary Fonction qui interroge le LDAP et retrouve la liste des membres d'un groupe.
* @summary Fonction qui interroge le LDAP et retrouve la liste des membres d'un groupe.
* @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma listMembers(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
* @desc Cette fonction utilise requeteLDAP avec un dictionnaire prédéfini dans config.json.
* @arg {int} gid - Identifiant du groupe à interroger
* @arg {int} gid - Identifiant du groupe à interroger
* @return {string} Liste des uid des membres où l'id fournie est membre (noms flat des groupes)
* @return {string} Liste des uid des membres où l'id fournie est membre (noms flat des groupes)
* @summary Fonction qui interroge le LDAP et retrouve juste les uid des paxs validant les critères de recherche. Première étape vers vrai TOL (Trombino On Line).
* @desc Accepte des champs exacts ou incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma TOL(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end). MEF Timeout pour des recherches trop vagues.
* @arg {string} c0 - Prénom
* @arg {string} c1 - Nom
* @arg {string} c2 - Surnom
* @arg {string} c3 - Nationalité
* @arg {string} c4 - Ecole ou université d'origine
* @arg {string} c5 - Promotion
* @arg {string} c6 - Groupe
* @arg {string} c7 - Cours
* @arg {string} c8 - Sport pratiqué
* @arg {string} c9 - Numéro de téléphone
* @arg {string} c10 - Adresse courriel
* @arg {string} c11 - Adresse physique
* @arg {string} c12 - Adresse ip
* @return {string[]} uids des profils qui "match" les critères proposés.
* @summary Fonction qui interroge le LDAP et retrouve les paxs validant les critères de recherche.
* @summary Fonction qui interroge le LDAP et retrouve les paxs validant les critères de recherche. Bien mais vite inutilisable car demande trop au LDAP.
* @desc Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma TOL(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
* @desc Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma TOL(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end). MEF Timeout pour des recherches trop vagues.
* @arg {string} c0 - Prénom
* @arg {string} c0 - Prénom
* @arg {string} c1 - Nom
* @arg {string} c1 - Nom
* @arg {string} c2 - Surnom
* @arg {string} c2 - Surnom
* @arg {string} c3 - Nationalité
* @arg {string} c3 - Nationalité
* @arg {string} c4 - Ecole ou université d'origine
* @arg {string} c4 - Ecole ou université d'origine
* @arg {int} c5 - Promotion
* @arg {string} c5 - Promotion
* @arg {string} c6 - Groupe
* @arg {string} c6 - Groupe
* @arg {string} c7 - Cours
* @arg {string} c7 - Cours
* @arg {string} c8 - Sport pratiqué
* @arg {string} c8 - Sport pratiqué
* @arg {int} c9 - Numéro de téléphone
* @arg {string} c9 - Numéro de téléphone
* @arg {string} c10 - Adresse courriel
* @arg {string} c10 - Adresse courriel
* @arg {string} c11 - Adresse physique
* @arg {string} c11 - Adresse physique
* @arg {string} c12 - Adresse ip
* @arg {string} c12 - Adresse ip
* @return {string[]} Informations recueillies ; plusieurs fois une liste sur le format ci-dessus pour tous les résultats correspondants plus une photo en byttestring et date de naissance.