**ACLs (Access Control Lists):** - Ajout du type AclConfig dans sources/event.v (allowed_ips CIDR + allowed_tokens) - Chaque source webhook (Gitea, Uptime Kuma, Cron, Generic) supporte les ACLs - Validation IP via X-Forwarded-For / X-Real-IP avant HMAC - Validation Bearer token via Authorization header - Tests: 7 tests ACL (IP exact, CIDR, parse IPv4, ACL vide, IP+token combiné) **Plugin system:** - sources/plugin.v: runner exécutable externe, stdout JSON → Event - Exit 0 = publish, exit ≠ 0 = skip. Timeout configurable - Plugin loop dans server.v (goroutine, toutes les 60s) - Example: scripts/example-plugin-disk.sh (vérifie espace disque) **Docs:** - README.md: ajout source Plugin + section Features complète - ARCHITECTURE.md: flux Plugin, flux ACL, endpoints /metrics /api/silence - ROADMAP.md: Phase 5 → 8/8 complet, ajout v0.6.0 - ntfy-bridge.example.yaml: sections ACLs et Plugins commentées - Version bump: 0.5.0 → 0.6.0
Phase 3: - Config reload via SIGHUP (handle_signals loop: .hup reloads config, .int/.term shutdown) - Hot reload: cfg, webhook_routes, ntfy client, dedup updated without restart Phase 4: - Silence rules: POST /api/silence?duration=30m, GET /api/silence, DELETE /api/silence - Grouping: buffer 10s, events grouped with (×N in 10s) suffix - CI/CD: .gitea/workflows/ci.yml (build + test on push/PR) Docs: - ROADMAP.md: phases 3 & 4 marked DONE, version table updated - ARCHITECTURE.md: synced with actual code Version: 0.1.0 → 0.4.0 (main.v, v.mod)
Add YAML config loading with validation, env overrides for secrets, and a web dashboard exposing health, stats, and recent events.