1package authz23import (4 "context"5 "fmt"67 "github.com/foxcpp/maddy/framework/address"8 "github.com/foxcpp/maddy/framework/module"9)1011func AuthorizeEmailUse(ctx context.Context, username string, addrs []string, mapping module.Table) (bool, error) {12 var validEmails []string1314 if multi, ok := mapping.(module.MultiTable); ok {15 var err error16 validEmails, err = multi.LookupMulti(ctx, username)17 if err != nil {18 return false, fmt.Errorf("authz: %w", err)19 }20 } else {21 validEmail, ok, err := mapping.Lookup(ctx, username)22 if err != nil {23 return false, fmt.Errorf("authz: %w", err)24 }25 if ok {26 validEmails = []string{validEmail}27 }28 }2930 for _, addr := range addrs {31 _, domain, err := address.Split(addr)32 if err != nil {33 return false, fmt.Errorf("authz: %w", err)34 }3536 for _, ent := range validEmails {37 if ent == domain || ent == "*" || ent == addr {38 return true, nil39 }40 }41 }4243 return false, nil44}