update resolver config parsing, add eth. resolver by default
vyzo committed
Apr 13, 2021 at 17:48 UTC
0ef2f8c9eac4b4f2716f4d4e3d10bbfeefdced5e
1 file changed
+36
-9
core/node/dns.go
+36
-9
@@ -7,21 +7,48 @@ import (
7
config "github.com/ipfs/go-ipfs-config"
8
doh "github.com/libp2p/go-doh-resolver"
9
madns "github.com/multiformats/go-multiaddr-dns"
10
+
11
+ "github.com/miekg/dns"
12
)
13
14
+const ethResolverURL = "https://eth.link/dns-query"
15
+
16
+func newResolver(url string) (madns.BasicResolver, error) {
17
+ if !strings.HasPrefix(url, "https://") {
18
+ return nil, fmt.Errorf("invalid resolver url: %s", url)
19
+ }
20
+
21
+ return doh.NewResolver(url), nil
22
+}
23
+
24
func DNSResolver(cfg *config.Config) (*madns.Resolver, error) {
25
var opts []madns.Option
14
- if url := cfg.DNS.DefaultResolver; url != "" {
15
- if !strings.HasPrefix(url, "https://") {
16
- return nil, fmt.Errorf("invalid default resolver url: %s", url)
26
+
27
+ hasEth := false
28
+ for domain, url := range cfg.DNS.Resolvers {
29
+ if !dns.IsFqdn(domain) {
30
+ return nil, fmt.Errorf("invalid domain %s; must be FQDN", domain)
31
}
18
- opts = append(opts, madns.WithDefaultResolver(doh.NewResolver(url)))
19
- }
20
- for domain, url := range cfg.DNS.CustomResolvers {
21
- if !strings.HasPrefix(url, "https://") {
22
- return nil, fmt.Errorf("invalid domain resolver url for %s: %s", domain, url)
32
+
33
+ rslv, err := newResolver(url)
34
+ if err != nil {
35
+ return nil, fmt.Errorf("bad resolver for %s: %w", domain, err)
36
+ }
37
+
38
+ if domain != "." {
39
+ opts = append(opts, madns.WithDomainResolver(domain, rslv))
40
+ } else {
41
+ opts = append(opts, madns.WithDefaultResolver(rslv))
42
+ }
43
+
44
+ if domain == "eth." {
45
+ hasEth = true
46
}
24
- opts = append(opts, madns.WithDomainResolver(domain, doh.NewResolver(url)))
47
}
48
+
49
+ if !hasEth {
50
+ opts = append(opts, madns.WithDomainResolver("eth.", doh.NewResolver(ethResolverURL)))
51
+ }
52
+
53
return madns.NewResolver(opts...)
54
}