git.iko.soy/typeable/oauth2-proxy
on v1.1 help sign in
typeable/oauth2-proxy/validator.go
43 lines 974 B history raw
1package main
3import (
4 "encoding/csv"
5 "fmt"
6 "log"
7 "os"
8 "strings"
9)
11func NewValidator(domains []string, usersFile string) func(string) bool {
12 validUsers := make(map[string]bool)
14 if usersFile != "" {
15 log.Printf("using authenticated emails file %s", usersFile)
16 r, err := os.Open(usersFile)
17 if err != nil {
18 log.Fatalf("failed opening authenticated-emails-file=%q, %s", usersFile, err)
19 }
20 csv_reader := csv.NewReader(r)
21 csv_reader.Comma = ','
22 csv_reader.Comment = '#'
23 csv_reader.TrimLeadingSpace = true
24 records, err := csv_reader.ReadAll()
25 for _, r := range records {
26 validUsers[r[0]] = true
27 }
28 }
30 validator := func(email string) bool {
31 valid := false
32 for _, domain := range domains {
33 emailSuffix := fmt.Sprintf("@%s", domain)
34 valid = valid || strings.HasSuffix(email, emailSuffix)
35 }
36 if !valid {
37 _, valid = validUsers[email]
38 }
39 log.Printf("validating: is %s valid? %v", email, valid)
40 return valid
41 }
42 return validator