diff --git a/public/script/changeData.js b/public/script/changeData.js index b270748..c9a3583 100644 --- a/public/script/changeData.js +++ b/public/script/changeData.js @@ -67,6 +67,15 @@ function editFieldPassWd(id) { var pElement = document.getElementById(id);// Récupérer l'élément

via son identifiant pElement.innerHTML = '';// Effacer le contenu actuel de

pour insérer les inputs + // Créer le champ de saisie pour le mot de passe à changer + var inputOldPass = document.createElement('input'); + inputOldPass.type = 'password'; + inputOldPass.placeholder = 'Mot de passe actuel'; // Un placeholder pour indiquer la fonction du champ + inputOldPass.classList.add('changeValue'); // Ajouter une classe CSS pour styliser l'input + inputOldPass.setAttribute('id', 'oldPassword'); // Ajouter un ID pour la gestion + inputOldPass.classList.add('inputPasswd'); // Ajouter une classe au input + inputOldPass.name='oldPasswd'; + // Créer le champ de saisie pour le nouveau mot de passe var inputNewPass = document.createElement('input'); inputNewPass.type = 'password'; @@ -92,11 +101,16 @@ function editFieldPassWd(id) { saveButton.classList.add('saveButtonPasswd'); // Ajouter une classe au bouton saveButton.type="submit"; - // Ajouter les deux champs de saisie et le bouton dans l'élément

+ // Ajouter les champs de saisie et le bouton dans l'élément

+ pElement.appendChild(inputOldPass); + pElement.appendChild(document.createElement('br')); // Saut de ligne pour espacer les champs + pElement.appendChild(inputNewPass); pElement.appendChild(document.createElement('br')); // Saut de ligne pour espacer les champs + pElement.appendChild(inputConfirmPass); pElement.appendChild(document.createElement('br')); // Saut de ligne pour espacer + pElement.appendChild(saveButton); inputNewPass.focus();// Mettre le focus sur le premier champ de saisie diff --git a/src/Controleur/UserControler.php b/src/Controleur/UserControler.php index b46c1af..7a65315 100644 --- a/src/Controleur/UserControler.php +++ b/src/Controleur/UserControler.php @@ -230,6 +230,7 @@ class UserControler { $newImage = $_POST['image'] ?? null; $newPseudo = $_POST['pseudo'] ?? null; $newEmail = $_POST['email'] ?? null; + $oldPasswd = $_POST['oldPasswd']?? null; $newMdpFirst = $_POST['passwdFirst'] ?? null; $newMdpSecond = $_POST['passwdSecond'] ?? null; @@ -260,16 +261,29 @@ class UserControler { //Modif le mot de passe else if($newMdpFirst && $newMdpSecond){ - if($newMdpFirst == $newMdpSecond){ - - $option = ['cost' => 12]; - $newPassWd = password_hash($newMdpFirst, PASSWORD_BCRYPT, $option); - $user = $this-> uMod->setPassWd($_SESSION['user'], $newPassWd); + if(!$oldPasswd){ + $_SESSION['error_message'] = "Veuillez taper votre ancien mot de passe"; + header("Location: ". $racine."/profil"); } - else{ - $_SESSION['error_message'] = "Les mots de passe ne correspondent pas"; + + else if(!$this->uMod->isPassWd($_SESSION['user'], $oldPasswd)){ + $_SESSION['error_message'] = "Votre ancien mot de passe est incorrect"; header("Location: ". $racine."/profil"); } + + else{ + if($newMdpFirst == $newMdpSecond){ + + $option = ['cost' => 12]; + $newPassWd = password_hash($newMdpFirst, PASSWORD_BCRYPT, $option); + $user = $this-> uMod->setPassWd($_SESSION['user'], $newPassWd); + } + else{ + $_SESSION['error_message'] = "Les mots de passe ne correspondent pas"; + header("Location: ". $racine."/profil"); + } + } + } //Modif l'image diff --git a/src/Gateway/UserGateway.php b/src/Gateway/UserGateway.php index 450feb0..5a09f2d 100644 --- a/src/Gateway/UserGateway.php +++ b/src/Gateway/UserGateway.php @@ -89,6 +89,9 @@ Class UserGateway extends Gateway{ return $this->co->getResults(); } + + // ===================== CHECK FUNCTION ===================== + public function IsExisteUsername(string $username): bool { $query = 'SELECT COUNT(*) as count FROM Users WHERE username = :username'; $this->co->executeQuery($query, array(':username' => array($username, PDO::PARAM_STR))); @@ -105,6 +108,16 @@ Class UserGateway extends Gateway{ return $results[0]['count'] > 0; // retourne true si "count" > 0) } + public function getPasswordHash(string $username): ?string { + $query = 'SELECT password FROM Users WHERE username = :username'; + $this->co->executeQuery($query, array(':username' => array($username, PDO::PARAM_STR))); + $results = $this->co->getResults(); + + // Si un utilisateur est trouvé, retourner le hash du mot de passe, sinon null + return $results ? $results[0]['password'] : null; + } + + // ===================== UPDATE FUNCTION ===================== //Update Username diff --git a/src/Model/UserModel.php b/src/Model/UserModel.php index a133370..ff1ec60 100644 --- a/src/Model/UserModel.php +++ b/src/Model/UserModel.php @@ -84,6 +84,13 @@ return $this->gateway->IsExisteEmail($email); } + public function isPassWd(string $username, string $passWd): bool { + $hash = $this->gateway->getPasswordHash($username); + + return $hash !== null && password_verify($passWd, $hash); + } + + public function setUsername(string $username, string $newUsername): string { @@ -128,7 +135,6 @@ } - public function isFavorite(?string $username, int $idq): bool { if($_SESSION["user"] == NULL){ return false;