diff --git a/admin/index.php b/admin/index.php
index 9955f67..8c9387b 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -43,6 +43,7 @@ include '../includes/header.php';
AnnoncesMonstresMaintenance
+ Mot de passe
@@ -285,6 +286,37 @@ include '../includes/header.php';
+
+
+
+
+
Changer le mot de passe
+
+
+
+
+
+
+
+
false, 'message' => 'Action non reconnue'], 400);
+
+ case 'updatePassword':
+ // Vérifier l'authentification
+ if (!is_logged_in()) {
+ send_json_response(['success' => false, 'message' => 'Authentification requise'], 401);
+ }
+
+ // Vérifier les données requises
+ if (!isset($post_data['currentPassword']) || !isset($post_data['newPassword']) || !isset($post_data['confirmPassword'])) {
+ send_json_response(['success' => false, 'message' => 'Données manquantes'], 400);
+ }
+
+ $current_password = $post_data['currentPassword'];
+ $new_password = $post_data['newPassword'];
+ $confirm_password = $post_data['confirmPassword'];
+
+ // Vérifier que les mots de passe correspondent
+ if ($new_password !== $confirm_password) {
+ send_json_response(['success' => false, 'message' => 'Les nouveaux mots de passe ne correspondent pas'], 400);
+ }
+
+ // Vérifier la longueur du mot de passe
+ if (strlen($new_password) < 8) {
+ send_json_response(['success' => false, 'message' => 'Le nouveau mot de passe doit contenir au moins 8 caractères'], 400);
+ }
+
+ // Vérifier le mot de passe actuel
+ if (!verify_current_password('admin', $current_password)) {
+ send_json_response(['success' => false, 'message' => 'Mot de passe actuel incorrect'], 400);
+ }
+
+ // Mettre à jour le mot de passe
+ if (update_user_password('admin', $new_password)) {
+ send_json_response(['success' => true, 'message' => 'Mot de passe mis à jour avec succès']);
+ } else {
+ send_json_response(['success' => false, 'message' => 'Erreur lors de la mise à jour du mot de passe'], 500);
+ }
+ break;
}
} else {
// Méthode HTTP non autorisée
diff --git a/assets/js/admin.js b/assets/js/admin.js
index 377d62a..701089c 100644
--- a/assets/js/admin.js
+++ b/assets/js/admin.js
@@ -131,6 +131,88 @@ document.addEventListener('DOMContentLoaded', () => {
}
});
+// Changement du mot de passe admin
+// Éléments DOM pour le changement de mot de passe
+const passwordTab = document.getElementById('passwordTab');
+const changePasswordForm = document.getElementById('changePasswordForm');
+const passwordResult = document.getElementById('passwordResult');
+
+// Événements pour l'onglet mot de passe
+if (passwordTab) {
+ passwordTab.addEventListener('click', (e) => {
+ e.preventDefault();
+ showSection('passwordSection');
+ });
+}
+
+// Gestion du formulaire de changement de mot de passe
+if (changePasswordForm) {
+ changePasswordForm.addEventListener('submit', function(e) {
+ e.preventDefault();
+
+ const currentPassword = document.getElementById('currentPassword').value;
+ const newPassword = document.getElementById('newPassword').value;
+ const confirmPassword = document.getElementById('confirmPassword').value;
+
+ // Vérifier que les mots de passe correspondent
+ if (newPassword !== confirmPassword) {
+ showPasswordResult('Les nouveaux mots de passe ne correspondent pas.', false);
+ return;
+ }
+
+ // Vérifier la longueur du mot de passe
+ if (newPassword.length < 8) {
+ showPasswordResult('Le nouveau mot de passe doit contenir au moins 8 caractères.', false);
+ return;
+ }
+
+ // Préparer les données
+ const formData = new FormData();
+ formData.append('currentPassword', currentPassword);
+ formData.append('newPassword', newPassword);
+ formData.append('confirmPassword', confirmPassword);
+ formData.append('csrf_token', document.querySelector('input[name="csrf_token"]').value);
+
+ // Envoyer la requête
+ fetch('../api.php?action=updatePassword', {
+ method: 'POST',
+ body: formData
+ })
+ .then(response => response.json())
+ .then(data => {
+ if (data.success) {
+ showPasswordResult(data.message, true);
+ changePasswordForm.reset();
+ } else {
+ showPasswordResult(data.message, false);
+ }
+ })
+ .catch(error => {
+ console.error('Erreur:', error);
+ showPasswordResult('Erreur de connexion. Veuillez réessayer.', false);
+ });
+ });
+}
+
+/**
+ * Afficher le résultat du changement de mot de passe
+ *
+ * @param {string} message Message à afficher
+ * @param {boolean} success Succès ou échec
+ */
+function showPasswordResult(message, success) {
+ passwordResult.textContent = message;
+ passwordResult.classList.remove('d-none', 'alert-success', 'alert-danger');
+ passwordResult.classList.add(success ? 'alert-success' : 'alert-danger');
+
+ // Masquer le message après quelques secondes si c'est un succès
+ if (success) {
+ setTimeout(() => {
+ passwordResult.classList.add('d-none');
+ }, 5000);
+ }
+}
+
/**
* Fonctions pour la navigation entre les sections
*
diff --git a/includes/database.php b/includes/database.php
index 40ebe59..84f50a2 100644
--- a/includes/database.php
+++ b/includes/database.php
@@ -366,5 +366,48 @@ function check_login($username, $password) {
return true;
}
+ return false;
+}
+
+/**
+ * Mettre à jour le mot de passe d'un utilisateur
+ *
+ * @param string $username Nom d'utilisateur
+ * @param string $new_password Nouveau mot de passe
+ * @return bool Succès de la mise à jour
+ */
+function update_user_password($username, $new_password) {
+ $db = get_db_connection();
+
+ // Hacher le nouveau mot de passe
+ $hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
+
+ $stmt = $db->prepare('UPDATE users SET password = :password WHERE username = :username');
+ $stmt->bindParam(':username', $username);
+ $stmt->bindParam(':password', $hashed_password);
+
+ return $stmt->execute();
+}
+
+/**
+ * Vérifier le mot de passe actuel d'un utilisateur
+ *
+ * @param string $username Nom d'utilisateur
+ * @param string $current_password Mot de passe actuel
+ * @return bool Le mot de passe est-il valide
+ */
+function verify_current_password($username, $current_password) {
+ $db = get_db_connection();
+
+ $stmt = $db->prepare('SELECT password FROM users WHERE username = :username');
+ $stmt->bindParam(':username', $username);
+ $stmt->execute();
+
+ $user = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ if ($user && password_verify($current_password, $user['password'])) {
+ return true;
+ }
+
return false;
}
\ No newline at end of file