Pro-Domain-Flag crowdsec_trusted (Migration 0048). Ist es gesetzt, rendert der neue crowdsec-whitelist-Generator den Hostname host-genau in /etc/crowdsec/parsers/s02-enrich/edgeguard-admin-hosts-whitelist.yaml (evt.Parsed.http_host) und reloadet crowdsec. Löst das Problem, dass Admin-SPAs (viele /api/-Requests pro Aktion) http-crawl-non_statics triggern und die Admin-IP bannen — jetzt im Frontend steuerbar statt manueller Node-Datei. - Generator internal/crowdsec/whitelist.go (configgen.Generator, no-op ohne CrowdSec), registriert in edgeguard-ctl render-config + in den Domains-Reloader komponiert (Domain-Edit → Whitelist re-render). Aus der replizierten DB gerendert → überlebt Node-Neuaufbau (Ersatz für die manuelle Node-Datei). - postinst: sudoers reload crowdsec + edgeguard-owned Whitelist-Datei anlegen (dir root-owned → Generator überschreibt nur die vorab-chownte Datei) + Initial-Render. - UI: Switch „Vertrauenswürdiges Admin-Panel" im Domain-Detail. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
36 lines
1.1 KiB
Go
36 lines
1.1 KiB
Go
package crowdsec
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestRenderWhitelist(t *testing.T) {
|
|
t.Run("hosts werden host-genau eingetragen", func(t *testing.T) {
|
|
out := string(renderWhitelist([]string{"control.netcell-it.de", "admin.example.com"}))
|
|
if !strings.Contains(out, "evt.Parsed.http_host in ['control.netcell-it.de', 'admin.example.com']") {
|
|
t.Fatalf("erwartete host-Liste fehlt:\n%s", out)
|
|
}
|
|
if !strings.Contains(out, "name: edgeguard/admin-hosts-whitelist") {
|
|
t.Fatalf("Parser-Name fehlt:\n%s", out)
|
|
}
|
|
})
|
|
|
|
t.Run("leere Liste → in [] (matcht nie, Datei gültig)", func(t *testing.T) {
|
|
out := string(renderWhitelist(nil))
|
|
if !strings.Contains(out, "evt.Parsed.http_host in []") {
|
|
t.Fatalf("erwarte leeres in []:\n%s", out)
|
|
}
|
|
})
|
|
|
|
t.Run("leere/whitespace-Hosts werden gefiltert, Quotes escaped", func(t *testing.T) {
|
|
out := string(renderWhitelist([]string{" ", "a'b.de", ""}))
|
|
if !strings.Contains(out, "'a''b.de'") {
|
|
t.Fatalf("Quote-Escaping falsch:\n%s", out)
|
|
}
|
|
if strings.Contains(out, "'', ") || strings.Contains(out, "[''") {
|
|
t.Fatalf("leere Hosts nicht gefiltert:\n%s", out)
|
|
}
|
|
})
|
|
}
|