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

+149 -126
View File
@@ -4,6 +4,9 @@ require_once(__DIR__ . '/functions/security.php');
// Ajout des logs Discord (chemin via __DIR__ car captcha.php est à la racine du site)
require_once(__DIR__ . '/functions/sendLogs.php');
// Versionnement des fichiers statiques (casse le cache navigateur à chaque modif du CSS)
require_once(__DIR__ . '/functions/assets.php');
// Recharger une nouvelle série si demandé
if (isset($_GET['reload']) && $_GET['reload'] === '1') {
unset($_SESSION['captcha_round']);
@@ -408,153 +411,173 @@ $attemptsLeft = $round['attempts_left'] ?? 0;
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
<link rel="stylesheet" href="./styles/captcha.css">
<link rel="stylesheet" href="<?php echo htmlspecialchars(urlAsset('styles/captcha.css', './')); ?>">
</head>
<body class="<?php echo $success ? 'success-mode' : ''; ?>">
<main class="captcha-shell">
<?php if ($success): ?>
<section class="success-screen">
<div class="success-burst"></div>
<div class="success-icon">✅</div>
<h1>Vérification réussie</h1>
<p>Bravo, tu as repéré le(s) mail(s) frauduleux. Redirection en cours...</p>
<?php
// Deux écrans possibles : la réussite (avec redirection automatique), ou le test lui-même.
if ($success) {
<?php if (!empty($foundReasons)): ?>
<div class="success-reasons">
<p class="success-reasons-title">Ce que tu as repéré :</p>
<ul>
<?php foreach ($foundReasons as $reason): ?>
<li><i class="reason-dot"></i><?php echo htmlspecialchars($reason, ENT_QUOTES, 'UTF-8'); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
// --- Écran de réussite ---
echo <<<'HTML'
<section class="success-screen">
<div class="success-burst"></div>
<div class="success-icon">✅</div>
<h1>Vérification réussie</h1>
<p>Bravo, tu as repéré le(s) mail(s) frauduleux. Redirection en cours...</p>
HTML;
<div class="success-loader">
<span></span>
</div>
</section>
// Rappel de ce que le visiteur a correctement identifié, s'il y a quelque chose à dire
if (!empty($foundReasons)) {
echo '<div class="success-reasons">';
echo '<p class="success-reasons-title">Ce que tu as repéré :</p>';
echo '<ul>';
<script>
setTimeout(function () {
window.location.href = './index.php';
}, 2400);
</script>
<?php else: ?>
<form class="captcha-card" method="post" action="">
<div class="captcha-badge">🛡️ Test anti-robot</div>
foreach ($foundReasons as $reason) {
echo '<li><i class="reason-dot"></i>' . htmlspecialchars($reason, ENT_QUOTES, 'UTF-8') . '</li>';
}
<div class="captcha-top">
<div>
<h1 class="captcha-title">Vérification humaine</h1>
<p class="captcha-subtitle">
Sélectionne <strong>tous les emails qui te semblent frauduleux</strong> parmi les messages
ci-dessous. Certains sont plus dangereux que d'autres.
</p>
</div>
echo '</ul>';
echo '</div>';
}
<div class="captcha-target">
<span>Vérification demandée</span>
<strong>Repérer le phishing</strong>
</div>
</div>
echo <<<'HTML'
<div class="success-loader">
<span></span>
</div>
</section>
<div class="captcha-stats">
<div class="captcha-attempts">
<span>Essais restants</span>
<strong><?php echo htmlspecialchars((string) $attemptsLeft, ENT_QUOTES, 'UTF-8'); ?> / <?php echo htmlspecialchars((string) $maxAttempts, ENT_QUOTES, 'UTF-8'); ?></strong>
<div class="attempts-dots">
<?php for ($i = 0; $i < $maxAttempts; $i++): ?>
<span class="<?php echo $i < $attemptsLeft ? 'dot-filled' : 'dot-empty'; ?>"></span>
<?php endfor; ?>
</div>
</div>
<script>
setTimeout(function () {
window.location.href = './index.php';
}, 2400);
</script>
HTML;
<?php if ($locked): ?>
<a class="captcha-reset" href="./captcha.php?reload=1">Recharger une nouvelle série</a>
<?php endif; ?>
</div>
} else {
<?php if ($error !== ''): ?>
<div class="captcha-error"><?php echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?></div>
<?php endif; ?>
// --- Écran du test ---
echo <<<'HTML'
<form class="captcha-card" method="post" action="">
<div class="captcha-badge">🛡️ Test anti-robot</div>
<div class="mailbox">
<div class="mailbox-toolbar">
<div class="mailbox-dots">
<span></span>
<span></span>
<span></span>
</div>
<div class="mailbox-label">Test anti-robot : cochez les mails qui ressemblent à une arnaque</div>
</div>
<div class="captcha-top">
<div>
<h1 class="captcha-title">Vérification humaine</h1>
<p class="captcha-subtitle">
Sélectionne <strong>tous les emails qui te semblent frauduleux</strong> parmi les messages
ci-dessous. Certains sont plus dangereux que d'autres.
</p>
</div>
<div class="mail-list">
<?php foreach ($round['emails'] as $index => $mail): ?>
<label class="mail-option <?php echo $locked ? 'mail-option-disabled' : ''; ?>" style="--mail-index: <?php echo (int) $index; ?>">
<input
type="checkbox"
name="selected_mails[]"
value="<?php echo htmlspecialchars($mail['id'], ENT_QUOTES, 'UTF-8'); ?>"
<?php echo $locked ? 'disabled' : ''; ?>
>
<span class="mail-row">
<span class="mail-check"><i class="fa-solid fa-check"></i></span>
<div class="captcha-target">
<span>Vérification demandée</span>
<strong>Repérer le phishing</strong>
</div>
</div>
<span class="mail-avatar">
<?php echo htmlspecialchars(firstLetterSafe($mail['sender']), ENT_QUOTES, 'UTF-8'); ?>
</span>
<div class="captcha-stats">
<div class="captcha-attempts">
<span>Essais restants</span>
HTML;
<span class="mail-sender">
<?php echo htmlspecialchars($mail['sender'], ENT_QUOTES, 'UTF-8'); ?>
</span>
// Compteur d'essais restants
echo '<strong>' . htmlspecialchars((string) $attemptsLeft, ENT_QUOTES, 'UTF-8')
. ' / ' . htmlspecialchars((string) $maxAttempts, ENT_QUOTES, 'UTF-8') . '</strong>';
<span class="mail-content">
<span class="mail-subject">
<?php echo htmlspecialchars($mail['subject'], ENT_QUOTES, 'UTF-8'); ?>
</span>
<span class="mail-preview">
<?php echo htmlspecialchars($mail['preview'], ENT_QUOTES, 'UTF-8'); ?>
</span>
</span>
// Une pastille par essai : pleine tant qu'il reste des essais, vide ensuite
echo '<div class="attempts-dots">';
<span class="mail-time">
<?php echo htmlspecialchars($mail['time'], ENT_QUOTES, 'UTF-8'); ?>
</span>
</span>
</label>
<?php endforeach; ?>
</div>
</div>
for ($i = 0; $i < $maxAttempts; $i++) {
echo '<span class="' . ($i < $attemptsLeft ? 'dot-filled' : 'dot-empty') . '"></span>';
}
<input
type="hidden"
name="captcha_token"
value="<?php echo htmlspecialchars($round['token'], ENT_QUOTES, 'UTF-8'); ?>"
>
echo '</div>';
echo '</div>';
<!-- Champ piège (honeypot) : invisible et exclu du tabulateur pour un humain,
mais souvent rempli automatiquement par les robots qui remplissent tout -->
<div class="captcha-honeypot" aria-hidden="true">
<label for="website">Laisse ce champ vide</label>
<input type="text" id="website" name="website" tabindex="-1" autocomplete="off">
</div>
// Plus d'essais disponibles : on propose une nouvelle série de mails
if ($locked) {
echo '<a class="captcha-reset" href="./captcha.php?reload=1">Recharger une nouvelle série</a>';
}
<div class="captcha-footer">
<p class="captcha-note">
Tu as plusieurs essais. Les faux mails utilisent souvent l’urgence, les cadeaux improbables, les menaces ou les demandes de mot de passe.
</p>
echo '</div>';
<div class="captcha-actions">
<?php if ($locked): ?>
<a class="captcha-secondary-button" href="./captcha.php?reload=1">Nouvelle série</a>
<?php else: ?>
<button type="submit" class="captcha-submit">Valider ma sélection</button>
<?php endif; ?>
</div>
</div>
</form>
<?php endif; ?>
// Message d'erreur du dernier essai raté
if ($error !== '') {
echo '<div class="captcha-error">' . htmlspecialchars($error, ENT_QUOTES, 'UTF-8') . '</div>';
}
echo <<<'HTML'
<div class="mailbox">
<div class="mailbox-toolbar">
<div class="mailbox-dots">
<span></span>
<span></span>
<span></span>
</div>
<div class="mailbox-label">Test anti-robot : cochez les mails qui ressemblent à une arnaque</div>
</div>
<div class="mail-list">
HTML;
// Un bloc "mail" cliquable par message de la série tirée au sort
foreach ($round['emails'] as $index => $mail) {
$desactive = $locked ? 'disabled' : '';
$classeOption = $locked ? 'mail-option mail-option-disabled' : 'mail-option ';
echo '<label class="' . $classeOption . '" style="--mail-index: ' . (int) $index . '">';
echo '<input type="checkbox" name="selected_mails[]" value="'
. htmlspecialchars($mail['id'], ENT_QUOTES, 'UTF-8') . '" ' . $desactive . '>';
echo '<span class="mail-row">';
echo '<span class="mail-check"><i class="fa-solid fa-check"></i></span>';
echo '<span class="mail-avatar">' . htmlspecialchars(firstLetterSafe($mail['sender']), ENT_QUOTES, 'UTF-8') . '</span>';
echo '<span class="mail-sender">' . htmlspecialchars($mail['sender'], ENT_QUOTES, 'UTF-8') . '</span>';
echo '<span class="mail-content">';
echo '<span class="mail-subject">' . htmlspecialchars($mail['subject'], ENT_QUOTES, 'UTF-8') . '</span>';
echo '<span class="mail-preview">' . htmlspecialchars($mail['preview'], ENT_QUOTES, 'UTF-8') . '</span>';
echo '</span>';
echo '<span class="mail-time">' . htmlspecialchars($mail['time'], ENT_QUOTES, 'UTF-8') . '</span>';
echo '</span>';
echo '</label>';
}
echo '</div>';
echo '</div>';
// Jeton de la série en cours : permet de vérifier les réponses côté serveur
echo '<input type="hidden" name="captcha_token" value="'
. htmlspecialchars($round['token'], ENT_QUOTES, 'UTF-8') . '">';
// Champ piège (honeypot) : invisible et exclu du tabulateur pour un humain,
// mais souvent rempli automatiquement par les robots qui remplissent tout
echo <<<'HTML'
<div class="captcha-honeypot" aria-hidden="true">
<label for="website">Laisse ce champ vide</label>
<input type="text" id="website" name="website" tabindex="-1" autocomplete="off">
</div>
<div class="captcha-footer">
<p class="captcha-note">
Tu as plusieurs essais. Les faux mails utilisent souvent l’urgence, les cadeaux improbables, les menaces ou les demandes de mot de passe.
</p>
<div class="captcha-actions">
HTML;
// Bouton de validation, remplacé par un lien de relance quand les essais sont épuisés
if ($locked) {
echo '<a class="captcha-secondary-button" href="./captcha.php?reload=1">Nouvelle série</a>';
} else {
echo '<button type="submit" class="captcha-submit">Valider ma sélection</button>';
}
echo '</div>';
echo '</div>';
echo '</form>';
}
?>
</main>
</body>
</html>