github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/cmd/willwhite_free_update.go (about) 1 package main 2 3 import ( 4 "bufio" 5 "net/http" 6 "os" 7 "strings" 8 ) 9 10 const ( 11 freeURL = "https://raw.githubusercontent.com/willwhite/freemail/master/data/free.txt" 12 willWhiteFreePath = "pkg/ev/free/willwhite_free.go" 13 ) 14 15 func willwhiteFreeUpdate(url, path string) { 16 freeResp, err := http.Get(url) 17 errPanic(err) 18 defer freeResp.Body.Close() 19 20 var freeEmails = make([]string, 0) 21 bufReader := bufio.NewReader(freeResp.Body) 22 23 for { 24 freeEmail, _, err := bufReader.ReadLine() 25 if len(freeEmail) > 0 { 26 freeEmails = append(freeEmails, string(freeEmail)) 27 } 28 if err != nil { 29 break 30 } 31 } 32 33 f, err := os.Create(path) 34 errPanic(err) 35 defer f.Close() 36 37 f.WriteString(generateFreeCode(freeEmails)) 38 } 39 40 func generateFreeCode(freeEmails []string) string { 41 strBuilder := strings.Builder{} 42 strBuilder.WriteString( 43 `package free 44 45 import ( 46 "github.com/emirpasic/gods/sets/hashset" 47 "github.com/go-email-validator/go-email-validator/pkg/ev/contains" 48 "strings" 49 ) 50 51 // WillWhiteFree returns the list of free domains 52 func WillWhiteFree() []string { 53 return willWhiteFree 54 } 55 56 // NewWillWhiteSetFree forms contains.InSet from list of free domains (https://github.com/willwhite/freemail/blob/master/data/free.txt) 57 func NewWillWhiteSetFree() contains.InSet { 58 WillWhiteFree := WillWhiteFree() 59 freeEmails := make([]interface{}, len(WillWhiteFree)) 60 for i, freeEmail := range WillWhiteFree { 61 freeEmails[i] = strings.ToLower(freeEmail) 62 } 63 64 return contains.NewSet(hashset.New(freeEmails...)) 65 } 66 `) 67 strBuilder.WriteString(` 68 var willWhiteFree = []string{ 69 `) 70 for _, freeEmail := range freeEmails { 71 strBuilder.WriteString("\t\"") 72 strBuilder.WriteString(freeEmail) 73 strBuilder.WriteString("\",\n") 74 } 75 strBuilder.WriteString("}\n") 76 77 return strBuilder.String() 78 }