@cryptotaxi247 / kubo / commits / 0ef2f8c9e

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 }