fix(security): implement security module toggle actions

Complete Phase 4 implementation enabling ACL, WAF, and Rate Limiting
toggle functionality in the Security Dashboard UI.

Backend:

Add 60-second TTL settings cache layer to Cerberus middleware
Trigger async Caddy config reload on security.* setting changes
Query runtime settings in Caddy manager before config generation
Wire SettingsHandler with CaddyManager and Cerberus dependencies
Frontend:

Fix optimistic update logic to preserve mode field for WAF/rate_limit
Replace onChange with onCheckedChange for all Switch components
Add unit tests for mode preservation and rollback behavior
Test Fixes:

Fix CrowdSec startup test assertions (cfg.Enabled is global Cerberus flag)
Fix security service test UUID uniqueness for UNIQUE constraint
Add .first() to toast locator in wait-helpers.ts for multiple toasts
Documentation:

Add Security Dashboard Toggles section to features.md
Mark phase4_security_toggles_spec.md as IMPLEMENTED
Add E2E coverage mode (Docker vs Vite) documentation
Enables 8 previously skipped E2E tests in security-dashboard.spec.ts
and rate-limiting.spec.ts.
This commit is contained in:
GitHub Actions
2026-01-24 03:40:57 +00:00
parent a198b76da6
commit 99faac0b6a
17 changed files with 2325 additions and 32 deletions
+28
View File
@@ -17,3 +17,31 @@ model: Claude Sonnet 4
- **No Truncation**: Never pipe Playwright test output through `head`, `tail`, or other truncating commands. Playwright runs interactively and requires user input to quit when piped, causing the command to hang indefinitely.
- **Full Output**: Always capture the complete test output to analyze failures accurately.
## E2E Coverage Collection
**IMPORTANT**: E2E coverage ONLY works when running against the Vite dev server, NOT Docker.
| Mode | Base URL | Coverage Support |
|------|----------|-----------------|
| Docker (`localhost:8080`) | ❌ No coverage (0% reported) |
| Vite Dev (`localhost:5173`) | ✅ Real coverage data |
### When Coverage is Required
Use the dedicated skill that starts Vite and collects coverage:
```bash
# Recommended for coverage collection
.github/skills/scripts/skill-runner.sh test-e2e-playwright-coverage
```
### When Coverage is NOT Required
For quick integration testing, run directly against Docker:
```bash
npx playwright test --project=chromium
```
**Why?** The `@bgotink/playwright-coverage` library uses V8 coverage which requires source files only available via Vite dev server.