52 lines
1.8 KiB
PHP
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;
|