Separate observation from evaluation in blacklist sources
Each source's Query() method previously set r.Listed and r.Severity, embedding verdict logic inside the prober. Evaluation now lives in a dedicated Evaluate(SourceResult) (bool, string) method per source, keeping Query() as pure observation. A package-level EvaluateResult() helper looks up the source by ID and delegates to its Evaluate method; rules.go, report.go, types.go, and provider.go all call this instead of reading pre-set r.Listed/r.Severity values. An unknownSource sentinel handles results whose source is no longer registered.
This commit is contained in:
parent
01909debad
commit
c437339bda
13 changed files with 123 additions and 44 deletions
|
|
@ -15,8 +15,9 @@ func TestDiagnoseAndReportRender(t *testing.T) {
|
|||
{
|
||||
SourceID: "dnsbl", SourceName: "Spamhaus DBL",
|
||||
Subject: "dbl.spamhaus.org",
|
||||
Enabled: true, Listed: true, Severity: SeverityCrit,
|
||||
Reasons: []string{"Phishing domain"},
|
||||
Enabled: true,
|
||||
Reasons: []string{"Phishing domain"},
|
||||
Evidence: []Evidence{{Label: "Return code", Value: "127.0.1.4"}},
|
||||
LookupURL: "https://check.spamhaus.org/results/?query=example.com",
|
||||
RemovalURL: "https://www.spamhaus.org/dbl/removal/",
|
||||
},
|
||||
|
|
@ -27,7 +28,7 @@ func TestDiagnoseAndReportRender(t *testing.T) {
|
|||
},
|
||||
{
|
||||
SourceID: "openphish", SourceName: "OpenPhish feed",
|
||||
Enabled: true, Listed: true, Severity: SeverityCrit,
|
||||
Enabled: true,
|
||||
Evidence: []Evidence{{Label: "URL", Value: "http://example.com/login"}},
|
||||
},
|
||||
},
|
||||
|
|
@ -66,7 +67,7 @@ func TestHeadline(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSectionStatus(t *testing.T) {
|
||||
if l, c := sectionStatus([]SourceResult{{Enabled: true, Listed: true, Severity: SeverityCrit}}); c != "crit" || !strings.HasPrefix(l, "LISTED") {
|
||||
if l, c := sectionStatus([]SourceResult{{SourceID: "openphish", Enabled: true, Evidence: []Evidence{{Label: "URL", Value: "http://evil.com/"}}}}); c != "crit" || !strings.HasPrefix(l, "LISTED") {
|
||||
t.Errorf("sectionStatus listed = %q/%q", l, c)
|
||||
}
|
||||
if l, c := sectionStatus([]SourceResult{{Enabled: true}}); c != "ok" || l != "Clean" {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue