maddy

Fork https://github.com/foxcpp/maddy

git clone git://git.lin.moe/go/maddy.git

 1package authz
 2
 3import (
 4	"strings"
 5
 6	"github.com/foxcpp/maddy/framework/address"
 7	"golang.org/x/text/secure/precis"
 8)
 9
10type NormalizeFunc func(string) (string, error)
11
12func NormalizeNoop(s string) (string, error) {
13	return s, nil
14}
15
16// NormalizeAuto applies address.PRECISFold to valid emails and
17// 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}
24
25// NormalizeFuncs defines configurable normalization functions to be used
26// 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), nil
35	},
36	"noop": NormalizeNoop,
37}