From 203dcaf4ee7e6ecc810083463a3d55119e1c3fdf Mon Sep 17 00:00:00 2001 From: ycharbi Date: Sat, 27 Aug 2022 13:47:13 +0200 Subject: [PATCH] =?UTF-8?q?Correction=20mineur=20du=20nom=20de=20la=20cons?= =?UTF-8?q?tante=20listedesentree=20+=20Ajout=20de=20commentaires=20=C3=A0?= =?UTF-8?q?=20but=20documentaire=20pour=20les=20fonctions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fichiers/js/formulaire.js | 20 +++++---- .../fonctions/sessions/authentification.php | 42 ++++++++++++------- .../utilisateurs/identification.php | 3 ++ 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/fichiers/js/formulaire.js b/fichiers/js/formulaire.js index 191acc4..50da1e6 100644 --- a/fichiers/js/formulaire.js +++ b/fichiers/js/formulaire.js @@ -1,18 +1,24 @@ -const listedesentree = []; +/* + * Page de fonctions JavaScript afférentes à l'affichage dynamique d'éléments. + **/ +/* + * Fonction permettant d'afficher et de masquer le bouton d'enregistrement d'un changement d'état pour les alias virtuels, domaines et entrées de liste noire d'un utilisateur. + **/ function activationBoutonFlotant(lui) { - if (listedesentree.find(function(valeur) {return valeur == lui.name;})) { - for( var i = 0; i < listedesentree.length; i++){ - if ( listedesentree[i] === lui.name) { - listedesentree.splice(i, 1); + const listedesentrees = []; + if (listedesentrees.find(function(valeur) {return valeur == lui.name;})) { + for( var i = 0; i < listedesentrees.length; i++){ + if ( listedesentrees[i] === lui.name) { + listedesentrees.splice(i, 1); break; } } } else { - listedesentree.push(lui.name); + listedesentrees.push(lui.name); }; - if (listedesentree.length > 0){ + if (listedesentrees.length > 0){ document.getElementById("enregistrer-interrupteur").classList.remove("desactiver"); document.getElementById("enregistrer-interrupteur").style.display = "block"; }else{ diff --git a/services/fonctions/sessions/authentification.php b/services/fonctions/sessions/authentification.php index 8333a53..6556c11 100644 --- a/services/fonctions/sessions/authentification.php +++ b/services/fonctions/sessions/authentification.php @@ -8,11 +8,11 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php") require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php"); /* -* Fonction d'authentification des utilisateurs. -* Elle récupère le couple identifiant/mot de passe renseigné par le visiteur sur la page d'accueil. -* Elle compare ces information avec la ligne correspondante dans la base de donnée (en prenant l'adresse de courriel comme sélecteur). -* Elle hache le mot de passe du formulaire et le compare à celui de l'entrée correspondante en base. -*/ + * Fonction d'authentification des utilisateurs. + * Elle récupère le couple identifiant/mot de passe renseigné par le visiteur sur la page d'accueil. + * Elle compare ces information avec la ligne correspondante dans la base de donnée (en prenant l'adresse de courriel comme sélecteur). + * Elle hache le mot de passe du formulaire et le compare à celui de l'entrée correspondante en base. + */ function validationIdentifiants($pdo,$identifiant,$mdp) { try { $req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant'; @@ -35,12 +35,12 @@ function validationIdentifiants($pdo,$identifiant,$mdp) { if ($comptage == 1) { - /** - * Les paramètres de la fonction crypt de $mot_de_passe_form sont composés du mot de passe issue du formulaire accueil ainsi que du sel. - * Les signes dollars sont des séparateurs. $mot_de_passe_base[1]=6=SHA512. $mot_de_passe_base[2]=au sel du mot de passe contenu dans la base. - * Les paramètres de sel sont issus du mot de passe haché contenu dans la base. - * L'opération de vérification s'adapte ainsi automatiquement aux algoritmes utilisés par Dovecot lors du hachage du mot de passe utilisateur. - */ + /* + * Les paramètres de la fonction crypt de $mot_de_passe_form sont composés du mot de passe issue du formulaire accueil ainsi que du sel. + * Les signes dollars sont des séparateurs. $mot_de_passe_base[1]=6=SHA512. $mot_de_passe_base[2]=au sel du mot de passe contenu dans la base. + * Les paramètres de sel sont issus du mot de passe haché contenu dans la base. + * L'opération de vérification s'adapte ainsi automatiquement aux algoritmes utilisés par Dovecot lors du hachage du mot de passe utilisateur. + */ $mot_de_passe_base=explode('$', $result['0']['mot_de_passe']); $mot_de_passe_form=crypt(trim("$mdp"), "$".$mot_de_passe_base[1]."$".$mot_de_passe_base[2]."$"); @@ -56,6 +56,10 @@ function validationIdentifiants($pdo,$identifiant,$mdp) { return false; } +/* + * Fonction d'initialisation des valeurs de session. + * Elle utilise les informations de l'utilisateur en base de données pour initialiser une session personnalisée. + */ function initValeursSession($result) { $_SESSION['id_utilisateur'] = $result[0]['id']; $_SESSION['pseudo_utilisateur'] = $result[0]['utilisateur']; @@ -64,18 +68,28 @@ function initValeursSession($result) { $_SESSION['pseudo_connexion_utilisateur'] = $result[0]['utilisateur']; } +/* + * Fonction de création d'un cookie de connexion automatique. + * Si la case "Se souvenir de moi" est cochée au formulaire de connexion, un cookie d'une durée d'un mois est créé. + */ function creerCookie($result) { $cookie_params = array ( 'expires' => time() + 60*60*24*30, 'path' => '/', 'domain' => $_SERVER['HTTP_HOST'], - 'secure' => false, // Mettre à true en prod (PENSER À LE FAIRE DANS deconnexion.php ET "Prolongement de la durée du cookie" AUSSI !) + 'secure' => false, // Mettre à true pour ne le créer qu'en HTTPS (le faire également dans "deconnexion.php" et au commentaire "Prolongement de la durée du cookie." plus bas). 'httponly' => true, 'samesite' => 'Strict' ); setcookie('souvenir-session', htmlspecialchars($_SESSION['pseudo_utilisateur']).'|--@--|'.hash('sha3-512', $result['0']['id'].$result['0']['utilisateur'].$result['0']['mot_de_passe']), $cookie_params); } +/* + * Fonction de validation du cookie de connexion automatique. + * Vérifie la légitimité du cookie de connexion de l'utilisateur via les informations en base de données. + * Si légitime, une session PHP est initialisée et le cookie est renouvelé pour un mois supplémentaire. + * Si non légitime, la fonction ne fait rien. Le comportement du site s'en remet alors à la seule existence d'une session PHP. + */ function validationCookie($pdo) { if (isset($_COOKIE['souvenir-session'])) { if (!isset($_SESSION['id_utilisateur'])) { @@ -89,7 +103,6 @@ function validationCookie($pdo) { $result = $sql ->fetchAll(PDO::FETCH_ASSOC); $comptage = count($result); - } catch(PDOException $e) { die ("Erreur lors du traitement de la requête : " . $e->getMessage()); @@ -110,12 +123,11 @@ function validationCookie($pdo) { else return false; } - // Prolongement de la durée du cookie + // Prolongement de la durée du cookie. setcookie('souvenir-session', $_COOKIE['souvenir-session'], ['expires' => time() + 60*60*24*30, 'path' => '/', 'domain' => $_SERVER['HTTP_HOST'], 'secure' => false, 'httponly' => true, 'samesite' => 'strict']); } else return false; - } ?> \ No newline at end of file diff --git a/services/traitements/utilisateurs/identification.php b/services/traitements/utilisateurs/identification.php index 9f765f3..702b889 100644 --- a/services/traitements/utilisateurs/identification.php +++ b/services/traitements/utilisateurs/identification.php @@ -27,6 +27,9 @@ if (isset($_POST['identifiant']) && isset($_POST['mdp']) && !empty($_POST['ident creerCookie($result); } + /** + * Définition des privilèges de l'utilisateur en fonction du paramètre spécifié dans la base de données. + */ if (isset($_SESSION['pseudo_utilisateur']) && !empty($_SESSION['pseudo_utilisateur']) && $_SESSION['privilege_utilisateur']==="administrateur") { header ("location: /pages/gestion/administration.php?message=bienvenue&page=accueil"); die();