Début du travail sur la page des paramètres : adaptation de la redirection du choix utilisateur + fonctionnalité de changement de mot de passe utilisateur

This commit is contained in:
ycharbi
2022-01-19 18:23:15 +01:00
parent 3da0a37443
commit 08535603f4
7 changed files with 200 additions and 12 deletions
+71
View File
@@ -23,4 +23,75 @@ function listeUtilisateursPostfix($pdo) {
}
}
/**
* Fonction vérifiant le mot de passe actuel d'un utilisateur.
*/
function verificationMotDePasse($pdo,$identifiant,$mdp) {
try {
$req = 'SELECT mot_de_passe FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
$sql = $pdo->prepare($req);
$sql->bindValue(':identifiant', $identifiant);
$sql->execute();
$result = $sql ->fetchAll(PDO::FETCH_ASSOC);
$comptage = count($result);
}
catch(PDOException $e) {
die ("Erreur lors du traitement de la requête : " . $e->getMessage());
}
if ($comptage == 1) {
$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]."$");
if ("$".$mot_de_passe_base[1]."$".$mot_de_passe_base[2]."$".$mot_de_passe_base[3]==$mot_de_passe_form) {
// Si le mot de passe renseigné n'est le bon, le visiteur est redirigé vers la page d'accueil avec un message explicatif
return true;
}
else {
return false;
}
}
else {
return false;
}
}
/**
* Fonction changeant le mot de passe d'un utilisateur.
*/
function changeMotDePasseUtilisateursPostfix($pdo,$identifiant,$nouveau_mdp,$confirmation_mdp) {
if ($nouveau_mdp===$confirmation_mdp) {
$caracters = '.0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$chaine_aleatoire = '';
// Génération d'un sel à 16 caractères
for ($i = 0; $i < 16; $i++) {
$index = rand(0, strlen($caracters) - 1);
$chaine_aleatoire .= $caracters[$index];
}
// Construction d'un mot de passe haché compatible avec Dovecot
$mot_de_passe_hachis='{SHA512-CRYPT}'.crypt(trim($nouveau_mdp),'$6$'.$chaine_aleatoire);
try {
$req = 'UPDATE postfix_utilisateurs SET mot_de_passe=:nouveau_mdp WHERE utilisateur=:identifiant';
$sql=$pdo->prepare($req);
$sql->bindValue(':identifiant', $identifiant);
$sql->bindValue(':nouveau_mdp', $mot_de_passe_hachis);
$sql->execute();
}
catch (\Exception $e) {
die ("Erreur de requête de selection des utilisateurs pour \"$base\" : ".$e->getMessage());
}
return true;
}
else {
return false;
}
}
?>
+5 -2
View File
@@ -31,7 +31,8 @@ function retourneMessage($type_message,$num_message) {
12 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire expéditeurs a été créée avec succès.</div>",
13 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'état de l'entrée de liste noire expéditeurs a été modifié avec succès.</div>",
14 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire expéditeurs a été supprimée avec succès.</div>",
15 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Vous avez bien été déconnecté.</div>"),
15 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Vous avez bien été déconnecté.</div>",
16 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Le mot de passe de $pseudo_utilisateur a bien été changé.</div>"),
"erreurs" => array(
1 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun alias virtuel supprimé.</div>",
2 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun alias virtuel créé car une donnée est erronée ou manquante.</div>",
@@ -51,7 +52,9 @@ function retourneMessage($type_message,$num_message) {
16 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'entrée de liste noire expéditeurs n'a pas été ajouté car elle est déjà existante.</div>",
17 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Identifiant ou mot de passe incorrecte.</div>",
18 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Vous n'avez pas les privilèges nécessaires.</div>",
19 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Erreur non gérée.</div>"),
19 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Erreur non gérée.</div>",
20 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'ancien mot de passe renseigné est erroné.</div>",
21 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Le mot de passe de confimation n'est pas identique au nouveau mot de passe.</div>"),
"messages" => array(
"bienvenue" => "<div class=\"alert alert-primary\" role=\"alert\"><img src=\"/fichiers/svg/info.svg\"/> Bienvenue ".$nom_utilisateur.". Vous êtes authentifié en tant qu'".$privilege_utilisateur.".</div>")
);
@@ -12,15 +12,15 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php")
* 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){
function validationIdentifiants($pdo,$identifiant,$mdp) {
try {
$req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
$prep = $pdo->prepare($req);
$prep->bindValue(':identifiant', $identifiant);
$prep->execute();
$sql = $pdo->prepare($req);
$sql->bindValue(':identifiant', $identifiant);
$sql->execute();
$result = $prep ->fetchAll(PDO::FETCH_ASSOC);
$result = $sql ->fetchAll(PDO::FETCH_ASSOC);
$comptage = count($result);
}
@@ -28,7 +28,7 @@ function validationIdentifiants($pdo,$identifiant,$mdp){
die ("Erreur lors du traitement de la requête : " . $e->getMessage());
}
if($comptage == 1){
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.