Skip to content

Commit b6adbcc

Browse files
committed
refactor: cleanup isDNSLinkName mess
1 parent c091fd6 commit b6adbcc

File tree

7 files changed

+19
-98
lines changed

7 files changed

+19
-98
lines changed

examples/gateway-car/api.go

+5
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,11 @@ func (api *blocksGateway) ResolvePath(ctx context.Context, p ifacepath.Path) (if
139139
return ifacepath.NewResolvedPath(ipath, node, root, gopath.Join(rest...)), nil
140140
}
141141

142+
func (api *blocksGateway) HasDNSLinkRecord(ctx context.Context, p ifacepath.Path) bool {
143+
// Not implemented.
144+
return false
145+
}
146+
142147
func (api *blocksGateway) resolveNode(ctx context.Context, p ifacepath.Path) (format.Node, error) {
143148
rp, err := api.ResolvePath(ctx, p)
144149
if err != nil {

examples/go.mod

-15
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,7 @@ require (
3535
github.com/go-logr/stdr v1.2.2 // indirect
3636
github.com/gogo/protobuf v1.3.2 // indirect
3737
github.com/golang/protobuf v1.5.2 // indirect
38-
github.com/google/gopacket v1.1.19 // indirect
3938
github.com/google/uuid v1.3.0 // indirect
40-
github.com/hashicorp/errwrap v1.1.0 // indirect
41-
github.com/hashicorp/go-multierror v1.1.1 // indirect
4239
github.com/hashicorp/golang-lru v0.5.4 // indirect
4340
github.com/ipfs/bbloom v0.0.4 // indirect
4441
github.com/ipfs/go-bitfield v1.0.0 // indirect
@@ -55,20 +52,12 @@ require (
5552
github.com/ipfs/go-log v1.0.5 // indirect
5653
github.com/ipfs/go-log/v2 v2.5.1 // indirect
5754
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
58-
github.com/ipfs/go-namesys v0.7.0 // indirect
5955
github.com/ipfs/go-verifcid v0.0.2 // indirect
6056
github.com/ipld/go-car v0.5.0 // indirect
6157
github.com/jbenet/goprocess v0.1.4 // indirect
6258
github.com/klauspost/cpuid/v2 v2.2.3 // indirect
6359
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
64-
github.com/libp2p/go-cidranger v1.1.0 // indirect
6560
github.com/libp2p/go-libp2p v0.23.4 // indirect
66-
github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect
67-
github.com/libp2p/go-libp2p-kad-dht v0.19.0 // indirect
68-
github.com/libp2p/go-libp2p-kbucket v0.5.0 // indirect
69-
github.com/libp2p/go-libp2p-record v0.2.0 // indirect
70-
github.com/libp2p/go-msgio v0.2.0 // indirect
71-
github.com/libp2p/go-netroute v0.2.0 // indirect
7261
github.com/libp2p/go-openssl v0.1.0 // indirect
7362
github.com/mattn/go-isatty v0.0.17 // indirect
7463
github.com/mattn/go-pointer v0.0.1 // indirect
@@ -79,7 +68,6 @@ require (
7968
github.com/multiformats/go-base32 v0.1.0 // indirect
8069
github.com/multiformats/go-base36 v0.2.0 // indirect
8170
github.com/multiformats/go-multiaddr v0.8.0 // indirect
82-
github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect
8371
github.com/multiformats/go-multibase v0.1.1 // indirect
8472
github.com/multiformats/go-multicodec v0.7.0 // indirect
8573
github.com/multiformats/go-multihash v0.2.1 // indirect
@@ -96,11 +84,8 @@ require (
9684
github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect
9785
github.com/spaolacci/murmur3 v1.1.0 // indirect
9886
github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
99-
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
10087
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect
10188
github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa // indirect
102-
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
103-
go.opencensus.io v0.23.0 // indirect
10489
go.opentelemetry.io/otel v1.12.0 // indirect
10590
go.opentelemetry.io/otel/trace v1.12.0 // indirect
10691
go.uber.org/atomic v1.10.0 // indirect

examples/go.sum

-51
Large diffs are not rendered by default.

gateway/gateway.go

+5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ type API interface {
3939
// exist due to a missing link, it should return an error of type:
4040
// https://pkg.go.dev/github.com/ipfs/[email protected]/resolver#ErrNoLink
4141
ResolvePath(context.Context, path.Path) (path.Resolved, error)
42+
43+
// HasDNSLinkRecord returns if the provided path has a DNSLink TXT record.
44+
// It does not perform any validation, only checks for the existence of
45+
// a DNSLink TXT record.
46+
HasDNSLinkRecord(context.Context, path.Path) bool
4247
}
4348

4449
// A helper function to clean up a set of headers:

gateway/hostname.go

+9-12
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"strings"
1111

1212
cid "github.com/ipfs/go-cid"
13-
"github.com/ipfs/go-namesys"
1413
"github.com/ipfs/interface-go-ipfs-core/path"
1514
"github.com/libp2p/go-libp2p/core/peer"
1615
dns "github.com/miekg/dns"
@@ -113,7 +112,7 @@ func WithHostname(next http.Handler, api API, publicGateways map[string]*Specifi
113112
// Not a whitelisted path
114113

115114
// Try DNSLink, if it was not explicitly disabled for the hostname
116-
if !gw.NoDNSLink && isDNSLinkName(r.Context(), api, host) {
115+
if !gw.NoDNSLink && hasDNSLinkRecord(r.Context(), api, host) {
117116
// rewrite path and handle as DNSLink
118117
r.URL.Path = "/ipns/" + stripPort(host) + r.URL.Path
119118
next.ServeHTTP(w, withHostnameContext(r, host))
@@ -184,7 +183,6 @@ func WithHostname(next http.Handler, api API, publicGateways map[string]*Specifi
184183
}
185184
}
186185
} else { // rootID is not a CID..
187-
188186
// Check if rootID is a single DNS label with an inlined
189187
// DNSLink FQDN a single DNS label. We support this so
190188
// loading DNSLink names over TLS "just works" on public
@@ -200,10 +198,10 @@ func WithHostname(next http.Handler, api API, publicGateways map[string]*Specifi
200198
// https://my-v--long-example-com.ipns.dweb.link
201199
if ns == "ipns" && !strings.Contains(rootID, ".") {
202200
// if there is no TXT recordfor rootID
203-
if !isDNSLinkName(r.Context(), api, rootID) {
201+
if !hasDNSLinkRecord(r.Context(), api, rootID) {
204202
// my-v--long-example-com → my.v-long.example.com
205203
dnslinkFQDN := toDNSLinkFQDN(rootID)
206-
if isDNSLinkName(r.Context(), api, dnslinkFQDN) {
204+
if hasDNSLinkRecord(r.Context(), api, dnslinkFQDN) {
207205
// update path prefix to use real FQDN with DNSLink
208206
pathPrefix = "/ipns/" + dnslinkFQDN
209207
}
@@ -218,13 +216,14 @@ func WithHostname(next http.Handler, api API, publicGateways map[string]*Specifi
218216
next.ServeHTTP(w, withHostnameContext(r, gwHostname))
219217
return
220218
}
219+
221220
// We don't have a known gateway. Fallback on DNSLink lookup
222221

223222
// Wildcard HTTP Host check:
224223
// 1. is wildcard DNSLink enabled (Gateway.NoDNSLink=false)?
225224
// 2. does Host header include a fully qualified domain name (FQDN)?
226225
// 3. does DNSLink record exist in DNS?
227-
if !noDNSLink && isDNSLinkName(r.Context(), api, host) {
226+
if !noDNSLink && hasDNSLinkRecord(r.Context(), api, host) {
228227
// rewrite path and handle as DNSLink
229228
r.URL.Path = "/ipns/" + stripPort(host) + r.URL.Path
230229
ctx := context.WithValue(r.Context(), DNSLinkHostnameKey, host)
@@ -262,18 +261,16 @@ func isDomainNameAndNotPeerID(hostname string) bool {
262261
return ok
263262
}
264263

265-
// isDNSLinkName returns bool if a valid DNS TXT record exist for provided host
266-
func isDNSLinkName(ctx context.Context, api API, host string) bool {
264+
// hasDNSLinkRecord returns if a DNS TXT record exists for the provided host.
265+
func hasDNSLinkRecord(ctx context.Context, api API, host string) bool {
267266
dnslinkName := stripPort(host)
268267

269268
if !isDomainNameAndNotPeerID(dnslinkName) {
270269
return false
271270
}
272271

273272
name := "/ipns/" + dnslinkName
274-
_, err := api.ResolvePath(ctx, path.New(name))
275-
// check if DNSLink exists
276-
return err == nil || err == namesys.ErrResolveRecursion
273+
return api.HasDNSLinkRecord(ctx, path.New(name))
277274
}
278275

279276
func isSubdomainNamespace(ns string) bool {
@@ -456,7 +453,7 @@ func toSubdomainURL(hostname, path string, r *http.Request, inlineDNSLink bool,
456453
// represented as a single DNS label:
457454
// https://my-v--long-example-com.ipns.dweb.link
458455
if (inlineDNSLink || isHTTPS) && ns == "ipns" && strings.Contains(rootID, ".") {
459-
if isDNSLinkName(r.Context(), api, rootID) {
456+
if hasDNSLinkRecord(r.Context(), api, rootID) {
460457
// my.v-long.example.com → my-v--long-example-com
461458
dnsLabel, err := toDNSLinkDNSLabel(rootID)
462459
if err != nil {

go.mod

-7
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ require (
2727
github.com/ipfs/go-log v1.0.5
2828
github.com/ipfs/go-log/v2 v2.5.1
2929
github.com/ipfs/go-metrics-interface v0.0.1
30-
github.com/ipfs/go-namesys v0.7.0
3130
github.com/ipfs/go-path v0.3.0
3231
github.com/ipfs/go-peertaskqueue v0.8.0
3332
github.com/ipfs/interface-go-ipfs-core v0.10.0
@@ -65,8 +64,6 @@ require (
6564
github.com/go-logr/stdr v1.2.2 // indirect
6665
github.com/golang/protobuf v1.5.2 // indirect
6766
github.com/google/gopacket v1.1.19 // indirect
68-
github.com/hashicorp/errwrap v1.1.0 // indirect
69-
github.com/hashicorp/go-multierror v1.1.1 // indirect
7067
github.com/hashicorp/golang-lru v0.5.4 // indirect
7168
github.com/huin/goupnp v1.0.3 // indirect
7269
github.com/ipfs/bbloom v0.0.4 // indirect
@@ -85,8 +82,6 @@ require (
8582
github.com/koron/go-ssdp v0.0.3 // indirect
8683
github.com/libp2p/go-cidranger v1.1.0 // indirect
8784
github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect
88-
github.com/libp2p/go-libp2p-kad-dht v0.19.0 // indirect
89-
github.com/libp2p/go-libp2p-kbucket v0.5.0 // indirect
9085
github.com/libp2p/go-nat v0.1.0 // indirect
9186
github.com/libp2p/go-netroute v0.2.0 // indirect
9287
github.com/libp2p/go-openssl v0.1.0 // indirect
@@ -111,9 +106,7 @@ require (
111106
github.com/spaolacci/murmur3 v1.1.0 // indirect
112107
github.com/stretchr/objx v0.5.0 // indirect
113108
github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
114-
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
115109
github.com/whyrusleeping/cbor-gen v0.0.0-20221220214510-0333c149dec0 // indirect
116-
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
117110
go.uber.org/atomic v1.10.0 // indirect
118111
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
119112
golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b // indirect

go.sum

-13
Original file line numberDiff line numberDiff line change
@@ -309,14 +309,10 @@ github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmv
309309
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
310310
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
311311
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
312-
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
313-
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
314312
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
315313
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
316314
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
317315
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
318-
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
319-
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
320316
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
321317
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
322318
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
@@ -464,8 +460,6 @@ github.com/ipfs/go-merkledag v0.9.0 h1:DFC8qZ96Dz1hMT7dtIpcY524eFFDiEWAF8hNJHWW2
464460
github.com/ipfs/go-merkledag v0.9.0/go.mod h1:bPHqkHt5OZ0p1n3iqPeDiw2jIBkjAytRjS3WSBwjq90=
465461
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
466462
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
467-
github.com/ipfs/go-namesys v0.7.0 h1:xqosk71GIVRkFDtF2UNRcXn4LdNeo7tzuy8feHD6NbU=
468-
github.com/ipfs/go-namesys v0.7.0/go.mod h1:KYSZBVZG3VJC34EfqqJPG7T48aWgxseoMPAPA5gLyyQ=
469463
github.com/ipfs/go-path v0.3.0 h1:tkjga3MtpXyM5v+3EbRvOHEoo+frwi4oumw5K+KYWyA=
470464
github.com/ipfs/go-path v0.3.0/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
471465
github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U=
@@ -615,10 +609,6 @@ github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFT
615609
github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg=
616610
github.com/libp2p/go-libp2p-discovery v0.3.0/go.mod h1:o03drFnz9BVAZdzC/QUQ+NeQOu38Fu7LJGEOK2gQltw=
617611
github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug=
618-
github.com/libp2p/go-libp2p-kad-dht v0.19.0 h1:2HuiInHZTm9ZvQajaqdaPLHr0PCKKigWiflakimttE0=
619-
github.com/libp2p/go-libp2p-kad-dht v0.19.0/go.mod h1:qPIXdiZsLczhV4/+4EO1jE8ae0YCW4ZOogc4WVIyTEU=
620-
github.com/libp2p/go-libp2p-kbucket v0.5.0 h1:g/7tVm8ACHDxH29BGrpsQlnNeu+6OF1A9bno/4/U1oA=
621-
github.com/libp2p/go-libp2p-kbucket v0.5.0/go.mod h1:zGzGCpQd78b5BNTDGHNDLaTt9aDK/A02xeZp9QeFC4U=
622612
github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90=
623613
github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo=
624614
github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE=
@@ -1078,13 +1068,10 @@ github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvS
10781068
github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
10791069
github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a h1:G++j5e0OC488te356JvdhaM8YS6nMsjLAYF7JxCv07w=
10801070
github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
1081-
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboadS0DvysUuJXZ4lWVv5Bh5i7+tbIyi+ck4=
1082-
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM=
10831071
github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI=
10841072
github.com/whyrusleeping/cbor-gen v0.0.0-20221220214510-0333c149dec0 h1:obKzQ1ey5AJg5NKjgtTo/CKwLImVP4ETLRcsmzFJ4Qw=
10851073
github.com/whyrusleeping/cbor-gen v0.0.0-20221220214510-0333c149dec0/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ=
10861074
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8=
1087-
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k=
10881075
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc=
10891076
github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM=
10901077
github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE=

0 commit comments

Comments
 (0)