3
0

Improve mail header matching, add runner watcher

This commit is contained in:
Denis Arh
2019-09-03 18:29:25 +02:00
parent cc13c0e27d
commit 8c2953a7fc
4 changed files with 34 additions and 9 deletions
+5 -8
View File
@@ -4,6 +4,7 @@ import (
"encoding/json"
"errors"
"net/mail"
"net/textproto"
"regexp"
"strings"
@@ -155,15 +156,11 @@ func (c *Condition) CheckHeader(header mail.Header, uev userExistanceVerifier) (
// Pre-process & simplify header values: parse all addresses,
// extract emails and toss away names, we do not need them
for name := range header {
for i, v := range header[name] {
switch name {
case "from",
"to",
"cc",
"bcc",
"reply-to":
switch textproto.CanonicalMIMEHeaderKey(name) {
case "From", "To", "Cc", "Bcc", "Reply-To":
for i, v := range header[name] {
addr, _ := mail.ParseAddress(v)
header[name][i] = addr.Address
header[name][i] = strings.Trim(addr.Address, "><")
}
}
}
+24
View File
@@ -43,6 +43,30 @@ func Test_makeMailHeaderChecker(t *testing.T) {
tc: Condition{Headers: []HeaderMatcher{{Name: HeaderMatchNameSubject, Match: "SIMPLE"}}},
expecting: true,
},
{
name: "check address (brackets)",
mh: types.MailMessageHeader{Raw: map[string][]string{"From": []string{"<some@mail.tld>"}}},
tc: Condition{Headers: []HeaderMatcher{{Name: HeaderMatchNameFrom, Match: "some@mail.tld"}}},
expecting: true,
},
{
name: "check address (bare)",
mh: types.MailMessageHeader{Raw: map[string][]string{"From": []string{"some@mail.tld"}}},
tc: Condition{Headers: []HeaderMatcher{{Name: HeaderMatchNameFrom, Match: "some@mail.tld"}}},
expecting: true,
},
{
name: "check address (full, quoted)",
mh: types.MailMessageHeader{Raw: map[string][]string{"From": []string{`"John Doe" <some@mail.tld>`}}},
tc: Condition{Headers: []HeaderMatcher{{Name: HeaderMatchNameFrom, Match: "some@mail.tld"}}},
expecting: true,
},
{
name: "check address (full)",
mh: types.MailMessageHeader{Raw: map[string][]string{"From": []string{`John Doe <some@mail.tld>`}}},
tc: Condition{Headers: []HeaderMatcher{{Name: HeaderMatchNameFrom, Match: "some@mail.tld"}}},
expecting: true,
},
{
name: "two matchers, one matches",
mh: types.MailMessageHeader{Raw: map[string][]string{"Subject": []string{"SIMPLE"}}},
+1 -1
View File
@@ -118,7 +118,7 @@ func (svc automationRunner) makeMailScriptRunner(ctx context.Context, mail *type
MailMessage: proto.NewMailMessage(mail),
}
svc.logger.Debug("executing script", zap.Any("mail", mail))
svc.logger.Debug("preparing mail script runner", zap.Any("mail", mail))
return func(script *automation.Script) error {
if svc.runner == nil {
+4
View File
@@ -143,5 +143,9 @@ func Init(ctx context.Context, log *zap.Logger, c Config) (err error) {
}
func Watchers(ctx context.Context) {
// Reloading automation scripts on change
DefaultAutomationRunner.Watch(ctx)
// Reloading permissions on change
DefaultPermissions.Watch(ctx)
}