add gitignore, remove sensitive files
@@ -0,0 +1,23 @@
|
|||||||
|
# Symlinks vers le système
|
||||||
|
binpkg
|
||||||
|
status/qt-temp
|
||||||
|
|
||||||
|
# Fichiers sensibles
|
||||||
|
.env
|
||||||
|
secret/
|
||||||
|
|
||||||
|
# Médias lourds (pas utile à versionner)
|
||||||
|
data/fond/
|
||||||
|
data/media/
|
||||||
|
|
||||||
|
# Fichiers Flash compressés et wasm (binaires lourds)
|
||||||
|
fun/ruffle/*.wasm
|
||||||
|
fun/ruffle/*.zip
|
||||||
|
fun/ruffle/*.map
|
||||||
|
|
||||||
|
# Backups
|
||||||
|
*.backup
|
||||||
|
*.bak
|
||||||
|
|
||||||
|
# Fichiers temporaires
|
||||||
|
data/a.txt
|
||||||
|
Before Width: | Height: | Size: 612 KiB |
|
Before Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 196 KiB |
|
Before Width: | Height: | Size: 241 KiB |
|
Before Width: | Height: | Size: 18 KiB |
@@ -1,224 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<!-- (used for SSR) -->
|
|
||||||
|
|
||||||
<meta name="description" content="1 shared photos & videos" />
|
|
||||||
|
|
||||||
<!-- Facebook Meta Tags -->
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:title" content="Public Share" />
|
|
||||||
<meta property="og:description" content="1 shared photos & videos" />
|
|
||||||
<meta property="og:image" content="https://immich.nix.roulaise.net/api/assets/c9f559b2-e6e7-4c25-b82c-2311833755c9/thumbnail?key=e6xKBo19ZjbUGxU_h_vv4nBEwS_XWdW9UN5OTHQ5C4Q_rTqltVgwLXUiwd98tY3Iofs" />
|
|
||||||
|
|
||||||
<!-- Twitter Meta Tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta name="twitter:title" content="Public Share" />
|
|
||||||
<meta name="twitter:description" content="1 shared photos & videos" />
|
|
||||||
|
|
||||||
<meta name="twitter:image" content="https://immich.nix.roulaise.net/api/assets/c9f559b2-e6e7-4c25-b82c-2311833755c9/thumbnail?key=e6xKBo19ZjbUGxU_h_vv4nBEwS_XWdW9UN5OTHQ5C4Q_rTqltVgwLXUiwd98tY3Iofs" />
|
|
||||||
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
|
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png" />
|
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png" />
|
|
||||||
<link rel="icon" type="image/png" sizes="48x48" href="/favicon-48.png" />
|
|
||||||
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96.png" />
|
|
||||||
<link rel="icon" type="image/png" sizes="144x144" href="/favicon-144.png" />
|
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180.png" />
|
|
||||||
<link rel="preload" as="font" type="font/ttf" href="/_app/immutable/assets/GoogleSans.DGRbB7N7.ttf" crossorigin="anonymous" />
|
|
||||||
<link rel="preload" as="font" type="font/ttf" href="/_app/immutable/assets/GoogleSansCode.a41q3NA0.ttf" crossorigin="anonymous" />
|
|
||||||
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/entry/start.RpA_pNyV.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/DlDBckNA.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/CSizKli0.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/yCQ_fqx4.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/DIeogL5L.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/94Xz9ZHe.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/BUApaBEI.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/entry/app.CepPnjFj.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/BOCziLuX.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/BP6NvnZ7.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/7tRQeUtl.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/CSfvng8n.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/DsnmJJEf.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/BzhrqIL4.js">
|
|
||||||
<link rel="modulepreload" href="/_app/immutable/chunks/DpNthyPY.js">
|
|
||||||
<link rel="modulepreload" href="/_app/env.js">
|
|
||||||
<style>
|
|
||||||
/* prevent FOUC */
|
|
||||||
html {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
body,
|
|
||||||
html {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes delayedVisibility {
|
|
||||||
to {
|
|
||||||
visibility: visible;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes loadspin {
|
|
||||||
100% {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#stencil {
|
|
||||||
--stencil-width: 150px;
|
|
||||||
display: flex;
|
|
||||||
width: var(--stencil-width);
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
margin-top: calc(50vh - var(--stencil-width) / 2);
|
|
||||||
margin-bottom: 100vh;
|
|
||||||
place-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
overflow: hidden;
|
|
||||||
visibility: hidden;
|
|
||||||
animation:
|
|
||||||
0s linear 0.3s forwards delayedVisibility,
|
|
||||||
loadspin 8s linear infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-immich-bg {
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .dark\:bg-immich-dark-bg {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<script>
|
|
||||||
/**
|
|
||||||
* Prevent FOUC on page load.
|
|
||||||
*/
|
|
||||||
const colorThemeKeyName = 'color-theme';
|
|
||||||
|
|
||||||
let theme = localStorage.getItem(colorThemeKeyName);
|
|
||||||
if (!theme) {
|
|
||||||
theme = { value: 'light', system: true };
|
|
||||||
} else if (theme === 'dark' || theme === 'light') {
|
|
||||||
theme = { value: theme, system: false };
|
|
||||||
localStorage.setItem(colorThemeKeyName, JSON.stringify(theme));
|
|
||||||
} else {
|
|
||||||
theme = JSON.parse(theme);
|
|
||||||
}
|
|
||||||
|
|
||||||
let themeValue = theme.value;
|
|
||||||
if (theme.system) {
|
|
||||||
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
||||||
themeValue = 'dark';
|
|
||||||
} else {
|
|
||||||
themeValue = 'light';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (themeValue === 'light') {
|
|
||||||
document.documentElement.classList.remove('dark');
|
|
||||||
} else {
|
|
||||||
document.documentElement.classList.add('dark');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="/custom.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<noscript
|
|
||||||
class="absolute z-1000 flex h-screen w-screen place-content-center place-items-center bg-immich-bg dark:bg-immich-dark-bg dark:text-immich-dark-fg"
|
|
||||||
>
|
|
||||||
To use Immich, you must enable JavaScript or use a JavaScript compatible browser.
|
|
||||||
</noscript>
|
|
||||||
|
|
||||||
<body class="bg-light text-dark">
|
|
||||||
<div id="stencil">
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 792 792">
|
|
||||||
<style type="text/css">
|
|
||||||
.st0 {
|
|
||||||
fill: #fa2921;
|
|
||||||
}
|
|
||||||
.st1 {
|
|
||||||
fill: #ed79b5;
|
|
||||||
}
|
|
||||||
.st2 {
|
|
||||||
fill: #ffb400;
|
|
||||||
}
|
|
||||||
.st3 {
|
|
||||||
fill: #1e83f7;
|
|
||||||
}
|
|
||||||
.st4 {
|
|
||||||
fill: #18c249;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<g>
|
|
||||||
<path
|
|
||||||
class="st0"
|
|
||||||
d="M375.48,267.63c38.64,34.21,69.78,70.87,89.82,105.42c34.42-61.56,57.42-134.71,57.71-181.3
|
|
||||||
c0-0.33,0-0.63,0-0.91c0-68.94-68.77-95.77-128.01-95.77s-128.01,26.83-128.01,95.77c0,0.94,0,2.2,0,3.72
|
|
||||||
C300.01,209.24,339.15,235.47,375.48,267.63z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
class="st1"
|
|
||||||
d="M164.7,455.63c24.15-26.87,61.2-55.99,103.01-80.61c44.48-26.18,88.97-44.47,128.02-52.84
|
|
||||||
c-47.91-51.76-110.37-96.24-154.6-110.91c-0.31-0.1-0.6-0.19-0.86-0.28c-65.57-21.3-112.34,35.81-130.64,92.15
|
|
||||||
c-18.3,56.34-14.04,130.04,51.53,151.34C162.05,454.77,163.25,455.16,164.7,455.63z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
class="st2"
|
|
||||||
d="M681.07,302.19c-18.3-56.34-65.07-113.45-130.64-92.15c-0.9,0.29-2.1,0.68-3.54,1.15
|
|
||||||
c-3.75,35.93-16.6,81.27-35.96,125.76c-20.59,47.32-45.84,88.27-72.51,118c69.18,13.72,145.86,12.98,190.26-1.14
|
|
||||||
c0.31-0.1,0.6-0.2,0.86-0.28C695.11,432.22,699.37,358.52,681.07,302.19z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
class="st3"
|
|
||||||
d="M336.54,510.71c-11.15-50.39-14.8-98.36-10.7-138.08c-64.03,29.57-125.63,75.23-153.26,112.76
|
|
||||||
c-0.19,0.26-0.37,0.51-0.53,0.73c-40.52,55.78-0.66,117.91,47.27,152.72c47.92,34.82,119.33,53.54,159.86-2.24
|
|
||||||
c0.56-0.76,1.3-1.78,2.19-3.01C363.28,602.32,347.02,558.08,336.54,510.71z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
class="st4"
|
|
||||||
d="M617.57,482.52c-35.33,7.54-82.42,9.33-130.72,4.66c-51.37-4.96-98.11-16.32-134.63-32.5
|
|
||||||
c8.33,70.03,32.73,142.73,59.88,180.6c0.19,0.26,0.37,0.51,0.53,0.73c40.52,55.78,111.93,37.06,159.86,2.24
|
|
||||||
c47.92-34.82,87.79-96.95,47.27-152.72C619.2,484.77,618.46,483.75,617.57,482.52z"
|
|
||||||
/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<script>
|
|
||||||
{
|
|
||||||
__sveltekit_1gheimp = {
|
|
||||||
base: "",
|
|
||||||
env: null
|
|
||||||
};
|
|
||||||
|
|
||||||
const element = document.currentScript.parentElement;
|
|
||||||
|
|
||||||
import("/_app/env.js").then(({ env }) => {
|
|
||||||
__sveltekit_1gheimp.env = env;
|
|
||||||
|
|
||||||
Promise.all([
|
|
||||||
import("/_app/immutable/entry/start.RpA_pNyV.js"),
|
|
||||||
import("/_app/immutable/entry/app.CepPnjFj.js")
|
|
||||||
]).then(([kit, app]) => {
|
|
||||||
kit.start(app, element);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
if ('serviceWorker' in navigator) {
|
|
||||||
addEventListener('load', function () {
|
|
||||||
navigator.serviceWorker.register('/service-worker.js');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
Before Width: | Height: | Size: 236 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 25 MiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 7.7 MiB |
|
Before Width: | Height: | Size: 6.9 MiB |
|
Before Width: | Height: | Size: 5.4 MiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 293 KiB |
|
Before Width: | Height: | Size: 55 KiB |
@@ -1 +0,0 @@
|
|||||||
Require all granted
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
<?php
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
||||||
// Redirect to the secret directory
|
|
||||||
header('Location: /secret/one.mp4'); // change to your actual directory path
|
|
||||||
exit(); // important! stops further script execution
|
|
||||||
} else {
|
|
||||||
// If someone tries to GET the script directly, redirect to home
|
|
||||||
header('Location: /');
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="fr">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
|
|
||||||
<meta property="og:title" content="UwU Nixiews UwU" />
|
|
||||||
<meta property="og:description" content="Run Debian and Gentoo, why not after all? Anyway, hope you're not a Windows fanboy because it sucks :3" />
|
|
||||||
<meta property="og:image" content="https://nix.roulaise.net/data/Guweiz1.jpeg" />
|
|
||||||
<meta property="og:url" content="https://nix.roulaise.net" />
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
|
|
||||||
<title>Potato CAPTCHA</title>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="/data/style.css">
|
|
||||||
<!--
|
|
||||||
<link rel="icon" type="/image/png" sizes="32x32" href="/data/icon_circle.png">
|
|
||||||
-->
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="homepage">
|
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
<h1>Potato CAPTCHA 🥔</h1>
|
|
||||||
|
|
||||||
<form action="access.php" method="post" class="card">
|
|
||||||
<label for="potato">Select the correct potato to proceed:</label>
|
|
||||||
|
|
||||||
<div style="text-align:left;">
|
|
||||||
<input type="radio" name="potato" id="potato1" value="potato">
|
|
||||||
<label for="potato1">Potato</label><br>
|
|
||||||
|
|
||||||
<input type="radio" name="potato" id="potato2" value="definitely-potato">
|
|
||||||
<label for="potato2">Definitely a Potato</label><br>
|
|
||||||
|
|
||||||
<input type="radio" name="potato" id="potato3" value="not-potato">
|
|
||||||
<label for="potato3">Absolutely Not a Potato (wrong)</label><br>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<button type="submit">Submit Your Potato</button>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Ce serveur fonktionne :)
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,151 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Random Terrible CAPTCHA (Working Version)</title>
|
|
||||||
<style>
|
|
||||||
body { font-family: "Segoe UI", Arial, sans-serif; background: #f3f3f7; display: flex; justify-content: center; padding: 40px; }
|
|
||||||
#wrapper { width: 450px; background: white; padding: 30px; border-radius: 16px; box-shadow: 0 6px 20px rgba(0,0,0,0.12); }
|
|
||||||
h1 { text-align: center; margin-bottom: 25px; }
|
|
||||||
#captcha-box { border: 2px solid #333; padding: 20px; border-radius: 10px; background: #fafafa; }
|
|
||||||
button { margin-top: 10px; padding: 10px 20px; cursor: pointer; border: none; border-radius: 8px; background: #4b6aff; color: white; font-size: 15px; }
|
|
||||||
button:hover { background: #3f5ce0; }
|
|
||||||
input, select { width: 100%; margin-top: 10px; padding: 10px; border-radius: 8px; border: 1px solid #bbb; font-size: 15px; }
|
|
||||||
.emoji-btn { font-size: 28px; padding: 5px 12px; margin: 3px; cursor: pointer; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="wrapper">
|
|
||||||
<h1>Access Verification</h1>
|
|
||||||
|
|
||||||
<form id="accessForm" method="POST" action="access.php"></form>
|
|
||||||
|
|
||||||
<div id="captcha-box">
|
|
||||||
<div id="captcha-content"></div>
|
|
||||||
<button id="validateBtn">Validate</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
let currentCaptcha = null;
|
|
||||||
let captchaControls = {};
|
|
||||||
|
|
||||||
// FULLY WORKING CAPTCHA SYSTEM
|
|
||||||
const captchas = [
|
|
||||||
{
|
|
||||||
render: () => `Type the following EXACTLY:<br><code>supercalifragilisticexpialidocious!!??</code><input id="answer">`,
|
|
||||||
setup: () => {},
|
|
||||||
check: v => v === "supercalifragilisticexpialidocious!!??"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => `How many digits are in:<br><code>x91k33mm007pp444z</code><input id="answer" type="number">`,
|
|
||||||
setup: () => {},
|
|
||||||
check: v => Number(v) === 11
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => `Click the FOURTH cat with sunglasses:<br>
|
|
||||||
<button class="emoji-btn" data-id="1">😺</button>
|
|
||||||
<button class="emoji-btn" data-id="2">😺😎</button>
|
|
||||||
<button class="emoji-btn" data-id="3">😺😎</button>
|
|
||||||
<button class="emoji-btn" data-id="4">😺😎</button>
|
|
||||||
<button class="emoji-btn" data-id="5">😺</button>
|
|
||||||
<input id="answer" type="hidden">`,
|
|
||||||
setup: () => {
|
|
||||||
document.querySelectorAll('.emoji-btn').forEach(btn => {
|
|
||||||
btn.addEventListener('click', () => {
|
|
||||||
document.getElementById('answer').value = btn.dataset.id;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
check: v => v === "4"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => `Solve:<br>((3×3) + 7 − 2) × 4 + 13 = ?<input id="answer" type="number">`,
|
|
||||||
setup: () => {},
|
|
||||||
check: v => Number(v) === (((3*3)+7-2)*4+13)
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => `Click this button exactly 10 times:<br>
|
|
||||||
<button id="clicker">Click me</button>
|
|
||||||
<p>Clicks: <span id="count">0</span></p>
|
|
||||||
<input id="answer" type="hidden">`,
|
|
||||||
setup: () => {
|
|
||||||
let clicks = 0;
|
|
||||||
document.getElementById('clicker').addEventListener('click', () => {
|
|
||||||
clicks++;
|
|
||||||
document.getElementById('count').textContent = clicks;
|
|
||||||
document.getElementById('answer').value = clicks;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
check: v => Number(v) === 10
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => `Reorder the words:<br><code>blue is sky the</code><input id="answer" placeholder="Correct sentence">`,
|
|
||||||
setup: () => {},
|
|
||||||
check: v => v.toLowerCase().trim() === "the sky is blue"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => `Select the meaning of life:<br>
|
|
||||||
<select id="answer">
|
|
||||||
<option value="">-- choose --</option>
|
|
||||||
<option>42</option>
|
|
||||||
<option>7</option>
|
|
||||||
<option>113</option>
|
|
||||||
</select>`,
|
|
||||||
setup: () => {},
|
|
||||||
check: v => v === "42"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => `Type this but REVERSED:<br><code>!sdrow ruoy esreveR</code><input id="answer">`,
|
|
||||||
setup: () => {},
|
|
||||||
check: v => v === "Reverse your words!"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => {
|
|
||||||
const nums = [3,7,2,9,4];
|
|
||||||
captchaControls.sum = nums.reduce((a,b)=>a+b,0);
|
|
||||||
return `What is the sum?<br><code>${nums.join(' + ')}</code><input id="answer" type="number">`;
|
|
||||||
},
|
|
||||||
setup: () => {},
|
|
||||||
check: v => Number(v) === captchaControls.sum
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
render: () => `Type the COLOR of the text:<br><span style="color:red;font-weight:bold;font-size:22px;">BLUE</span><input id="answer">`,
|
|
||||||
setup: () => {},
|
|
||||||
check: v => v.toLowerCase() === "red"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
function loadRandomCaptcha() {
|
|
||||||
currentCaptcha = captchas[Math.floor(Math.random() * captchas.length)];
|
|
||||||
document.getElementById('captcha-content').innerHTML = currentCaptcha.render();
|
|
||||||
currentCaptcha.setup();
|
|
||||||
}
|
|
||||||
|
|
||||||
// BUTTON → VALIDATE CAPTCHA → SUBMIT POST TO PHP
|
|
||||||
|
|
||||||
document.getElementById('validateBtn').addEventListener('click', evt => {
|
|
||||||
evt.preventDefault();
|
|
||||||
const val = document.getElementById('answer').value || "";
|
|
||||||
|
|
||||||
if (currentCaptcha.check(val)) {
|
|
||||||
document.getElementById('accessForm').submit();
|
|
||||||
} else {
|
|
||||||
alert("Incorrect — new CAPTCHA loaded.");
|
|
||||||
loadRandomCaptcha();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
loadRandomCaptcha();
|
|
||||||
</script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
/mnt/gentoo/var/tmp/portage/dev-qt
|
|
||||||