1package authz23import (4 "strings"56 "github.com/foxcpp/maddy/framework/address"7 "golang.org/x/text/secure/precis"8)910type NormalizeFunc func(string) (string, error)1112func NormalizeNoop(s string) (string, error) {13 return s, nil14}1516// NormalizeAuto applies address.PRECISFold to valid emails and17// plain UsernameCaseMapped profile to other strings.18func NormalizeAuto(s string) (string, error) {19 if address.Valid(s) {20 return address.PRECISFold(s)21 }22 return precis.UsernameCaseMapped.CompareKey(s)23}2425// NormalizeFuncs defines configurable normalization functions to be used26// in authentication and authorization routines.27var NormalizeFuncs = map[string]NormalizeFunc{28 "auto": NormalizeAuto,29 "precis_casefold_email": address.PRECISFold,30 "precis_casefold": precis.UsernameCaseMapped.CompareKey,31 "precis_email": address.PRECIS,32 "precis": precis.UsernameCasePreserved.CompareKey,33 "casefold": func(s string) (string, error) {34 return strings.ToLower(s), nil35 },36 "noop": NormalizeNoop,37}