Ajout mode présentation

This commit is contained in:
Esteban committed 2026-08-28 00:04:48 +02:00
1 parent 4862d61ccd
commit 08875d3b5a
18 files changed
+1781 -270

No files matched your search

+5 -2
View File
@@ -59,8 +59,11 @@ try {
// Log Discord : connexion réussie
sendLog("Connexion réussie", $user['username']);
//Redirection vers home.php puisque que l'utilisateur est forcément connecté
// Redirection après connexion : vers presentation.php si on vient de s'y faire bloquer
// (voir pages/login.php, seule valeur acceptée pour ne pas ouvrir une redirection
// arbitraire), vers home.php sinon
// (?login=1 déclenche la notification "Connexion réussie" sur la page)
header('Location: ./../pages/home.php?login=1');
$pageRetour = ($_POST['redirect'] ?? '') === 'presentation' ? 'presentation.php' : 'home.php';
header('Location: ./../pages/' . $pageRetour . '?login=1');
exit;
?>
+29
View File
@@ -0,0 +1,29 @@
<?php
// On démarre la session
require_once(__DIR__ . '/../functions/security.php');
// On ajoute la DB
require_once('../functions/databaseConnection.php');
// On ajoute les logs Discord
require_once('../functions/sendLogs.php');
// reinitialiserTentativesPresentation
require_once('../functions/presentationAuth.php');
// Si l'utilisateur n'est pas admin il ne peut pas executer le reste du script
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
header('Location: ../pages/home.php');
exit;
}
// Vérification du jeton CSRF : bloque les requêtes forgées depuis un autre site
requireCsrfToken();
$ipHash = $_GET['ip'] ?? '';
if ($ipHash !== '') {
reinitialiserTentativesPresentation($ipHash);
sendLog('Déblocage manuel du mode présentation pour une IP');
}
// On renvoie l'utilisateur sur admin.php, directement sur la section Mode présentation
header('Location: ../pages/admin.php#admin-presentation');
exit;
+51
View File
@@ -0,0 +1,51 @@
<?php
// On démarre la session
require_once(__DIR__ . '/../functions/security.php');
// On ajoute la DB
require_once('../functions/databaseConnection.php');
// On ajoute les logs Discord
require_once('../functions/sendLogs.php');
// PRESENTATION_PIN_LENGTH
require_once('../functions/presentationAuth.php');
// Si l'utilisateur n'est pas admin il ne peut pas executer le reste du script
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
header('Location: ../pages/home.php');
exit;
}
// Vérification du jeton CSRF : bloque les requêtes forgées depuis un autre site
requireCsrfToken();
// La requête doit être un POST sinon on l'a refuse
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: ../pages/admin.php');
exit;
}
$pin = trim($_POST['pin'] ?? '');
// Le code doit faire exactement 9 chiffres, rien d'autre : sinon on ignore la demande
// plutôt que d'enregistrer un code invalide (on ne veut jamais bloquer l'accès par erreur)
if (!preg_match('/^\d{' . PRESENTATION_PIN_LENGTH . '}$/', $pin)) {
header('Location: ../pages/admin.php#admin-presentation');
exit;
}
try {
// On ne stocke jamais le code en clair, seulement son hash (comme un mot de passe)
$stmt = $dbh->prepare('INSERT INTO settings (name, value) VALUES (:name, :value) ON DUPLICATE KEY UPDATE value = VALUES(value)');
$stmt->execute([
':name' => 'presentation_pin_hash',
':value' => password_hash($pin, PASSWORD_DEFAULT)
]);
} catch (PDOException $e) {
die("Erreur lors du changement du code PIN : " . $e->getMessage());
}
// Log Discord
sendLog('Changement du code PIN du mode présentation');
// On renvoie l'utilisateur sur admin.php, directement sur la section Mode présentation
header('Location: ../pages/admin.php#admin-presentation');
exit;
+8 -1
View File
@@ -39,6 +39,12 @@ if ($groupeReglages === 'captcha') {
'contact_address_line2' => trim($_POST['contact_address_line2'] ?? ''),
'contact_address_enabled' => isset($_POST['contact_address_enabled']) ? '1' : '0'
];
} elseif ($groupeReglages === 'presentation') {
// Le code PIN se change à part (voir scripts/updatePresentationPin.php) : il a
// besoin d'être haché, contrairement aux autres réglages stockés tels quels ici
$reglages = [
'presentation_markdown' => trim($_POST['presentation_markdown'] ?? '')
];
} else {
$reglages = [
'site_notice_title' => trim($_POST['notice_title'] ?? ''),
@@ -65,7 +71,8 @@ try { // On essaie d'executer une requête qui est préparée pour chaque régla
$libellesGroupes = [
'captcha' => 'Modification du réglage du captcha',
'contact' => 'Modification des coordonnées de contact',
'notice' => "Modification de la notification de la page d'accueil"
'notice' => "Modification de la notification de la page d'accueil",
'presentation' => 'Modification du contenu du mode présentation'
];
sendLog($libellesGroupes[$groupeReglages] ?? "Modification des réglages du site");