@cryptotaxi247 / kubo / commits / e5b33924a

fix: correct list of addresses for delegated routing (#9920)

Ivan Schasny committed Jun 7, 2023 at 16:59 UTC e5b33924a7730aa61c2cda0b8c63c3419a2511a0
4 files changed +67 -5
cmd/ipfs/daemon.go
+1 -1
@@ -429,7 +429,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
429 cfg.Routing.Routers,
430 cfg.Routing.Methods,
431 cfg.Identity.PeerID,
432 - cfg.Addresses.Swarm,
432 + cfg.Addresses,
433 cfg.Identity.PrivKey,
434 )
435 default:
core/core_test.go
+1 -1
@@ -256,7 +256,7 @@ func GetNode(t *testing.T, reframeURLs ...string) *IpfsNode {
256 cfg.Routing.Routers,
257 cfg.Routing.Methods,
258 cfg.Identity.PeerID,
259 - cfg.Addresses.Swarm,
259 + cfg.Addresses,
260 cfg.Identity.PrivKey,
261 ),
262 },
core/node/libp2p/routingopt.go
+31 -3
@@ -47,7 +47,7 @@ func constructDefaultHTTPRouters(cfg *config.Config) ([]*routinghelpers.Parallel
47 var routers []*routinghelpers.ParallelRouter
48 // Append HTTP routers for additional speed
49 for _, endpoint := range defaultHTTPRouters {
50 - httpRouter, err := irouting.ConstructHTTPRouter(endpoint, cfg.Identity.PeerID, cfg.Addresses.Swarm, cfg.Identity.PrivKey)
50 + httpRouter, err := irouting.ConstructHTTPRouter(endpoint, cfg.Identity.PeerID, httpAddrsFromConfig(cfg.Addresses), cfg.Identity.PrivKey)
51 if err != nil {
52 return nil, err
53 }
@@ -123,7 +123,7 @@ func constructDHTRouting(mode dht.ModeOpt) RoutingOption {
123 }
124
125 // ConstructDelegatedRouting is used when Routing.Type = "custom"
126 -func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, peerID string, addrs []string, privKey string) RoutingOption {
126 +func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, peerID string, addrs config.Addresses, privKey string) RoutingOption {
127 return func(args RoutingOptionArgs) (routing.Routing, error) {
128 return irouting.Parse(routers, methods,
129 &irouting.ExtraDHTParams{
@@ -135,7 +135,7 @@ func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, p
135 },
136 &irouting.ExtraHTTPParams{
137 PeerID: peerID,
138 - Addrs: addrs,
138 + Addrs: httpAddrsFromConfig(addrs),
139 PrivKeyB64: privKey,
140 })
141 }
@@ -151,3 +151,31 @@ var (
151 DHTServerOption = constructDHTRouting(dht.ModeServer)
152 NilRouterOption = constructNilRouting
153 )
154 +
155 +// httpAddrsFromConfig creates a list of addresses from the provided configuration to be used by HTTP delegated routers.
156 +func httpAddrsFromConfig(cfgAddrs config.Addresses) []string {
157 + // Swarm addrs are announced by default
158 + addrs := cfgAddrs.Swarm
159 + // if Announce addrs are specified - override Swarm
160 + if len(cfgAddrs.Announce) > 0 {
161 + addrs = cfgAddrs.Announce
162 + } else if len(cfgAddrs.NoAnnounce) > 0 {
163 + // if Announce adds are not specified - filter Swarm addrs with NoAnnounce list
164 + maddrs := map[string]struct{}{}
165 + for _, addr := range addrs {
166 + maddrs[addr] = struct{}{}
167 + }
168 + for _, addr := range cfgAddrs.NoAnnounce {
169 + delete(maddrs, addr)
170 + }
171 + addrs = make([]string, 0, len(maddrs))
172 + for k := range maddrs {
173 + addrs = append(addrs, k)
174 + }
175 + }
176 + // append AppendAnnounce addrs to the result list
177 + if len(cfgAddrs.AppendAnnounce) > 0 {
178 + addrs = append(addrs, cfgAddrs.AppendAnnounce...)
179 + }
180 + return addrs
181 +}
core/node/libp2p/routingopt_test.go new
+34
@@ -0,0 +1,34 @@
1 +package libp2p
2 +
3 +import (
4 + "testing"
5 +
6 + config "github.com/ipfs/kubo/config"
7 + "github.com/stretchr/testify/require"
8 +)
9 +
10 +func TestHttpAddrsFromConfig(t *testing.T) {
11 + require.Equal(t, []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
12 + httpAddrsFromConfig(config.Addresses{
13 + Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
14 + }), "Swarm addrs should be taken by default")
15 +
16 + require.Equal(t, []string{"/ip4/192.168.0.1/tcp/4001"},
17 + httpAddrsFromConfig(config.Addresses{
18 + Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
19 + Announce: []string{"/ip4/192.168.0.1/tcp/4001"},
20 + }), "Announce addrs should override Swarm if specified")
21 +
22 + require.Equal(t, []string{"/ip4/0.0.0.0/udp/4001/quic"},
23 + httpAddrsFromConfig(config.Addresses{
24 + Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
25 + NoAnnounce: []string{"/ip4/0.0.0.0/tcp/4001"},
26 + }), "Swarm addrs should not contain NoAnnounce addrs")
27 +
28 + require.Equal(t, []string{"/ip4/192.168.0.1/tcp/4001", "/ip4/192.168.0.2/tcp/4001"},
29 + httpAddrsFromConfig(config.Addresses{
30 + Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
31 + Announce: []string{"/ip4/192.168.0.1/tcp/4001"},
32 + AppendAnnounce: []string{"/ip4/192.168.0.2/tcp/4001"},
33 + }), "AppendAnnounce addrs should be included if specified")
34 +}