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

Commit de principe

parent cd79cad7
No related branches found
No related tags found
No related merge requests found
......@@ -12,7 +12,7 @@ import path from 'path';
/*var ldap = require('ldapjs');
var fs = require('fs');
var ldapEscape = require('ldap-escape');
var path = require('path');*/
var path = require('path'); */
// Important ; permet de vérifier que l'utilisateur reste connecté.
var ensureLoggedin = require('connect-ensure-login').ensureLoggedIn;
......@@ -25,7 +25,7 @@ var config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
var client = ldap.createClient({ url: config.ldap.server});
//------------------------------------------------------------------------------------------------------------------------
// Fonctions de recherche
// Fonctions de base
//------------------------------------------------------------------------------------------------------------------------
/**
......@@ -85,6 +85,67 @@ function rechercheLDAP(user, base, filter, filter_dic, attributes) {
});
}
/**
* @summary Fonction qui permet de modifier un élément sur le LDAP.
* @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 `modifierLDAP(...).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 {Object} user - Utilisateur de la forme nécessaire au bind
* @arg {string} user[key] - uid et password
* @arg {Object} mod - Dictionnaire contenant les attributs à modifier et les modifications
* @return {boolean} `true` si la modification s'est bien déroulée, false sinon
*/
function modifierLDAP(user, name, op, mod) {
// Debug TBM
//console.log(base);
//console.log(operation);
//console.log(modification);
return new Promise(function(resolve, reject) {
// A TBM utiliser user connecte (permet de pas avoir trop de demandes trop rapides et problème de permission)
client.bind(config.connexion.dn, config.connexion.passwd, (err, res) => {});
// Modification LDAP selon configuration en argument (pourrait prendre une liste de Changes)
client.modify(name, new ldap.Change({
operation: op,
modification: mod,
}), function(err) {
reject(err);
});
resolve(true);
});
}
/**
* @summary Fonction qui permet de rajouter un élément sur le LDAP.
* @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 `modifierLDAP(...).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 {Object} user - Utilisateur de la forme nécessaire au bind
* @arg {string} user[key] - uid et password
* @arg {string} dn - Adresse du parent
* @arg {Object} vals - Dictionnaire contenant les valeurs à
* @return {boolean} `true` si la modification s'est bien déroulée, false sinon
*/
function addLDAP(user, name, op, mod) {
// Debug TBM
//console.log(base);
//console.log(operation);
//console.log(modification);
return new Promise(function(resolve, reject) {
// A TBM utiliser user connecte (permet de pas avoir trop de demandes trop rapides et problème de permission)
client.bind(config.connexion.dn, config.connexion.passwd, (err, res) => {});
// Modification LDAP selon configuration en argument (pourrait prendre une liste de Changes)
client.modify(name, new ldap.Change({
operation: op,
modification: mod,
}), function(err) {
reject(err);
});
resolve(true);
});
}
//------------------------------------------------------------------------------------------------------------------------
// Fonctions de recherche
//------------------------------------------------------------------------------------------------------------------------
/**
* @summary Fonction qui interroge le LDAP et retrouve les groupes dont un individu est membre.
* @desc Cette fonction utilise rechercheLDAP avec un dictionnaire prédéfini dans config.json. Il faut l'appeler selon un schéma `listGroups(...).then((res) => { truc avec res })`;
......@@ -95,7 +156,7 @@ function rechercheLDAP(user, base, filter, filter_dic, attributes) {
*/
function listGroups(user, uid) {
return new Promise(function(resolve, reject) {
resolve(rechercheLDAP(user,config.dn_users, config.filter_id, { id : uid }, config.attributes_lg).then(res => res[0]));
rechercheLDAP(user,config.dn_users, config.filter_id, { id : uid }, config.attributes_lg).then(res => resolve(res[0]));
});
}
......@@ -109,7 +170,7 @@ function listGroups(user, uid) {
*/
function listGroups2(user, uid) {
return new Promise(function(resolve, reject) {
resolve(rechercheLDAP(user, config.dn_groups, config.filter_lg, { id : uid }, config.attributes_id));
rechercheLDAP(user, config.dn_groups, config.filter_lg, { id : uid }, config.attributes_id).then(res => resolve(res));
});
}
......@@ -123,7 +184,7 @@ function listGroups2(user, uid) {
*/
function listMembers(user, gid) {
return new Promise(function(resolve, reject) {
resolve(rechercheLDAP(user, config.key_id+"="+gid+","+config.dn_groups, config.filter_id, { id: gid }, config.attributes_lm).then(res => res[0]));
rechercheLDAP(user, config.key_id+"="+gid+","+config.dn_groups, config.filter_id, { id: gid }, config.attributes_lm).then(res => resolve(res[0]));
});
}
......@@ -137,7 +198,7 @@ function listMembers(user, gid) {
*/
function listAdmins(user, gid) {
return new Promise(function(resolve, reject) {
resolve(rechercheLDAP(user, config.key_id+"="+gid+","+config.dn_groups, config.filter_id, { id: gid }, config.attributes_al).then(res => res[0]));
rechercheLDAP(user, config.key_id+"="+gid+","+config.dn_groups, config.filter_id, { id: gid }, config.attributes_al).then(res => resolve(res[0]));
});
}
......@@ -151,7 +212,7 @@ function listAdmins(user, gid) {
*/
function rens(user, uid) {
return new Promise(function(resolve, reject) {
resolve(rechercheLDAP(user, config.dn_users, config.filter_id, { id: uid }, config.attributes_all));
rechercheLDAP(user, config.dn_users, config.filter_id, { id: uid }, config.attributes_all).then(res => resolve(res));
});
}
......@@ -192,7 +253,7 @@ function idTOL(user, c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8=
});
// Appel rechercheLDAP avec filtre de l'espace
resolve(rechercheLDAP(user, config.dn_users, filter, filter_dic, config.attributes_id));
rechercheLDAP(user, config.dn_users, filter, filter_dic, config.attributes_id).then(res => resolve(res));
});
}
......@@ -218,9 +279,6 @@ function idTOL(user, c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8=
*/
function TOL(user, c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9="", c10="", c11="", c12="") {
return new Promise(function(resolve, reject) {
// Pas nécessaire mais bien
client.bind(config.connexion.dn, config.connexion.passwd, (err, res) => {});
let filter="";
let dic={};
// Iteration pour chaque champ, alourdissement du filtre selon des trucs prédéfini dans config.json encore
......@@ -238,7 +296,7 @@ function TOL(user, c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8=""
//console.log(filter);
//console.log(dic);
rechercheLDAP(user, config.dn_users, filter, dic, config.attributes_all);
rechercheLDAP(user, config.dn_users, filter, dic, config.attributes_all).then(res => resolve(res));
});
}
......@@ -246,53 +304,33 @@ function TOL(user, c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8=""
// Fonctions de modification
//------------------------------------------------------------------------------------------------------------------------
/**
* @summary Fonction qui permet de créer un groupe sur le LDAP.
* @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 `modifierLDAP(...).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 {Object} user - Utilisateur de la forme nécessaire au bind
* @arg {string} user[key] - uid et password
* @arg {Object} mod - Dictionnaire contenant les attributs à modifier et les modifications
* @return {boolean} `true` si la modification s'est bien déroulée, false sinon
*/
function modifierLDAP(user, name, op, mod) {
// Debug TBM
//console.log(base);
//console.log(operation);
//console.log(modification);
return new Promise(function(resolve, reject) {
// A TBM utiliser user connecte (permet de pas avoir trop de demandes trop rapides et problème de permission)
client.bind(config.connexion.dn, config.connexion.passwd, (err, res) => {});
// Modification LDAP selon configuration en argument
client.modify(name, new ldap.Change({
operation: op,
modification: mod,
}), function(err) {
reject(err);
});
resolve(true);
});
}
/**
* @summary Fonction qui va plonger dans le LDAP et modifier un certain jeu de valeur en argument.
* @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 `modifierLDAP(...).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 {Object} user - Utilisateur de la forme nécessaire au bind
* @arg {string} user[key] - uid et password
* @arg {Object} param - Dictionnaire contenant les attributs à modifier et les modifications
* @arg {string} param[key] - Nouvelle valeur des attributs
* @arg {string} gid - Identifiant du group
* @arg {string} nom - Nom commun du group
* @arg {string} status - Statut du groupe (binet, autre ?)
* @arg {string[]} admins - Admins du groupe
* @arg {string[]} members - Nouvelle valeur des attributs
* @return {boolean} `true` si la modification s'est bien déroulée, false sinon
*/
function creerGroupe(param) {
function creerGroupe(user, gid, nom, status, admins, members) {
return new Promise(function(resolve, reject) {
let data = {};
data["uid"] = gid;
data["cn"] = nom;
data["brNS"] = status;
data[""];
reject(false);
});
}
//modifierLDAP("uid=quentin.chevalier,ou=eleves,dc=frankiz,dc=net","replace", {"displayName": ["hawkspar"]}).then(res => console.log(res));
//rechercheLDAP(user, "uid=quentin.chevalier,ou=eleves,dc=frankiz,dc=net","(displayName=${cn})",{ cn: "Sire hawkspar" }, ["jpegPhoto"]).then(res => console.log(res));
//listGroups({},"anatole.romon").then(res => console.log(res));
//TOL({},"","","","","","","absolutvodkes","","","","","","").then(res => console.log(res));
/* Partage pour le reste du monde ; même remarque synthaxe que pour l'import */
export { listGroups, listMembers, TOL };
export { listGroups, listMembers, listAdmins, rens, idTOL, TOL };
/*module.exports ={ listGroups, listMembers, listAdmins, rens, idTOL, TOL }; */
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