Add rspamd symbol descriptions from embedded/API lookup
Embed rspamd-symbols.json in the binary to provide human-readable descriptions for rspamd symbols in reports. Optionally fetch fresh symbols from a configurable rspamd API URL (--rspamd-api-url flag), falling back to the embedded list on error. Update the frontend to display descriptions alongside symbol names and scores.
This commit is contained in:
parent
5c104f3c99
commit
7d3009d7d0
12 changed files with 6816 additions and 20 deletions
|
|
@ -37,11 +37,13 @@ const (
|
|||
)
|
||||
|
||||
// RspamdAnalyzer analyzes rspamd results from email headers
|
||||
type RspamdAnalyzer struct{}
|
||||
type RspamdAnalyzer struct {
|
||||
symbols map[string]string
|
||||
}
|
||||
|
||||
// NewRspamdAnalyzer creates a new rspamd analyzer
|
||||
func NewRspamdAnalyzer() *RspamdAnalyzer {
|
||||
return &RspamdAnalyzer{}
|
||||
// NewRspamdAnalyzer creates a new rspamd analyzer with optional symbol descriptions
|
||||
func NewRspamdAnalyzer(symbols map[string]string) *RspamdAnalyzer {
|
||||
return &RspamdAnalyzer{symbols: symbols}
|
||||
}
|
||||
|
||||
// AnalyzeRspamd extracts and analyzes rspamd results from email headers
|
||||
|
|
@ -83,6 +85,16 @@ func (a *RspamdAnalyzer) AnalyzeRspamd(email *EmailMessage) *api.RspamdResult {
|
|||
result.Server = &server
|
||||
}
|
||||
|
||||
// Populate symbol descriptions from the lookup map
|
||||
if a.symbols != nil {
|
||||
for name, sym := range result.Symbols {
|
||||
if desc, ok := a.symbols[name]; ok {
|
||||
sym.Description = &desc
|
||||
result.Symbols[name] = sym
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Derive IsSpam from score vs reject threshold.
|
||||
if result.Threshold > 0 {
|
||||
result.IsSpam = result.Score >= result.Threshold
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue