From 77823b9a4d405e59f1b7908a3275d9ef447f67b6 Mon Sep 17 00:00:00 2001 From: hawkspar <quentin.chevalier@polytechnique.edu> Date: Thu, 13 Sep 2018 22:51:59 +0200 Subject: [PATCH] POO --- src/ldap/admins.js | 20 +++++++++++++------- src/ldap/users.js | 14 +++++++++----- src/ldap/utilities.js | 10 +++++----- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/ldap/admins.js b/src/ldap/admins.js index f3badd0..7120ec1 100644 --- a/src/ldap/admins.js +++ b/src/ldap/admins.js @@ -9,6 +9,7 @@ import Tests from './utilities'; import User from './users'; // Essentiels pour le fichier de config import path from 'path'; +import bcrypt from 'bcrypt'; import fs from 'fs'; // Point central ; tous les champs de la BDD sont 'cachés' dans config.json et pas visibles directement @@ -276,7 +277,7 @@ class SuperAdmin extends Admin { * @arg {string} data[nickname] [] - Surnom * @arg {string} data[birthdate] - Date d'anniversaire au format annee-mois-jour * @arg {string} data[password] - Mot de passe - * @arg {string} data[promotion] - Simple année d'entrée école (pas d'X17) + * @arg {string} data[promotion] - Simple année d'entrée école (pas d'X) * @arg {string} data[mail] - Courriel supposé valide * @arg {string} data[phone] - String du numéro de portable * @arg {string} data[photo] - Photo jpeg directement en bytestring @@ -328,13 +329,18 @@ class SuperAdmin extends Admin { // Création d'un nom complet lisible vals3[config.user['fullName']]=data['givenName']+' '+data['lastName'].toUpperCase(); - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // TBM CA MARCHERA PB PAS - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - vals3[config.user['password']] = '{CRYPT}' + data['password']; + try { + // Génération d'un hash péchu avec 10 itérations de salt + bcrypt.hash(data['password'], 10, (err, hash) => { + vals3[config.user['password']] = "{CRYPT}"+hash; + }); + } + catch { + throw "Erreur lors de la génération d'un mot de passe aléatoire pour le nouvel utilisateur."; + } // Ecriture d'un surnom s'il y a lieu - if ((data['nickname']!=undefined)&&(data['nickname']!='')) { + if ((data['nickname']!=undefined) && (data['nickname']!='')) { vals3[config.user['nickname']]=data['nickname']; } try { @@ -361,7 +367,7 @@ class SuperAdmin extends Admin { vals3[config.user['writePerm']] = 'br.*,!br.blague-du-jour,public.*,!br.campagnekes'; if (data['writePerm'].length>0) { vals3[config.user['readPerm']] += ',' + data['writePerm']; } - // Valeur nécessaire mais inutile + // Valeur nécessaire ASKIP mais inutile vals3[config.user['idNum']] ='5000'; // Inscription des valeurs calculées diff --git a/src/ldap/users.js b/src/ldap/users.js index bc17727..33484de 100644 --- a/src/ldap/users.js +++ b/src/ldap/users.js @@ -261,7 +261,7 @@ class User extends Open { vals2[config.group["name"]]=data['name']; // ?! - vals2[config.user['password']] = ''; + vals2[config.user['password']] = ''; // Génération id aléatoire et test contre le LDAP try { @@ -321,11 +321,11 @@ class User extends Open { /** * @summary Fonction qui édite un utilisateur existant dans le LDAP. Très similaire à {@link creerUtilisateur} * @desc Appelle simplement {@link creerUtilisateur} et {@link supprimerUtilisateur} en godmode, plus {@link renseignerSurUtilisateur} pour les champs non fournis. - * Ce choix a pour conséquence que l'ordre du dictionnaire de correspondance dans ldap_config est important. A modifier car donne trop de pouvoir à l'utilisateur. + * Ce choix a pour conséquence que l'ordre du dictionnaire de correspondance dans ldap_config est important. Une version "nerfée" de cette fonction est envisageable ; elle donne bcp de pouvoir à l'utilisateur. * @arg {string} uid - Utilisateur à modifier (le plus souvent le même, mais root possible) * @arg {Object} data - Dictionnaire des informations utilisateurs au même format que pour {@link creerUtilisateur} avec tous les champs optionnels ; - * MEF ces valeurs vont écraser les précédentes. - * attention toutes les clés de cette entrée seront modifiées dans le LDAP + * Attention toutes les clés de cette entrée seront modifiées dans le LDAP ; les nouveaux résultats écrasant les précédents, sauf 'readPerm','writePerm','forlifes','ips','groups' et 'groupsIsAdmin' + * qui sont censurés pour cette fonction) * @return {Promise(boolean)} `true` si la modification s'est bien déroulée, false sinon * @async */ @@ -350,8 +350,12 @@ class User extends Open { }); // Surcharge des champs à modifier selon data Object.keys(data).forEach(key => { - profil[key]=data[key]; + // Some fields the user cannot change (groups and groupsIsAdmin must be changed through addGroupMember and addGroupAdmin in Admin) + if (!['readPerm','writePerm','forlifes','ips','groups','groupsIsAdmin'].includes(key)) { profil[key]=data[key]; } }); + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // TBM : rajouter god passwd. Moche mais bonne façon de faire + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // Passage en godmode var god = SuperAdmin({"uid":"", "password":""}); // Modification propre par effet de bord diff --git a/src/ldap/utilities.js b/src/ldap/utilities.js index 61d23c0..f5ab794 100644 --- a/src/ldap/utilities.js +++ b/src/ldap/utilities.js @@ -88,11 +88,11 @@ class SmartSearch { data[key].forEach(val => { // Traduction en language LDAP let attribute = config.user[key]; - // Creation du filtre étape par étape + // Creation incrémentale du filtre filter="(&"+filter+ "(|("+attribute+"="+ val+")"+ // On cherche la valeur exacte - "(|("+attribute+"=*"+val+")"+ // La valeur finale avec des trucs avant ; wildcard * (MEF la wildcart ne marche pas pour tous les attributs) - "(|("+attribute+"=*"+val+"*)"+ // La valeur du milieu avec des trucs avant et après - "("+ attribute+"="+ val+"*)))))"; // La valeur du début avec des trucs après + "(|("+attribute+"=*"+val+")"+ // La valeur finale avec des trucs avant ; wildcard * (MEF la wildcart ne marche pas pour tous les attributs) + "(|("+attribute+"=*"+val+"*)"+ // La valeur du milieu avec des trucs avant et après + "("+ attribute+"="+ val+"*)))))"; // La valeur du début avec des trucs après }); } } @@ -196,7 +196,7 @@ class Tests { */ static async generateId(attribut, dn) { try { - return this.ensureUnique("0", attribut, dn, (id,n) => { Math.floor((Math.random() * 100000) + 1).toString(); }); + return this.ensureUnique("0", attribut, dn, (id,n) => { return Math.floor((Math.random() * 100000) + 1).toString(); }); } catch { throw "Erreur lors de l'assurance de l'unicité d'un unique identifier numérique."; -- GitLab