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