mirror of
https://github.com/emersion/go-msgauth
synced 2026-07-04 22:58:35 +00:00
70 lines
1.1 KiB
Go
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
|
|
}
|