- Add DispatchContext field to Task model for rule metadata storage - Add BlocklistEmails config (BLOCKLIST_EMAILS env var) - Wire rules.Pipeline into IMAPWatcher, replacing inline whitelist check - Pass rule metadata through DispatchContext to OpenClaw dispatch - Remove isWhitelisted method (now handled by WhitelistRule) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
31 lines
729 B
Go
31 lines
729 B
Go
package rules
|
|
|
|
import "strings"
|
|
|
|
// WhitelistRule accepts emails from configured senders.
|
|
// An empty list accepts all senders.
|
|
type WhitelistRule struct {
|
|
emails map[string]bool
|
|
}
|
|
|
|
// NewWhitelistRule creates a whitelist rule from a list of email addresses.
|
|
func NewWhitelistRule(emails []string) *WhitelistRule {
|
|
m := make(map[string]bool, len(emails))
|
|
for _, e := range emails {
|
|
m[strings.ToLower(e)] = true
|
|
}
|
|
return &WhitelistRule{emails: m}
|
|
}
|
|
|
|
func (r *WhitelistRule) Name() string { return "whitelist" }
|
|
|
|
func (r *WhitelistRule) Evaluate(ctx EmailContext) RuleResult {
|
|
if len(r.emails) == 0 {
|
|
return Accept()
|
|
}
|
|
if r.emails[strings.ToLower(ctx.Sender)] {
|
|
return Accept()
|
|
}
|
|
return Reject("not whitelisted")
|
|
}
|