ESPSomfy-RTS/data-src
cjkas bab83313ee feat: throttle failed logins per client IP
PR C of SECURITY_PLAN.md: after 5 failed /login attempts an IP is refused
for 30 s, and each failure after that refuses it for twice as long, up
to 15 min. A success resets it, as does an hour without a failure.

- LoginThrottle.h holds the schedule and 8 IPs, with the time passed in
  so native tests cover it. While all 8 hold recent failures, every
  other IP shares one more slot, so many addresses don't each get five
  free tries.
- A refused IP gets 429 with Retry-After before its credentials are
  checked, so a right guess during a lockout reveals nothing. Home
  Assistant retries a 429 instead of asking for new credentials.
- The web UI's login panel shows a 401's or 429's message, where it
  popped a service error.
- test/e2e --lockout checks it on a Secured device and waits it out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 22:08:30 +01:00
..
js fix: web UI review findings (step 2b) 2026-10-25 20:43:09 +01:00
apple-icon.png init 2026-03-10 20:23:48 +01:00
appversion chore: bump version to v3.0.14 2026-10-10 17:01:25 +00:00
favicon.png init 2026-03-10 20:23:48 +01:00
icon.png init 2026-03-10 20:23:48 +01:00
icon.svg init 2026-03-10 20:23:48 +01:00
icons.css init 2026-03-10 20:23:48 +01:00
index.html feat: web UI on socket protocol 2 (step 2b) 2026-10-25 20:12:54 +01:00
index.js feat: throttle failed logins per client IP 2026-10-26 22:08:30 +01:00
main.css feat: web UI on socket protocol 2 (step 2b) 2026-10-25 20:12:54 +01:00
widgets.css init 2026-03-10 20:23:48 +01:00