From 3ed9b4a917432c6af1d9b8d7c7d5cd741cbe5829 Mon Sep 17 00:00:00 2001
From: hawkspar <quentin.chevalier@polytechnique.edu>
Date: Sat, 2 Feb 2019 11:48:23 +0100
Subject: [PATCH] modifs Greg LDAP

---
 ldap_config.json            | 61 +++++++++++++-----------------
 src/ldap/export/group.ts    | 19 +---------
 src/ldap/export/user.ts     | 21 +----------
 src/ldap/internal/config.ts | 75 +++++++++++++++++--------------------
 4 files changed, 65 insertions(+), 111 deletions(-)

diff --git a/ldap_config.json b/ldap_config.json
index c3b3bd2..7a0d547 100644
--- a/ldap_config.json
+++ b/ldap_config.json
@@ -2,7 +2,7 @@
 	"comment_1": "Tout ce fichier sert à protéger les vrais champs du LDAP dans les scripts dans src/ldap. Les champs ci-dessous contiennent le nécessaire à une première connexion par exemple.",
 	"server": {
 		"prod": "ldap://frankiz.eleves.polytechnique.fr:389",
-		"dev": "ldap://129.104.201.10:389"
+		"dev": "ldap://ldap.eleves.polytechnique.fr:389"
 	},
 
 	"comment_2": "Noms de domaines dans LDAP ; le niv d'après est en uid=, voir Wikipedia",
@@ -15,51 +15,44 @@
 	"comment_3": "Placeholders et indications de contenu de certains champs du LDAP généré par frankiz pour les utilisateurs",
 	"user": {
 		"uid": "uid",
-		"photo": "jpegPhoto",
+		"password": "userPassword",
 		"givenName": "givenName",
 		"lastName": "sn",
-		"fullName": "cn",
-		"cleanFullName": "gecos",
 		"nickname": "displayName",
-		"birthdate": "brBirthdate",
-		"nationality": "country",
-		"promotion": "brPromo",
+		"gender": "gender",
+		"photo": "jpegPhoto",
 		"phone": "telephoneNumber",
-		"adress": "brRoom",
-		"id": "uidNumber",
-		"password": "userPassword",
-		"idNum": "gidNumber",
-		"directory": "homeDirectory",
+		"adress": "roomNumber",
+		"mail": "email",
+		"birthdate": "birthdate",
+		"nationality": "nationality",
+		"admins": "adminOf",
+		"speakers": "speakerOf",
+		"members": "memberOf",
+		"followers": "followerOf",
 		"login": "loginShell",
-		"readPerm": "brNewsReadAccess",
-		"writePerm": "brNewsPostAccess",
-		"mail": "mail",
-		"ips": "brIP",
-		"forlifes": "brAlias",
-		"admins": "TBC",
-		"speakers": "TBC",
-		"members": "brMemberOf",
-		"followers": "TBC",
-		"classes": "objectClass"
+		"directory": "homeDirectory",
+		"classes": "objectClass",
+		"id": "uidNumber",
+		"cleanFullName": "gecos"
 	},
 	"comment_4": "Placeholders et indications de contenu de certains champs du LDAP généré par frankiz pour les groupes",
 	"group": {
 		"gid": "uid",
-		"name": "brAlias",
-		"category": "brNS",
+		"name": "sn",
+		"site": "website",
+		"description": "description",
+		"category": "groupCategory",
 		"admins": "memberUid",
-		"speakers": "TBC",
-		"members": "restrictedMemberUid",
-		"followers": "TBC",
+		"speakers": "speaker",
+		"members": "member",
+		"followers": "follower",
 		"adress":"cn",
-		"idNumber": "uidNumber",
-		"idNumber2": "gidNumber",
-		"login": "loginShell",
+		"idNumber": "gidNumber",
 		"password": "userPassword",
-		"directory": "homeDirectory",
-		"cleanFullName": "gecos",
+		"logo": "jpegPhoto",
 		"classes": "objectClass",
-		"childs": "TBC",
-		"parents": "TBC"
+		"childs": "child",
+		"parents": "parent"
 	}
 }
\ No newline at end of file
diff --git a/src/ldap/export/group.ts b/src/ldap/export/group.ts
index 4b15b43..24f61f3 100644
--- a/src/ldap/export/group.ts
+++ b/src/ldap/export/group.ts
@@ -223,11 +223,8 @@ export class Group {
         // Certains champs nécessitent de petits calculs
         let vals2={};
 
-        // Encore un champ redondant
-        vals2[ldapConfig.group['adress']] = gid;
-
         // ?!
-        vals2[ldapConfig.group['password']] = '';
+        vals2[ldapConfig.group['password']] = "{CRYPT}"+data['password'];
 
         // Génération id aléatoire et test contre le LDAP
         try {
@@ -236,28 +233,16 @@ export class Group {
         catch(err) {
             throw "Erreur lors de la génération d'un id numérique pour créer un nouveau groupe.";
         }
-        // FOIREUX : Hypothèse sur la structure du reste des données mais évite un test.assurerUnicite à deux variables
-        vals2[ldapConfig.group['idNumber2']]=vals2[ldapConfig.group['idNumber']];
-        
-        // Stockage machine ; dépend du prénom
-        vals2[ldapConfig.group['directory']] = '/hosting/groups/'+gid;
 
         // Code root
         vals2[ldapConfig.group['cleanFullName']]=data['name'].replace(':', ';').toLowerCase().normalize('UFD');
-        
-        // Adressage root
-        vals2[ldapConfig.group['login']] = "/sbin/nologin";
-        
-        // Permissions BR
-        vals2[ldapConfig.group['readPerm']] = '!*';
-        vals2[ldapConfig.group['writePerm']] = '!*';
 
         // Inscription des valeurs calculées par effet de bord
         if (!await Basics.change("group", gid, "add", vals2)) {
             throw "Erreur lors de l'ajout des valeurs intelligentes du nouveau groupe.";
         }
 
-        ["posixAccount", "posixGroup", "brAccount"].forEach(cst => {
+        ["posixGroup", "brGroup"].forEach(cst => {
             let vals3={};
             vals3[ldapConfig.group['classes']]=cst;
             Basics.change("group", gid, "add", vals3).then(res => {
diff --git a/src/ldap/export/user.ts b/src/ldap/export/user.ts
index d893b77..a36e587 100644
--- a/src/ldap/export/user.ts
+++ b/src/ldap/export/user.ts
@@ -109,9 +109,6 @@ export class User {
         // Certains champs nécessitent de petits calculs
         let vals3={};
 
-        // Création d'un nom complet lisible
-        vals3[ldapConfig.user['fullName']]=data['givenName']+' '+data['lastName'].toUpperCase();
-
         // ldapConfiguration du mot de passe utilisateur
         // Le préfixe {CRYPT} signifie que le mdp est hashé dans OpenLDAP voir : https://www.openldap.org/doc/admin24/security.html 
         vals3[ldapConfig.user['password']] = "{CRYPT}"+data['password'];
@@ -127,32 +124,16 @@ export class User {
         catch(err) {
             throw "Erreur lors de la génération d'un id numérique pour un nouvel utilisateur.";
         }
-        
-        // Stockage machine ; dépend du prénom
-        vals3[ldapConfig.user['directory']] = '/hosting/users/' + data['givenName'][0];
 
         // Code root
         vals3[ldapConfig.user['cleanFullName']]=data['fullName'].replace(':', ';').toLowerCase().normalize('UFD');
-        
-        // Adressage root
-        if (data['groups'].includes("on_platal")) { vals3[ldapConfig.user['login']] = "/bin/bash"; }
-        else  { vals3[ldapConfig.user['login']] = "/sbin/nologin"; }
-        
-        // Permissions BR
-        vals3[ldapConfig.user['readPerm']] = 'br.*,public.*';
-        if (data['readPerm'].length>0) { vals3[ldapConfig.user['readPerm']] += ',' + data['readPerm']; }
-        vals3[ldapConfig.user['writePerm']] = 'br.*,!br.blague-du-jour,public.*,!br.campagnekes';
-        if (data['writePerm'].length>0) { vals3[ldapConfig.user['readPerm']] += ',' + data['writePerm']; }
-
-        // Valeur nécessaire ASKIP mais inutile
-        vals3[ldapConfig.user['idNum']] ='5000';
 
         // Inscription des valeurs calculées
         if (!await Basics.change("user", uid, "add", vals3)) {
             throw "Erreur lors de l'ajout des valeurs calculées à la feuille du nouvel utilisateur.";
         }
 
-        ["posixAccount", "shadowAccount", "inetOrgPerson", "brAccount"].forEach(cst => {
+        ["posixAccount", "shadowAccount", "brUser"].forEach(cst => {
             let val3={};
             vals3[ldapConfig.user['class']]=cst;
             Basics.change("user", uid, "add", vals3).then(res => {
diff --git a/src/ldap/internal/config.ts b/src/ldap/internal/config.ts
index d836656..381fbc9 100644
--- a/src/ldap/internal/config.ts
+++ b/src/ldap/internal/config.ts
@@ -36,79 +36,74 @@ export const credentialsLdapConfig = JSON.parse(fs.readFileSync(path_credentials
 export const categories = ["admins","speakers","members","followers"];
 
 /**
- * @interface userData
+ * @class userData
  * @desc Interface avec toutes les données extractables pour un utilisateur.
  * @var {string?} uid - Identifiant utilisateur
- * TBA @var {string[]?} admins - Liste des gid (group id, inclus section sportive, binet, PA...) dont l'utilisateur est admin ; pas forcément sous-liste de groups
- * TBA @var {string[]?} speakers - Liste des gid dont l'utilisateur est porte-parole ; pas forcément sous-liste de groups
- * @var {string[]?} members - Liste des gid dont l'utilisateur est membre
- * TBA @var {string[]?} followers - Liste des gid dont l'utilisateur est sympathisant
+ * @var {string?} password - Mot de passe généré en amont (utilisé seulement à l'initialialisation, pas stocké bien sûr)
  * @var {string?} givenName - Prénom
  * @var {string?} lastName - Nom
  * @var {string?} nickname - Surnom
+ * @var {string?} gender - Sexe
  * @var {string?} photo - Bytestring de la photo de l'utilisateur
- * @var {string?} birthdate - Date d'anniversaire
- * TBA @var {string?} nationality - Nationalité d'origine
- * @var {string?} promotion - Année(s) de promo
  * @var {string?} phone - Numéro(s) de téléphone
  * @var {string[]} address - Adresse(s)
  * @var {string[]?} mail - Adresse(s) courriel
- * @var {string?} password - Mot de passe généré en amont (utilisé seulement à l'initialialisation, pas stocké bien sûr)
- * @var {string[]?} ips - Adresse(s) ip
- * @var {string?} directory - Adresse soft des données utilisateurs
- * @var {string?} login - Astuce de root flemmard
- * @arg {string?} readPerm - Permissions spéciales BR
- * @var {string?} writePerm - Permissions spéciales BR
- * @var {string[]?} forlifes - Alias BR (attention le filtre .fkz n'est plus fonctionnel)
+ * @var {string?} birthdate - Date d'anniversaire
+ * @var {string?} nationality - Nationalité d'origine
+ * @var {string[]?} admins - Liste des gid (group id, inclus section sportive, binet, PA...) dont l'utilisateur est admin ; pas forcément sous-liste de groups
+ * @var {string[]?} speakers - Liste des gid dont l'utilisateur est porte-parole ; pas forcément sous-liste de groups
+ * @var {string[]?} members - Liste des gid dont l'utilisateur est membre
+ * @var {string[]?} followers - Liste des gid dont l'utilisateur est sympathisant
  * @memberof LDAP
  */
 export class userData {
     uid?: string;
-    admins?: string[];
-    speakers?: string[];
-    members?: string[];
-    followers?: string[];
     password?: string;
     givenName?: string;
     lastName?: string;
     nickname?: string;
-    promotion?: string;
+    gender?: 'M'|'F';
     photo?: string;
-    birthdate?: string;
-    nationality?: string;
     phone?: string;
     address?: string;
     mail?: string;
-    ips?: string[];
-    directory?: string;
-    login?: string;
-    readPerm?: string;
-    writePerm?: string;
-    forlifes?: string[];
-    sport?: string;
+    birthdate?: string;
+    nationality?: string;
+    admins?: string[];
+    speakers?: string[];
+    members?: string[];
+    followers?: string[];
 }
 
 /**
- * @interface groupData
+ * @class groupData
  * @var {string} gid - Identifiant du groupe
+ * @var {string} password - Mot de passe du groupe
  * @var {string} name - Nom du groupe (souvent son nom mais pas nécessairement)
- * @var {string} type - Statut du groupe ; binet, section sportive... (actuellement juste 'binet' ou 'free')
- * @var {string[]} members - Liste des membres du groupe
- * @var {string[]} admins - Liste des admins du groupe ; supposée être une sous-liste de la précédente
- * @var {string} description - Description du groupe (facultatif)
+ * @var {string} logo - Logo du groupe (en bytestring)
+ * @var {string} description - Description du groupe (script Markdown)
+ * @var {string} site - Site web du groupe (URL)
+ * @var {string} category - Statut du groupe ; binet, section sportive... (actuellement juste 'binet' ou 'free')
  * @var {string[]} childs - Liste des groupes enfants de première génération de celui-ci (les admins du groupe seront admins de ce groupe et des enfants suivants)
  * @var {string[]} parents - Liste des groupes directement parents de celui-ci (les membres du groupe seront membres de ce groupe et des parents suivants) ; symétrique du précédent
+ * @var {string[]} admins - Liste des admins du groupe
+ * @var {string[]} speakers - Liste des porte-parole du groupe
+ * @var {string[]} members - Liste des membres du groupe
+ * @var {string[]} followers - Liste des sympathisants du groupe
  * @memberof LDAP
  */
 export class groupData {
     gid: string;
+    password?: string;
 	name: string;
-	type: string;
-    members: string[];
+	logo?: string;
+    description?: string;
+    site?: string;
+	category: string;
+    childs: string[];
+    parents: string[];
+    admins: string[];
     speakers: string[];
+    members: string[];
     followers: string[];
-    admins: string[];
-    description?: string;
-    childs?: string[];
-    parents?: string[];
 }
\ No newline at end of file
-- 
GitLab