/
customResolver.go
46 lines (37 loc) · 922 Bytes
/
customResolver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package client
import (
"strings"
"github.com/jinliming2/secure-dns/client/resolver"
)
type customResolver struct {
matcher func(string) bool
resolver resolver.DNSClient
}
func newCustomResolver(resolver resolver.DNSClient, domain, suffix []string) *customResolver {
domainList := make([]string, len(domain))
for index, d := range domain {
domainList[index] = strings.Trim(d, ".")
}
suffixList := make([]string, len(suffix))
for index, s := range suffix {
suffixList[index] = "." + strings.Trim(s, ".")
}
return &customResolver{
matcher: func(domain string) bool {
trimmedDomain := strings.Trim(domain, ".")
for _, d := range domainList {
if trimmedDomain == d {
return true
}
}
trimmedDomain = "." + trimmedDomain
for _, s := range suffixList {
if strings.HasSuffix(trimmedDomain, s) {
return true
}
}
return false
},
resolver: resolver,
}
}