Update 2025-04-13_16:27:10

This commit is contained in:
root
2025-04-13 16:27:11 +02:00
commit 0c0acdc1dc
2225 changed files with 404073 additions and 0 deletions

184
static/app.js Normal file
View File

@ -0,0 +1,184 @@
/*************************************************
* MindVault - Random Credentials Starting Round *
************************************************/
let round = 2;
let waitTime = 10;
let inProgress = false;
let currentCredentials = {};
document.addEventListener('DOMContentLoaded', () => {
document.getElementById("submit-btn").onclick = submitCredentials;
document.getElementById("help-btn").onclick = showHelpModal;
document.getElementById("new-game-btn").onclick = startNewGame;
loadHighScores();
fetchInitialCredentials();
});
function fetchInitialCredentials() {
fetch(`/generate/${round}`)
.then(r => r.json())
.then(creds => {
currentCredentials = creds;
fetch('/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({username: creds.username, password: creds.password, round})
});
feedback(`👤 ${creds.username}\n🔑 ${creds.password}\nMemorize & wait ${waitTime}s`, 'highlight');
updatePlaceholders();
startCountdown(waitTime, () => {
feedback('🔑 Now type your NEW credentials!', 'highlight');
clearInputs();
document.getElementById('field1').focus();
});
});
}
function submitCredentials() {
if (inProgress) return;
const user = document.getElementById('field1').value;
const pass = document.getElementById('field2').value;
if (user.length !== round || pass.length !== round) {
feedback(`❌ Enter exactly ${round} char(s)!`, 'failure');
return;
}
inProgress = true;
fetch('/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({username: user, password: pass, round})
})
.then(r => r.json())
.then(data => {
if (data.status === "success") {
round++;
waitTime++;
fetch(`/generate/${round}`)
.then(r => r.json())
.then(creds => {
currentCredentials = creds;
fetch('/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({username: creds.username, password: creds.password, round})
});
feedback(`🎉 Success! ✅ Round ${round - 1} coming up...
👤 ${creds.username}
🔑 ${creds.password}
Memorize & wait ${waitTime}s`, 'highlight');
startCountdown(waitTime, () => {
feedback('🔑 Now type your NEW credentials!', 'highlight');
clearInputs();
document.getElementById('field1').focus();
inProgress = false;
});
});
updatePlaceholders();
loadHighScores();
} else {
feedback('❌ Wrong credentials. Try again!', 'failure');
inProgress = false;
}
});
}
function feedback(msg, status) {
const el = document.getElementById('feedback');
el.innerText = msg;
el.className = status;
}
function startCountdown(sec, cb) {
const c = document.getElementById('countdown');
let t = sec;
c.innerText = `${t}s`;
const iv = setInterval(() => {
t--;
c.innerText = `${t}s`;
if (t <= 0) {
clearInterval(iv);
c.innerText = '';
cb();
}
}, 1000);
}
function clearInputs() {
document.getElementById('field1').value = '';
document.getElementById('field2').value = '';
}
function updatePlaceholders() {
const f1 = document.getElementById('field1');
const f2 = document.getElementById('field2');
f1.placeholder = `👤 (${round} char${round>1?'s':''})`;
f2.placeholder = `🔑 (${round} char${round>1?'s':''})`;
f1.maxLength = round;
f2.maxLength = round;
}
function loadHighScores() {
fetch('/highscores')
.then(r => r.json())
.then(data => {
const list = document.getElementById('score-list');
list.innerHTML = '';
data.highscores.forEach(([u, s]) => {
const li = document.createElement('li');
li.innerText = `${u} Round ${s}`;
list.appendChild(li);
});
});
}
function startNewGame() {
round = 2;
waitTime = 10;
document.getElementById('round').innerText = round - 1;
feedback(`🔄 New Game! Round 2, wait 10s`, 'highlight');
clearInputs();
updatePlaceholders();
inProgress = false;
fetch('/newgame', {method:'POST'})
.then(r => r.json())
.then(d => {
if (d.status === "cleared") loadHighScores();
fetchInitialCredentials();
});
}
function showHelpModal() {
document.getElementById('help-modal').classList.remove('hidden');
}
document.getElementById('close-modal').onclick = () => {
document.getElementById('help-modal').classList.add('hidden');
};
window.onclick = (e) => {
if (e.target.id === 'help-modal') {
document.getElementById('help-modal').classList.add('hidden');
}
};
window.onkeydown = (e) => {
if (e.key === 'Escape') {
document.getElementById('help-modal').classList.add('hidden');
}
if (e.key === 'Enter') {
const modal = document.getElementById('help-modal');
if (modal.classList.contains('hidden')) {
document.getElementById("submit-btn").click();
}
}
};