From 36ebebc404ddcdba7cb020bcd31d0366b2ad36f0 Mon Sep 17 00:00:00 2001 From: Quentin CHEVALIER <quentin.chevalier@polytechnique.edu> Date: Wed, 28 Feb 2018 16:44:44 +0100 Subject: [PATCH] LDAP data - TOL in progress --- config.json | 9 +++++-- src/ldap/ldap_data.js | 61 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/config.json b/config.json index 788fdac..9e1277e 100644 --- a/config.json +++ b/config.json @@ -9,8 +9,13 @@ "searchFilter":"(restrictedMemberUid=${id})" }, "ldap_data_ml": { - "searchBase": "ou=groups,dc=frankiz,dc=net", - "searchFilter": "(uid=${id})" + "searchBase": "ou=eleves,dc=frankiz,dc=net", + "searchFilter": "(brMemberOf=${id})" + }, + "ldap_data_tol": { + "searchBase": "ou=eleves,dc=frankiz,dc=net", + "searchFilter": "(&(&(&(|(givenName=*${app_fn})(|(givenName=*${app_fn}*)(givenName=${app_fn}*)))(|(sn=*${app_ln})(|(sn=*${app_ln}*)(sn=${app_ln}*))))(brPromo=${app_yr}))(brMemberOf=*${app_na}))", + "searchAttributes": ["jpegPhoto","givenName", "sn", "brBirthdate", "brPromo","telephoneNumber","mail","brRoom","brIP"] }, "sessionSecret":"change this" } \ No newline at end of file diff --git a/src/ldap/ldap_data.js b/src/ldap/ldap_data.js index fd92921..9d7b3f3 100644 --- a/src/ldap/ldap_data.js +++ b/src/ldap/ldap_data.js @@ -13,9 +13,9 @@ let config = JSON.parse(fs.readFileSync('../../config.json', 'utf8')); var client = ldap.createClient({ url: config.ldap.server, timeout: 10000, idleTimeout: 10000}); /** - * @summary Fonction qui retrouve les groupes du LDAP dont un individu est membre (pas de bind nécessaire) + * @summary Fonction qui retrouve les groupes du LDAP dont un individu est membre (pas de bind nécessaire). * @arg {int} uid - Identifiant de l'individu à interroger - * @return {string} Liste des uid de groupes (noms flat des groupes) où l'id fourni + * @return {string} Liste des uid de groupes (noms flat des groupes) où l'id fourni est membre */ function listGroups(uid) { return new Promise(function(resolve, reject) { @@ -33,11 +33,11 @@ function listGroups(uid) { } /** - * @summary Fonction qui retrouve la liste des membres d'un binet sur le LDAP + * @summary Fonction qui retrouve la liste des membres d'un binet sur le LDAP. * @arg {int} gid - Identifiant du groupe à interroger - * @return {string} Liste des uid de groupes 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) */ -function listMembers(gid) { +function listMembers(gid) { return new Promise(function(resolve, reject) { var membersList=[]; @@ -45,13 +45,58 @@ function listMembers(gid) { if (err) { reject(err); } else { - res.on('searchEntry', function(entry) { membersList.push(entry.object.restrictedMemberUid); }); + res.on('searchEntry', function(entry) { membersList.push(entry.object.uid); }); res.on('end', function(res) { resolve(membersList); }); } }); }); } + +/** + * @summary Fonction qui retrouve les paxs validant les critères de recherche. Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete. + * @arg {string} fn - Prénom + * @arg {string} ln - Nom + * @arg {string} nk - Surnom + * @arg {string} na - Nationalité + * @arg {string} sc - Ecole ou université d'origine + * @arg {int} yr - Promotion + * @arg {string} gr - Groupe + * @arg {string} co - Cours + * @arg {string} sp - Sport pratiqué + * @arg {int} nb - Numéro de téléphone + * @arg {string} ma - Adresse courriel + * @arg {string} ad - Adresse physique + * @arg {string} ip - Adresse ip + * @return {string[]} Informations recueillies ; plusieurs fois une liste sur le format ci-dessus pour tous les résultats correspondants plus une photo et date de naissance ! + */ +function TOL(fn, ln, nk, na, sc, yr, gr, co, sp, nb, ma, ad, ip) { + return new Promise(function(resolve, reject) { + var candidatesList=[]; + ["jpegPhoto","givenName", "sn", "brBirthdate", "brPromo","telephoneNumber","mail","brRoom","brIP"] + var filter=""; + + config.ldap_data_tol.searchAttributes.forEach(element => { filter="(&("+filter+")"; + + }); + + client.search(config.ldap_data_tol.searchBase, {scope: "sub", attributes: config.ldap_data_tol.searchAttributes, filter: ldapEscape.filter(config.ldap_data_tol.searchFilter, { app_fn: fn, app_ln: ln, app_nk: nk, app_na: na, app_sc: sc, app_yr: yr, app_gr: gr, app_co: co, app_sp: sp, app_nb: nb, app_ma: ma, app_ad: ad, app_ip: ip})}, function(err, res) { + if (err) { + reject(err); + } else { + res.on('searchEntry', function(entry) { + for (var i=0; i<config.ldap_data_tol.searchAttributes.length; i++) { + // Complicated, but hides searchAttributes + eval("candidatesList.push(entry.object."+config.ldap_data_tol.searchAttributes[i]+")"); + } + }); + res.on('end', function(res) { resolve(candidatesList); }); + } + }); + }); +} // Synthaxe d'utilisation -listGroups("quentin.chevalier").then((grList) => { console.log(grList); }); -listMembers("faerix").then((meList) => { console.log(meList); }); \ No newline at end of file +//listGroups("quentin.louis").then((meList) => { console.log(meList); }); +TOL("Quentin","u","","","",2016,"","","","","","").then((meList) => { console.log(meList); }); + +export { listGroups, listMembers, TOL }; \ No newline at end of file -- GitLab