Skip to content

Commit df46bee

Browse files
committed
feat: add IPNS record handler for the default /ipfs protocol prefix
1 parent 4a4e60e commit df46bee

File tree

4 files changed

+30
-3
lines changed

4 files changed

+30
-3
lines changed

dht.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ func New(ctx context.Context, h host.Host, options ...Option) (*IpfsDHT, error)
135135
if err := cfg.apply(append([]Option{defaults}, options...)...); err != nil {
136136
return nil, err
137137
}
138+
cfg.applyFallbacks(h)
138139

139140
if err := cfg.validate(); err != nil {
140141
return nil, err

dht_options.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66

77
ds "github.com/ipfs/go-datastore"
88
dssync "github.com/ipfs/go-datastore/sync"
9+
"github.com/ipfs/go-ipns"
10+
"github.com/libp2p/go-libp2p-core/host"
911
"github.com/libp2p/go-libp2p-core/network"
1012
"github.com/libp2p/go-libp2p-core/peer"
1113
"github.com/libp2p/go-libp2p-core/protocol"
@@ -67,6 +69,23 @@ func (c *config) apply(opts ...Option) error {
6769
return nil
6870
}
6971

72+
// applyFallbacks sets default values that could not be applied during config creation since they are dependent
73+
// on other configuration parameters (e.g. optA is by default 2x optB) and/or on the Host
74+
func (c *config) applyFallbacks(h host.Host) {
75+
if c.validator == nil {
76+
if c.protocolPrefix == DefaultPrefix {
77+
c.validator = record.NamespacedValidator{
78+
"pk": record.PublicKeyValidator{},
79+
"ipns": ipns.Validator{KeyBook: h.Peerstore()},
80+
}
81+
} else {
82+
c.validator = record.NamespacedValidator{
83+
"pk": record.PublicKeyValidator{},
84+
}
85+
}
86+
}
87+
}
88+
7089
// Option DHT option type.
7190
type Option func(*config) error
7291

@@ -75,9 +94,6 @@ const defaultBucketSize = 20
7594
// defaults are the default DHT options. This option will be automatically
7695
// prepended to any options you pass to the DHT constructor.
7796
var defaults = func(o *config) error {
78-
o.validator = record.NamespacedValidator{
79-
"pk": record.PublicKeyValidator{},
80-
}
8197
o.datastore = dssync.MutexWrap(ds.NewMapDatastore())
8298
o.protocolPrefix = DefaultPrefix
8399
o.enableProviders = true
@@ -175,6 +191,8 @@ func Mode(m ModeOpt) Option {
175191
// Validator configures the DHT to use the specified validator.
176192
//
177193
// Defaults to a namespaced validator that can only validate public keys.
194+
// For the default protocol prefix it defaults to a namespaced validator that
195+
// supports validating both public key and IPNS records
178196
func Validator(v record.Validator) Option {
179197
return func(c *config) error {
180198
c.validator = v

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111
github.com/ipfs/go-datastore v0.4.4
1212
github.com/ipfs/go-detect-race v0.0.1
1313
github.com/ipfs/go-ipfs-util v0.0.1
14+
github.com/ipfs/go-ipns v0.0.2
1415
github.com/ipfs/go-log v1.0.3
1516
github.com/jbenet/goprocess v0.1.4
1617
github.com/libp2p/go-eventbus v0.1.0

go.sum

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ github.com/ipfs/go-cid v0.0.5 h1:o0Ix8e/ql7Zb5UVUJEUfjsWCIY8t48++9lR8qi6oiJU=
105105
github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog=
106106
github.com/ipfs/go-datastore v0.0.1 h1:AW/KZCScnBWlSb5JbnEnLKFWXL224LBEh/9KXXOrUms=
107107
github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
108+
github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
109+
github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw=
108110
github.com/ipfs/go-datastore v0.4.0/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA=
109111
github.com/ipfs/go-datastore v0.4.1 h1:W4ZfzyhNi3xmuU5dQhjfuRn/wFuqEE1KnOmmQiOevEY=
110112
github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA=
@@ -114,12 +116,16 @@ github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ
114116
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
115117
github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8=
116118
github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s=
119+
github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk=
117120
github.com/ipfs/go-ds-badger v0.2.1/go.mod h1:Tx7l3aTph3FMFrRS838dcSJh+jjA7cX9DrGVwx/NOwE=
118121
github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc=
122+
github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8=
119123
github.com/ipfs/go-ds-leveldb v0.4.1/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s=
120124
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
121125
github.com/ipfs/go-ipfs-util v0.0.1 h1:Wz9bL2wB2YBJqggkA4dD7oSmqB4cAnpNbGrlHJulv50=
122126
github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc=
127+
github.com/ipfs/go-ipns v0.0.2 h1:oq4ErrV4hNQ2Eim257RTYRgfOSV/s8BDaf9iIl4NwFs=
128+
github.com/ipfs/go-ipns v0.0.2/go.mod h1:WChil4e0/m9cIINWLxZe1Jtf77oz5L05rO2ei/uKJ5U=
123129
github.com/ipfs/go-log v0.0.1 h1:9XTUN/rW64BCG1YhPK9Hoy3q8nr4gOmHHBpgFdfw6Lc=
124130
github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
125131
github.com/ipfs/go-log v1.0.2 h1:s19ZwJxH8rPWzypjcDpqPLIyV7BnbLqvpli3iZoqYK0=
@@ -247,6 +253,7 @@ github.com/libp2p/go-libp2p-peerstore v0.1.0 h1:MKh7pRNPHSh1fLPj8u/M/s/napdmeNpo
247253
github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY=
248254
github.com/libp2p/go-libp2p-peerstore v0.1.3 h1:wMgajt1uM2tMiqf4M+4qWKVyyFc8SfA+84VV9glZq1M=
249255
github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI=
256+
github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs=
250257
github.com/libp2p/go-libp2p-peerstore v0.2.0 h1:XcgJhI8WyUOCbHyRLNEX5542YNj8hnLSJ2G1InRjDhk=
251258
github.com/libp2p/go-libp2p-peerstore v0.2.0/go.mod h1:N2l3eVIeAitSg3Pi2ipSrJYnqhVnMNQZo9nkSCuAbnQ=
252259
github.com/libp2p/go-libp2p-peerstore v0.2.1 h1:u+gOfsKgu73ZkGWhvckRm03z9C+iS9TrLqpANweELGs=

0 commit comments

Comments
 (0)