Öffnungszeiten: öffentliche Route
GET /api/public/zeiten/v1/:siteKey mit CORS *, OPTIONS 204, 405, weichem ETag ohne stand, Cache-Control max-age=60, Expose-Headers Date, Grenze 120 je Minute und IP (zeiten/limits.js), 503 ohne Details und 404 für unbekannte Pfade. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d4c1be91c7
commit
d1f9176c99
4 files changed
+446
No files matched your search
@@ -0,0 +1,15 @@
|
||||
import { ipSchluessel, zaehle } from '../termine/limits.js'
|
||||
|
||||
/**
|
||||
* Grenze der oeffentlichen Zeiten-Schnittstelle (Spezifikation 2026-10-04-oeffnungszeiten-live-design.md, Abschnitt 4.1):
|
||||
* hoechstens 120 Abrufe je Minute und Client-IP. Der Zaehler liegt im Speicher dieses Prozesses (services/termine/limits.js:
|
||||
* IPv6 je /64, 'ip:'-Schluessel verdraengen keine langlebigen Zaehler) und traegt einen eigenen Schluessel, damit Zeiten und
|
||||
* Terminplaner nicht aus demselben Topf zaehlen. Tests leeren ihn mit resetTermineLimitsForTests.
|
||||
*/
|
||||
const ANFRAGEN_JE_IP = 120
|
||||
const MINUTE_MS = 60 * 1000
|
||||
|
||||
/** Darf diese IP (IPv6 je /64) jetzt die Zeiten abrufen? Hoechstens 120 je Minute; true = erlaubt (gezaehlt), false = Grenze erreicht. */
|
||||
export function darfZeitenAnfrage(ip, now) {
|
||||
return zaehle(`ip:zeiten:${ipSchluessel(ip)}`, ANFRAGEN_JE_IP, MINUTE_MS, now)
|
||||
}
|
||||
Reference in new issue
Block a user