git.iko.soy/typeable/oauth2-proxy
on v0.1 help sign in
typeable/oauth2-proxy/validator.go
42 lines 921 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 r, err := os.Open(usersFile)
16 if err != nil {
17 log.Fatalf("failed opening -authenticated-emails-file=%v, %s", usersFile, err.Error())
18 }
19 csv_reader := csv.NewReader(r)
20 csv_reader.Comma = ','
21 csv_reader.Comment = '#'
22 csv_reader.TrimLeadingSpace = true
23 records, err := csv_reader.ReadAll()
24 for _, r := range records {
25 validUsers[r[0]] = true
26 }
27 }
29 validator := func(email string) bool {
30 valid := false
31 for _, domain := range domains {
32 emailSuffix := fmt.Sprintf("@%s", domain)
33 valid = valid || strings.HasSuffix(email, emailSuffix)
34 }
35 if !valid {
36 _, valid = validUsers[email]
37 }
38 log.Printf("validating: is %s valid? %v", email, valid)
39 return valid
40 }
41 return validator