Files
go-msgauth/format.go
T
2017-02-24 10:18:07 +01:00

70 lines
1.1 KiB
Go

package msgauth
import (
"sort"
)
// Format formats an Authentication-Results header.
func Format(identity string, results []Result) string {
s := identity
if len(results) == 0 {
s += "; none"
return s
}
for _, r := range results {
method := resultMethod(r)
value, params := r.format()
s += "; " + method + "=" + string(value) + " " + formatParams(params)
}
return s
}
func resultMethod(r Result) string {
switch r := r.(type) {
case *AuthResult:
return "auth"
case *DKIMResult:
return "dkim"
case *DomainKeysResult:
return "domainkeys"
case *IPRevResult:
return "iprev"
case *SenderIDResult:
return "sender-id"
case *SPFResult:
return "spf"
case *GenericResult:
return r.Method
default:
return ""
}
}
func formatParams(params map[string]string) string {
keys := make([]string, 0, len(params))
for k := range params {
keys = append(keys, k)
}
sort.Strings(keys)
s := ""
i := 0
for _, k := range keys {
if params[k] == "" {
continue
}
if i > 0 {
s += " "
}
s += k + "=" + params[k]
i++
}
return s
}