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

fix nochild recursion

parent 9df51cc6
No related branches found
No related tags found
No related merge requests found
...@@ -198,7 +198,6 @@ export class Group { ...@@ -198,7 +198,6 @@ export class Group {
// Certains champs nécessitent de petits calculs // Certains champs nécessitent de petits calculs
let vals2={}; let vals2={};
// ?! // ?!
vals2[ldapConfig.group['password']] = "{CRYPT}"+data['password']; vals2[ldapConfig.group['password']] = "{CRYPT}"+data['password'];
...@@ -211,17 +210,15 @@ export class Group { ...@@ -211,17 +210,15 @@ export class Group {
} }
// Inscription des valeurs calculées par effet de bord // Inscription des valeurs calculées par effet de bord
if (!await Basics.change("group", gid, "add", vals2)) { if (!await Basics.change("group", gid, "add", vals2)) throw "Erreur lors de l'ajout des valeurs intelligentes du nouveau groupe.";
throw "Erreur lors de l'ajout des valeurs intelligentes du nouveau groupe.";
}
["posixGroup", "brGroup"].forEach(cst => { ["posixGroup", "brGroup"].forEach(cst => {
let vals3={}; let vals3={};
vals3[ldapConfig.group['classes']]=cst; vals3[ldapConfig.group['classes']]=cst;
Basics.change("group", gid, "add", vals3).then(res => { Basics.change("group", gid, "add", vals3).then(res => {
if (!res) throw "Erreur lors de l'ajout des valeurs constantes du nouveau groupe."; if (!res) throw "Erreur lors de l'ajout des valeurs constantes du nouveau groupe.";
}); }); });
});
// Ajout groupes parents et fils // Ajout groupes parents et fils
for (let rel of ["childs","parents"]) { for (let rel of ["childs","parents"]) {
data[rel].forEach(gid => { data[rel].forEach(gid => {
...@@ -231,7 +228,6 @@ export class Group { ...@@ -231,7 +228,6 @@ export class Group {
}); });
}); });
} }
// Utilisation des fonctions adaptées pour assurer la cohérence de l'ensemble // Utilisation des fonctions adaptées pour assurer la cohérence de l'ensemble
for (let cat of categories) { for (let cat of categories) {
for (let uid of data[cat]) Tools.add(uid, gid, cat).then(res => { for (let uid of data[cat]) Tools.add(uid, gid, cat).then(res => {
......
...@@ -98,7 +98,6 @@ export class userData extends partUserData { ...@@ -98,7 +98,6 @@ export class userData extends partUserData {
* @var {string?} site - Site web du groupe (URL) * @var {string?} site - Site web du groupe (URL)
* @var {string} category - Statut du groupe ; binet, section sportive... (actuellement juste 'binet' ou 'free') * @var {string} category - Statut du groupe ; binet, section sportive... (actuellement juste 'binet' ou 'free')
* @var {string[]} parents - Liste des groupes directement parents de celui-ci * @var {string[]} parents - Liste des groupes directement parents de celui-ci
* @var {string[]} childs - Liste des groupes directement enfants de celui-ci
* @var {string[]} admins - Liste des admins du groupe * @var {string[]} admins - Liste des admins du groupe
* @var {string[]} speakers - Liste des porte-parole du groupe * @var {string[]} speakers - Liste des porte-parole du groupe
* @var {string[]} members - Liste des membres du groupe * @var {string[]} members - Liste des membres du groupe
...@@ -113,7 +112,6 @@ export class groupData { ...@@ -113,7 +112,6 @@ export class groupData {
site?: string; site?: string;
category: string; category: string;
parents: string[] = []; parents: string[] = [];
//childs: string[] = [];
admins: string[] = []; admins: string[] = [];
speakers: string[] = []; speakers: string[] = [];
members: string[] = []; members: string[] = [];
......
...@@ -85,7 +85,7 @@ export class Tools { ...@@ -85,7 +85,7 @@ export class Tools {
// Escape user input // Escape user input
val = ldapEscape.filter("${fil}", { fil: val }); val = ldapEscape.filter("${fil}", { fil: val });
// Gestion des dns // Gestion des dns
if (categories.concat(["parents", "child"]).includes(attribute)) { if (categories.concat(["parents"]).includes(attribute)) {
if (domain == "group") var id = ldapConfig.group.gid; if (domain == "group") var id = ldapConfig.group.gid;
else var id = ldapConfig.user.uid; else var id = ldapConfig.user.uid;
val = id + '=' + val + ',' + ldapConfig[domain].dn; val = id + '=' + val + ',' + ldapConfig[domain].dn;
...@@ -122,8 +122,7 @@ export class Tools { ...@@ -122,8 +122,7 @@ export class Tools {
let dirtyData = {}; let dirtyData = {};
Object.keys(data).forEach(function(key: string) { Object.keys(data).forEach(function(key: string) {
// Some values edit can't change // Some values edit can't change
if (![ 'admins','speakers','members','followers', if (!categories.concat(['directory','classes','id','cleanFullName']).includes(key)) dirtyData[dirtyKeys.key]=data[key];
'directory','classes','id','cleanFullName'].includes(key)) dirtyData[dirtyKeys.key]=data[key];
}); });
return Basics.change(domain, id, "replace", dirtyData); return Basics.change(domain, id, "replace", dirtyData);
} }
...@@ -221,22 +220,26 @@ export class Tools { ...@@ -221,22 +220,26 @@ export class Tools {
* @static * @static
*/ */
static async addDFS(uid: string, gid: string, direction: boolean): Promise<boolean> { static async addDFS(uid: string, gid: string, direction: boolean): Promise<boolean> {
// Classic DFS
var to_visit = [gid];
// Cas récursif ascendant (admins) // Cas récursif ascendant (admins)
if (direction) { var rol = "admins";
var rol = "admins"; async function next_visit(cur_gid) { to_visit.concat(await Basics.searchSingle("group", ldapConfig.group.gid, null, "parents="+cur_gid)); }
var tov = ldapConfig.group.childs;
}
// Cas récursif descendant (membres) // Cas récursif descendant (membres)
else { if (!direction) {
var rol = "members"; var rol = "members";
var tov = ldapConfig.group.parents; async function next_visit(cur_gid) {
// Lecture du champ parents
let dns = await Basics.searchSingle("group", ldapConfig.group.parents, cur_gid);
// Reformattage DNs en gids de groupes
dns.map(dn => dn.split(',')[0].split('=')[1]);
to_visit.concat(dns);
}
} }
// Classic DFS
var to_visit = [gid];
while (to_visit.length > 0) { while (to_visit.length > 0) {
let cur_gid = to_visit.pop(); let cur_gid = to_visit.pop();
Tools.addIfAbsent(uid, "user", cur_gid, "group", rol); Tools.addIfAbsent(uid, "user", cur_gid, "group", rol);
to_visit.concat(await Basics.searchSingle("group", tov, cur_gid)); await next_visit(cur_gid);
} }
return true; return true;
} }
...@@ -351,27 +354,31 @@ export class Tools { ...@@ -351,27 +354,31 @@ export class Tools {
* @static * @static
*/ */
static async remDFS(uid: string, gid: string, direction: boolean): Promise<boolean> { static async remDFS(uid: string, gid: string, direction: boolean): Promise<boolean> {
// Classic DFS
var to_visit = [gid];
// Cas récursif ascendant (admins) // Cas récursif ascendant (admins)
if (direction) { var checks = ["admins"];
var rol = "admins"; // Recherche des groupes avec parents qui correspondent (efficace car index)
var tov = ldapConfig.group.childs; async function next_visit(cur_gid) { to_visit.concat(await Basics.searchSingle("group", ldapConfig.group.gid, null, "parents="+cur_gid)); }
var checks = ["admins"]; // Cas récursif descendant (membres)
} if (!direction) {
// Cas récursif descendant (members)
else {
var rol = "members";
var tov = ldapConfig.group.parents;
var checks = ["admins","speakers","members"]; var checks = ["admins","speakers","members"];
async function next_visit(cur_gid) {
// Lecture du champ parents
let dns = await Basics.searchSingle("group", ldapConfig.group.parents, cur_gid);
// Reformattage des dns en gids
dns.map(dn => dn.split(',')[0].split('=')[1]);
to_visit.concat(dns);
}
} }
// Classic DFS var rol = checks[checks.length-1];
var to_visit = [gid];
while (to_visit.length > 0) { while (to_visit.length > 0) {
let cur_gid = to_visit.pop(); let cur_gid = to_visit.pop();
// Si le statut de uid dans cur_gid est un statut strict on arrête de boucler // Si le statut de uid dans cur_gid est un statut strict on arrête de boucler
for (let cat of checks) if ((await Tools.get(gid, "group", cat)).includes(uid)) continue; for (let cat of checks) if ((await Tools.get(cur_gid, "group", cat)).includes(uid)) continue;
// Sinon on le tue et on boucle // Sinon on le tue et on boucle
Tools.remIfPresent(uid, "user", cur_gid, "group", rol); Tools.remIfPresent(uid, "user", cur_gid, "group", rol);
to_visit.concat(await Basics.searchSingle("group", tov, cur_gid)); await next_visit(cur_gid);
} }
return true; return true;
} }
......
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