12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package tf
- import (
- "bufio"
- "bytes"
- _ "embed"
- "io"
- "strings"
- "github.com/sagernet/sing/common"
- "github.com/sagernet/sing/common/domain"
- E "github.com/sagernet/sing/common/exceptions"
- F "github.com/sagernet/sing/common/format"
- )
- var publicPrefix = []string{
- "www",
- }
- //go:generate wget -O public_suffix_list.dat https://publicsuffix.org/list/public_suffix_list.dat
- //go:embed public_suffix_list.dat
- var publicSuffix []byte
- var publicSuffixMatcher = common.OnceValue(func() *domain.Matcher {
- matcher, err := initPublicSuffixMatcher()
- if err != nil {
- panic(F.ToString("error in initialize public suffix matcher"))
- }
- return matcher
- })
- func initPublicSuffixMatcher() (*domain.Matcher, error) {
- reader := bufio.NewReader(bytes.NewReader(publicSuffix))
- var domainList []string
- for {
- line, isPrefix, err := reader.ReadLine()
- if err != nil {
- if err == io.EOF {
- break
- }
- return nil, err
- }
- if isPrefix {
- return nil, E.New("unexpected prefix line")
- }
- lineStr := string(line)
- lineStr = strings.TrimSpace(lineStr)
- if lineStr == "" || strings.HasPrefix(lineStr, "//") {
- continue
- }
- domainList = append(domainList, lineStr)
- }
- return domain.NewMatcher(domainList, nil, false), nil
- }
|