Commit graph

12 commits

Author SHA1 Message Date
faae2f80c5 Add AlienVault OTX domain threat intelligence source 2026-05-15 21:41:38 +08:00
1242a381ab Add OISD domain blocklist source
Implements the OISD domainswild feed (big and small variants) as a new
blacklist source. DNS0.eu was considered but shut down in October 2025.
2026-05-15 21:41:35 +08:00
c2cc88e1df Add Disconnect.me tracking-protection blocklist source
Downloads and caches the Disconnect.me services.json feed (24h TTL),
matching domains against the Advertising, Analytics, Social, Content,
and Disconnect categories. Severity is warn (privacy classification,
not malware). Reuses the shared feedCache infrastructure.
2026-05-15 21:36:24 +08:00
9916ab0732 Add Botvrij.eu domain blocklist source
Downloads the Botvrij.eu public IOC domain list (no API key required),
caches it in-process with a 6h TTL, and flags any registered domain
that appears directly or as a parent of a feed entry.
2026-05-15 21:36:24 +08:00
6b1d2e2540 Extract disabledResult and evidenceEval helpers to reduce boilerplate
Add two shared helpers to source.go and apply them across all sources:
- disabledResult(id, name) replaces the repeated inline SourceResult literal
- evidenceEval(r, severity) replaces the identical Evaluate body in 6 sources
2026-05-15 21:36:24 +08:00
061b5361ca Merge duplicate phishCache/phishTankCache into shared feedCache 2026-05-15 21:36:24 +08:00
229e7a8f02 Add abuse.ch ThreatFox and MalwareBazaar blacklist sources
ThreatFox queries the IOC database for domain indicators (C2 servers,
malware distribution, phishing); MalwareBazaar searches for malware
samples tagged with the domain. Both require a free abuse.ch Auth-Key.
2026-05-15 21:36:24 +08:00
6b08676ec5 Add PhishTank as a new blacklist source 2026-05-15 21:36:24 +08:00
829863e5a0 Add a section on how to obtain API keys 2026-05-15 21:36:24 +08:00
c437339bda 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.
2026-05-15 18:04:17 +08:00
01909debad Add CI/CD pipeline
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-10 19:01:21 +08:00
66cf1fc9aa Initial commit v0.1.0 2026-04-26 19:44:05 +07:00