Skip to content
Snippets Groups Projects
Commit 36ebebc4 authored by Quentin CHEVALIER's avatar Quentin CHEVALIER
Browse files

LDAP data - TOL in progress

parent dc1717a3
No related branches found
No related tags found
No related merge requests found
...@@ -9,8 +9,13 @@ ...@@ -9,8 +9,13 @@
"searchFilter":"(restrictedMemberUid=${id})" "searchFilter":"(restrictedMemberUid=${id})"
}, },
"ldap_data_ml": { "ldap_data_ml": {
"searchBase": "ou=groups,dc=frankiz,dc=net", "searchBase": "ou=eleves,dc=frankiz,dc=net",
"searchFilter": "(uid=${id})" "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" "sessionSecret":"change this"
} }
\ No newline at end of file
...@@ -13,9 +13,9 @@ let config = JSON.parse(fs.readFileSync('../../config.json', 'utf8')); ...@@ -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}); 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 * @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) { function listGroups(uid) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
...@@ -33,11 +33,11 @@ function listGroups(uid) { ...@@ -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 * @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) { return new Promise(function(resolve, reject) {
var membersList=[]; var membersList=[];
...@@ -45,13 +45,58 @@ function listMembers(gid) { ...@@ -45,13 +45,58 @@ function listMembers(gid) {
if (err) { if (err) {
reject(err); reject(err);
} else { } 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); }); 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 // Synthaxe d'utilisation
listGroups("quentin.chevalier").then((grList) => { console.log(grList); }); //listGroups("quentin.louis").then((meList) => { console.log(meList); });
listMembers("faerix").then((meList) => { console.log(meList); }); TOL("Quentin","u","","","",2016,"","","","","","").then((meList) => { console.log(meList); });
\ No newline at end of file
export { listGroups, listMembers, TOL };
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment