WIP: Aufgaben- und Postfach-Routen (Test folgt auf dem Server)
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user