develop dans master - première version stable #9
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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.
|
||||
|
||||
@@ -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_
|
||||
</select>
|
||||
<input type="hidden" name="page_origine" value="alias">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,4 +4,66 @@
|
||||
* Page centrale de gestion des paramètres d'un utilisateur et du portail lui-même.
|
||||
*/
|
||||
|
||||
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_
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="card mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Choix de l'adresse</h5>
|
||||
<form id="form_choix_utilisateur" action="/services/traitements/utilisateurs/changeUtilisateur.php" method="post">
|
||||
<select class="form-select" name="choix_utilisateur" onchange="autoSoumission(this);">
|
||||
_HEREDOC_;
|
||||
|
||||
/**
|
||||
* Remplis un menu déroulant permettant le choix de l'utilisateur par l'administrateur.
|
||||
* 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) {
|
||||
if ($utilisateur['utilisateur']==$_SESSION['pseudo_utilisateur']) {
|
||||
echo "<option value=\"".$utilisateur['utilisateur']."\" selected>".$utilisateur['utilisateur']."</option>\n";
|
||||
}
|
||||
elseif ($_SESSION['privilege_utilisateur']=="administrateur") {
|
||||
echo "<option value=\"".$utilisateur['utilisateur']."\">".$utilisateur['utilisateur']."</option>\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo <<<_HEREDOC_
|
||||
</select>
|
||||
<input type="hidden" name="page_origine" value="parametres">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
_HEREDOC_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changement du mot de passe d'un utilisateur.
|
||||
*/
|
||||
|
||||
?>
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="card mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Mot de passe</h5>
|
||||
<form action="/services/traitements/utilisateurs/changeMotDePasseUtilisateur.php" method="post">
|
||||
<div class="input-group">
|
||||
<?php if ($_SESSION['privilege_utilisateur']=="utilisateur") { echo '<input type="password" class="form-control" name="ancien_mot_de_passe" placeholder="Ancien mot de passe" required>'; } ?>
|
||||
<input type="password" class="form-control" name="nouveau_mot_de_passe" placeholder="Nouveau mot de passe" required>
|
||||
<input type="password" class="form-control" name="confirmation_mot_de_passe" placeholder="Confirmation mot de passe" required>
|
||||
<button class="btn btn-primary bouton-ajout" type="submit"><img src="/fichiers/svg/plus.svg"/></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Page de traitement permettant le changement du mot de passe d'un utilisateur.
|
||||
* Elle est appelée par la page de paramètres.
|
||||
* Un champ supplémentaire demandant l'ancien mot de passe est affiché et exigé sur cette derniere lorsque la requête provient d'un utilisateur ordinaire.
|
||||
*/
|
||||
|
||||
session_start();
|
||||
require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
|
||||
testPrivileges();
|
||||
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
|
||||
|
||||
if ($_SESSION['privilege_utilisateur']=="administrateur" && isset($_POST['nouveau_mot_de_passe']) && !empty($_POST['nouveau_mot_de_passe']) && isset($_POST['confirmation_mot_de_passe']) && !empty($_POST['confirmation_mot_de_passe'])) {
|
||||
if (changeMotDePasseUtilisateursPostfix($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['nouveau_mot_de_passe']),trim($_POST['confirmation_mot_de_passe']))) {
|
||||
header ("Location: /pages/gestion/administration.php?page=parametres&succes=16");
|
||||
die();
|
||||
}
|
||||
else {
|
||||
header ("Location: /pages/gestion/administration.php?page=parametres&erreur=21");
|
||||
die();
|
||||
}
|
||||
}
|
||||
elseif ($_SESSION['privilege_utilisateur']=="utilisateur" && isset($_POST['ancien_mot_de_passe']) && !empty($_POST['ancien_mot_de_passe']) && isset($_POST['nouveau_mot_de_passe']) && !empty($_POST['nouveau_mot_de_passe']) && isset($_POST['confirmation_mot_de_passe']) && !empty($_POST['confirmation_mot_de_passe'])) {
|
||||
if (verificationMotDePasse($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['ancien_mot_de_passe']))) {
|
||||
if (changeMotDePasseUtilisateursPostfix($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['nouveau_mot_de_passe']),trim($_POST['confirmation_mot_de_passe']))) {
|
||||
header ("Location: /pages/gestion/administration.php?page=parametres&succes=16");
|
||||
die();
|
||||
}
|
||||
else {
|
||||
header ("Location: /pages/gestion/administration.php?page=parametres&erreur=21");
|
||||
die();
|
||||
}
|
||||
}
|
||||
else {
|
||||
header ("Location: /pages/gestion/administration.php?page=parametres&erreur=20");
|
||||
die();
|
||||
}
|
||||
}
|
||||
else {
|
||||
header ("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");
|
||||
die();
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user