Files
EventSnap/e2e/specs/07-adversarial
fabi d2ad560df2 test(security): prove admin-login rate limit; make its toggle settable
The admin-login IP rate limit already existed (auth/handlers.rs: 5/min/IP, gated by
`rate_limits_enabled` + `admin_login_rate_enabled`, both default true in prod) — the earlier
"no rate-limit or lockout" note was wrong. What was missing was any TEST of it: the e2e
reseed sets `rate_limits_enabled=false`, so the old test observed all-401 under a disabled
limiter and "documented" the opposite of reality.

Replace that test with three that enable the limiter and prove it, mutation-verified
(deleting the check in the handler fails the first two):
  - a burst of wrong passwords from one IP starts returning 429 (first is a normal 401, so
    the password path ran and the limiter had budget; none is ever 200)
  - once throttled, even the CORRECT password is refused — isolates the RATE LIMIT from the
    password check (this is the assertion that dies if the limiter is removed)
  - with `admin_login_rate_enabled=false` the same burst is NOT limited (the toggle gates it)

Two fixes this surfaced:
  - `admin_login_rate_enabled` and `recover_rate_enabled` are read by their handlers but
    were missing from patch_config's BOOL_KEYS allowlist — the switches existed in code and
    could never be flipped. Added both.
  - Test isolation: exhausting the admin-login limiter locks out the NEXT test's truncate
    fixture, which must itself call admin_login before it can reset anything. An afterEach
    disables the toggle via patchConfig (JWT-based, not rate-limited) so the next login is
    clear; truncate then wipes the counter map. Runs on failure too.

Full desktop suite 201 passed / 1 skipped; backend 56 tests; clippy clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 19:10:41 +02:00
..