Request tags, with refusing and limits per tag (closes #175)
check / check (push) Successful in 3m36s

Each request gets sorted tags from the lookup, new address lists, the
reputation sources and the rule matches, logged as `tags`. New settings:
`SWW_TAG_LISTS`, `SWW_TAG_DENY`, `SWW_TAG_LIMIT_PERCENT`. They replace
`SWW_ASN_LIMIT_PERCENT`, `SWW_COUNTRY_LIMIT_PERCENT` and
`SWW_DENIED_COUNTRIES`. New heuristics `tag_lists` and `tag_deny`; the
latter runs before the rate limits and again after the Core Rule Set.

Model: opus-5-5
This commit is contained in:
sneak committed 2026-11-09 00:39:44 +00:00
1 parent 2349b2a081
commit 60630859af
42 files changed
+1088 -319

No files matched your search

+11
View File
@@ -138,6 +138,17 @@ func (h *handler) startRequest(
return rq
}
// addTag adds tag, in lower case, to the request's tags, which stay sorted and
// hold each tag once.
func (rq *request) addTag(tag string) {
tag = strings.ToLower(tag)
at, found := slices.BinarySearch(rq.line.Tags, tag)
if !found {
rq.line.Tags = slices.Insert(rq.line.Tags, at, tag)
}
}
// requestHeaders returns the headers of r that names lists, by name in
// lower case, each with its values joined by ", ". Authorization, Cookie
// and Set-Cookie are never among them, whatever names says.