WIP: Aufgaben- und Postfach-Routen (Test folgt auf dem Server)

This commit is contained in:
2026-08-22 22:56:59 +02:00
parent 548ec6bc00
commit 4ce51c127e
22 changed files with 1778 additions and 4 deletions
+18
View File
@@ -132,6 +132,24 @@ export function zuVieleVersuche(schluessel, maxAnzahl, sperreMinuten) {
return false;
}
/* Rollendes Zeitfenster — löscht den Zähler, wenn seit der letzten
Zählung genug Zeit vergangen ist.
Warum das nötig ist: versuchZaehlen() zählt nur hoch. Bei der
Anmeldung ist das richtig, dort setzt ein erfolgreicher Login zurück.
Bei einer Mengenbegrenzung für erlaubte Handlungen gibt es aber
keinen "Erfolg", der zurücksetzt — der Zähler bliebe für immer auf
seinem Höchststand, und ab der zwanzigsten Nachricht würde JEDE
weitere sofort wieder eine Sperre auslösen. Aus einer Bremse gegen
Endlosschleifen wäre damit ein dauerhaftes Schreibverbot geworden.
Vor jeder Prüfung aufrufen, mit demselben Fenster wie die Sperre. */
export function fensterZuruecksetzen(schluessel, fensterMinuten) {
const grenze = new Date(Date.now() - fensterMinuten * 60000).toISOString();
db.prepare(`DELETE FROM wd_login_versuche WHERE schluessel = ? AND zuletzt < ?`)
.run(schluessel, grenze);
}
export function versuchZaehlen(schluessel, maxAnzahl = 5, sperreMinuten = 15) {
const zeile = db.prepare(`SELECT * FROM wd_login_versuche WHERE schluessel = ?`).get(schluessel);
const anzahl = (zeile?.anzahl || 0) + 1;