diff --git a/services/fonctions/bdd/utilisateurs.php b/services/fonctions/bdd/utilisateurs.php index b580507..c6da1ef 100644 --- a/services/fonctions/bdd/utilisateurs.php +++ b/services/fonctions/bdd/utilisateurs.php @@ -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; + } +} + ?> \ No newline at end of file diff --git a/services/fonctions/messages/messages.php b/services/fonctions/messages/messages.php index 4b5a27a..45f79c4 100644 --- a/services/fonctions/messages/messages.php +++ b/services/fonctions/messages/messages.php @@ -31,7 +31,8 @@ function retourneMessage($type_message,$num_message) { 12 => "
L'entrée de liste noire expéditeurs a été créée avec succès.
", 13 => "
L'état de l'entrée de liste noire expéditeurs a été modifié avec succès.
", 14 => "
L'entrée de liste noire expéditeurs a été supprimée avec succès.
", - 15 => "
Vous avez bien été déconnecté.
"), + 15 => "
Vous avez bien été déconnecté.
", + 16 => "
Le mot de passe de $pseudo_utilisateur a bien été changé.
"), "erreurs" => array( 1 => "
Aucun alias virtuel supprimé.
", 2 => "
Aucun alias virtuel créé car une donnée est erronée ou manquante.
", @@ -51,7 +52,9 @@ function retourneMessage($type_message,$num_message) { 16 => "
L'entrée de liste noire expéditeurs n'a pas été ajouté car elle est déjà existante.
", 17 => "
Identifiant ou mot de passe incorrecte.
", 18 => "
Vous n'avez pas les privilèges nécessaires.
", - 19 => "
Erreur non gérée.
"), + 19 => "
Erreur non gérée.
", + 20 => "
L'ancien mot de passe renseigné est erroné.
", + 21 => "
Le mot de passe de confimation n'est pas identique au nouveau mot de passe.
"), "messages" => array( "bienvenue" => "
Bienvenue ".$nom_utilisateur.". Vous êtes authentifié en tant qu'".$privilege_utilisateur.".
") ); diff --git a/services/fonctions/sessions/authentification.php b/services/fonctions/sessions/authentification.php index 9d562ef..bcdc3d3 100644 --- a/services/fonctions/sessions/authentification.php +++ b/services/fonctions/sessions/authentification.php @@ -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. diff --git a/services/gestion/alias_virtuels.php b/services/gestion/alias_virtuels.php index 6ccf833..2b64747 100644 --- a/services/gestion/alias_virtuels.php +++ b/services/gestion/alias_virtuels.php @@ -28,7 +28,7 @@ _HEREDOC_; /** * Remplis un menu déroulant permettant le choix de l'utilisateur par l'administrateur. - * Ce choix permettra de modifier les alias virtuels y étant rattachés. + * Ce choix permettra de modifier les données y étant rattachés. * La valeur par défaut du menu est positionnée sur le compte administrateur actuellement connecté. */ foreach ($liste_utilisateurs as $utilisateur_bdd => $utilisateur) { @@ -42,6 +42,7 @@ _HEREDOC_; echo <<<_HEREDOC_ + diff --git a/services/gestion/parametres.php b/services/gestion/parametres.php index 320a1ef..0c3571e 100644 --- a/services/gestion/parametres.php +++ b/services/gestion/parametres.php @@ -4,4 +4,66 @@ * Page centrale de gestion des paramètres d'un utilisateur et du portail lui-même. */ -?> \ No newline at end of file + require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php"); + + $liste_utilisateurs = listeUtilisateursPostfix($pdo); + +/** +* Affiche le formulaire de selection d'un utilisateur si celui connecté possède les privilèges administrateur. +*/ +if (testPrivileges()=="administrateur") { + echo <<<_HEREDOC_ +
+
+
+
+
Choix de l'adresse
+
+ + +
+
+
+
+_HEREDOC_; +} + +/** +* Changement du mot de passe d'un utilisateur. +*/ + +?> +
+
+
+
Mot de passe
+
+
+ '; } ?> + + + +
+
+
+
+
+
\ No newline at end of file diff --git a/services/traitements/utilisateurs/changeMotDePasseUtilisateur.php b/services/traitements/utilisateurs/changeMotDePasseUtilisateur.php new file mode 100644 index 0000000..a76b752 --- /dev/null +++ b/services/traitements/utilisateurs/changeMotDePasseUtilisateur.php @@ -0,0 +1,45 @@ + \ No newline at end of file diff --git a/services/traitements/utilisateurs/changeUtilisateur.php b/services/traitements/utilisateurs/changeUtilisateur.php index 239af60..f44ae27 100644 --- a/services/traitements/utilisateurs/changeUtilisateur.php +++ b/services/traitements/utilisateurs/changeUtilisateur.php @@ -11,8 +11,14 @@ require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges. if (testPrivileges()=="administrateur" && isset($_POST['choix_utilisateur']) && !empty($_POST['choix_utilisateur'])) { $_SESSION['pseudo_utilisateur'] = $_POST['choix_utilisateur']; - header ("Location: /pages/gestion/administration.php?page=alias&succes=4"); - die(); + if (isset($_POST['page_origine']) && !empty($_POST['page_origine'])) { + header ("Location: /pages/gestion/administration.php?page=".$_POST['page_origine']."&succes=4"); + die(); + } + else { + header ("Location: /pages/gestion/administration.php?page=accueil&succes=4"); + die(); + } } else { header ("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");