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  }