feat: v0.6.0 — ACLs multi-utilisateurs + Plugin system
CI / test (push) Failing after 1m18s

**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
This commit is contained in:
2026-08-04 22:14:37 -04:00
parent 151dd4a1a8
commit 0e73f14b6e
13 changed files with 1229 additions and 686 deletions
+5 -1
View File
@@ -3,7 +3,7 @@ module main
import os
import flag
const version = '0.5.0'
const version = '0.6.0'
const author = 'Bruno Charest'
fn main() {
@@ -220,6 +220,10 @@ fn print_startup_info(cfg Config) {
if generic_count > 0 {
println(' Generic: ${generic_count} webhook${if generic_count > 1 { 's' } else { '' }}')
}
plugin_count := cfg.sources.plugin.len
if plugin_count > 0 {
println(' Plugin: ${plugin_count} script${if plugin_count > 1 { 's' } else { '' }}')
}
println('')
println(' Webhook URLs:')