Files
Portfolio-Esteban/scripts/updatePresentationPin.php
T
2026-08-28 00:04:48 +02:00

52 lines
1.8 KiB
PHP

<?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;