ajout de l'option pour changer le mdp admin
This commit is contained in:
parent
c8979f93d9
commit
06d3760a39
@ -43,6 +43,7 @@ include '../includes/header.php';
|
||||
<a href="#announcementsSection" class="list-group-item list-group-item-action active" id="announcementsTab">Annonces</a>
|
||||
<a href="#monstersSection" class="list-group-item list-group-item-action" id="monstersTab">Monstres</a>
|
||||
<a href="#maintenanceSection" class="list-group-item list-group-item-action" id="maintenanceTab">Maintenance</a>
|
||||
<a href="#passwordSection" class="list-group-item list-group-item-action" id="passwordTab">Mot de passe</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
@ -285,6 +286,37 @@ include '../includes/header.php';
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Section de changement de mot de passe -->
|
||||
<div id="passwordSection" class="admin-section d-none">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h2 class="h4 mb-0">Changer le mot de passe</h2>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form id="changePasswordForm">
|
||||
<input type="hidden" name="csrf_token" value="<?php echo generate_csrf_token(); ?>">
|
||||
<div class="mb-3">
|
||||
<label for="currentPassword" class="form-label">Mot de passe actuel</label>
|
||||
<input type="password" class="form-control" id="currentPassword" name="currentPassword" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="newPassword" class="form-label">Nouveau mot de passe</label>
|
||||
<input type="password" class="form-control" id="newPassword" name="newPassword" required minlength="8">
|
||||
<div class="form-text">Le mot de passe doit contenir au moins 8 caractères.</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="confirmPassword" class="form-label">Confirmer le nouveau mot de passe</label>
|
||||
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" required>
|
||||
</div>
|
||||
<div class="d-grid">
|
||||
<button type="submit" class="btn btn-primary">Changer le mot de passe</button>
|
||||
</div>
|
||||
</form>
|
||||
<div id="passwordResult" class="alert mt-3 d-none"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// Inclure le pied de page
|
||||
include '../includes/footer.php';
|
38
api.php
38
api.php
@ -309,6 +309,44 @@ if ($method === 'GET') {
|
||||
|
||||
default:
|
||||
send_json_response(['success' => 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
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user