@cryptotaxi247 / kubo / commits / cf6b52e4b

extract go-ipfs-addr

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Oct 24, 2017 at 07:14 UTC cf6b52e4b05dc68131d7861c4e22346b21eb4b90
5 files changed +8 -262
core/commands/swarm.go
+1 -1
@@ -13,9 +13,9 @@ import (
13 repo "github.com/ipfs/go-ipfs/repo"
14 config "github.com/ipfs/go-ipfs/repo/config"
15 "github.com/ipfs/go-ipfs/repo/fsrepo"
16 - iaddr "github.com/ipfs/go-ipfs/thirdparty/ipfsaddr"
16 pstore "gx/ipfs/QmPgDWmTmuzvP7QE5zwo1TmjbJme9pmZHNujB2453jkCTr/go-libp2p-peerstore"
17 swarm "gx/ipfs/QmdQFrFnPrKRQtpeHKjZ3cVNwxmGKKS2TvhJTuN9C9yduh/go-libp2p-swarm"
18 + iaddr "gx/ipfs/QmeS8cCKawUwejVrsBtmC1toTXmwVWZGiRJqzgTURVWeF9/go-ipfs-addr"
19
20 mafilter "gx/ipfs/QmSMZwvs3n4GBikZ7hKzT17c3bk65FmyZo2JqtJ16swqCv/multiaddr-filter"
21 ma "gx/ipfs/QmXY77cVe7rVRQXZZQRioukUM7aRW3BTcAgJe12MCtb3Ji/go-multiaddr"
package.json
+6
@@ -481,6 +481,12 @@
481 "hash": "QmYkCrTwivapqdB3JbwvwvxymseahVkcm46ThRMAA24zCr",
482 "name": "go-libp2p-interface-connmgr",
483 "version": "0.0.2"
484 + },
485 + {
486 + "author": "why",
487 + "hash": "QmeS8cCKawUwejVrsBtmC1toTXmwVWZGiRJqzgTURVWeF9",
488 + "name": "go-ipfs-addr",
489 + "version": "0.1.1"
490 }
491 ],
492 "gxVersion": "0.10.0",
repo/config/bootstrap_peers.go
+1 -1
@@ -4,7 +4,7 @@ import (
4 "errors"
5 "fmt"
6
7 - iaddr "github.com/ipfs/go-ipfs/thirdparty/ipfsaddr"
7 + iaddr "gx/ipfs/QmeS8cCKawUwejVrsBtmC1toTXmwVWZGiRJqzgTURVWeF9/go-ipfs-addr"
8 )
9
10 // DefaultBootstrapAddresses are the hardcoded bootstrap addresses
thirdparty/ipfsaddr/ipfsaddr.go deleted
-123
@@ -1,123 +0,0 @@
1 -package ipfsaddr
2 -
3 -import (
4 - "errors"
5 -
6 - ma "gx/ipfs/QmXY77cVe7rVRQXZZQRioukUM7aRW3BTcAgJe12MCtb3Ji/go-multiaddr"
7 -
8 - path "github.com/ipfs/go-ipfs/path"
9 - logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
10 - peer "gx/ipfs/QmXYjuNuxVzXKJCfWasQk1RqkhVLDM9jtUKhqc2WPQmFSB/go-libp2p-peer"
11 - circuit "gx/ipfs/Qmf7GSJ4omRJsvA9uzTqzbnVhq4RWLPzjzW4xJzUta4dKE/go-libp2p-circuit"
12 -)
13 -
14 -var log = logging.Logger("ipfsaddr")
15 -
16 -// ErrInvalidAddr signals an address is not a valid IPFS address.
17 -var ErrInvalidAddr = errors.New("invalid IPFS address")
18 -
19 -type IPFSAddr interface {
20 - ID() peer.ID
21 - Multiaddr() ma.Multiaddr
22 - Transport() ma.Multiaddr
23 - String() string
24 - Equal(b interface{}) bool
25 -}
26 -
27 -type ipfsAddr struct {
28 - ma ma.Multiaddr
29 - id peer.ID
30 -}
31 -
32 -func (a ipfsAddr) ID() peer.ID {
33 - return a.id
34 -}
35 -
36 -func (a ipfsAddr) Multiaddr() ma.Multiaddr {
37 - return a.ma
38 -}
39 -
40 -func (a ipfsAddr) Transport() ma.Multiaddr {
41 - return Transport(a)
42 -}
43 -
44 -func (a ipfsAddr) String() string {
45 - return a.ma.String()
46 -}
47 -
48 -func (a ipfsAddr) Equal(b interface{}) bool {
49 - if ib, ok := b.(IPFSAddr); ok {
50 - return a.Multiaddr().Equal(ib.Multiaddr())
51 - }
52 - if mb, ok := b.(ma.Multiaddr); ok {
53 - return a.Multiaddr().Equal(mb)
54 - }
55 - return false
56 -}
57 -
58 -// ParseString parses a string representation of an address into an IPFSAddr
59 -func ParseString(str string) (a IPFSAddr, err error) {
60 - if str == "" {
61 - return nil, ErrInvalidAddr
62 - }
63 -
64 - m, err := ma.NewMultiaddr(str)
65 - if err != nil {
66 - return nil, err
67 - }
68 -
69 - return ParseMultiaddr(m)
70 -}
71 -
72 -// ParseMultiaddr parses a multiaddr into an IPFSAddr
73 -func ParseMultiaddr(m ma.Multiaddr) (a IPFSAddr, err error) {
74 - // never panic.
75 - defer func() {
76 - if r := recover(); r != nil {
77 - log.Debug("recovered from panic: ", r)
78 - a = nil
79 - err = ErrInvalidAddr
80 - }
81 - }()
82 -
83 - if m == nil {
84 - return nil, ErrInvalidAddr
85 - }
86 -
87 - // make sure it's an IPFS addr
88 - parts := ma.Split(m)
89 - if len(parts) < 1 {
90 - return nil, ErrInvalidAddr
91 - }
92 - ipfspart := parts[len(parts)-1] // last part
93 - if ipfspart.Protocols()[0].Code != ma.P_IPFS {
94 - return nil, ErrInvalidAddr
95 - }
96 -
97 - // make sure 'ipfs id' parses as a peer.ID
98 - peerIdParts := path.SplitList(ipfspart.String())
99 - peerIdStr := peerIdParts[len(peerIdParts)-1]
100 - id, err := peer.IDB58Decode(peerIdStr)
101 - if err != nil {
102 - return nil, err
103 - }
104 -
105 - return ipfsAddr{ma: m, id: id}, nil
106 -}
107 -
108 -func Transport(iaddr IPFSAddr) (maddr ma.Multiaddr) {
109 - maddr = iaddr.Multiaddr()
110 -
111 - // /ipfs/QmId is part of the transport address for p2p-circuit
112 - // TODO clean up the special case
113 - // we need a consistent way of composing and consumig multiaddrs
114 - // so that we don't have to do this
115 - _, err := maddr.ValueForProtocol(circuit.P_CIRCUIT)
116 - if err == nil {
117 - return maddr
118 - }
119 -
120 - split := ma.Split(maddr)
121 - maddr = ma.Join(split[:len(split)-1]...)
122 - return
123 -}
thirdparty/ipfsaddr/ipfsaddr_test.go deleted
-137
@@ -1,137 +0,0 @@
1 -package ipfsaddr
2 -
3 -import (
4 - "testing"
5 -
6 - path "github.com/ipfs/go-ipfs/path"
7 - ma "gx/ipfs/QmXY77cVe7rVRQXZZQRioukUM7aRW3BTcAgJe12MCtb3Ji/go-multiaddr"
8 - peer "gx/ipfs/QmXYjuNuxVzXKJCfWasQk1RqkhVLDM9jtUKhqc2WPQmFSB/go-libp2p-peer"
9 -)
10 -
11 -var good = []string{
12 - "/ipfs/5dru6bJPUM1B7N69528u49DJiWZnok",
13 - "/ipfs/kTRX47RthhwNzWdi6ggwqjuX",
14 - "/ipfs/QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR",
15 - "/ip4/1.2.3.4/tcp/1234/ipfs/5dru6bJPUM1B7N69528u49DJiWZnok",
16 - "/ip4/1.2.3.4/tcp/1234/ipfs/kTRX47RthhwNzWdi6ggwqjuX",
17 - "/ip4/1.2.3.4/tcp/1234/ipfs/QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR",
18 -}
19 -
20 -var bad = []string{
21 - "5dru6bJPUM1B7N69528u49DJiWZnok", // bad ma
22 - "kTRX47RthhwNzWdi6ggwqjuX", // bad ma
23 - "QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR", // bad ma
24 - "ipfs/5dru6bJPUM1B7N69528u49DJiWZnok", // bad ma
25 - "ipfs/kTRX47RthhwNzWdi6ggwqjuX", // bad ma
26 - "ipfs/QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR", // bad ma
27 - "/ipfs/5dru6bJPUM1B7N69528u49DJiWZno", // bad mh
28 - "/ipfs/kTRX47RthhwNzWdi6ggwqju", // bad mh
29 - "/ipfs/QmUCseQWXCSrhf9edzVKTvj8o8Ts5aXFGNPameZRPJ6uR", // bad mh
30 - "/ipfs/QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR/tcp/1234", // ipfs not last
31 - "/ip4/1.2.3.4/tcp/ipfs/5dru6bJPUM1B7N69528u49DJiWZnok", // bad tcp part
32 - "/ip4/tcp/1234/ipfs/kTRX47RthhwNzWdi6ggwqjuX", // bad ip part
33 - "/ip4/1.2.3.4/tcp/1234/ipfs", // no id
34 - "/ip4/1.2.3.4/tcp/1234/ipfs/", // no id
35 -}
36 -
37 -func newMultiaddr(t *testing.T, s string) ma.Multiaddr {
38 - maddr, err := ma.NewMultiaddr(s)
39 - if err != nil {
40 - t.Fatal(err)
41 - }
42 - return maddr
43 -}
44 -
45 -func TestParseStringGood(t *testing.T) {
46 - for _, g := range good {
47 - if _, err := ParseString(g); err != nil {
48 - t.Error("failed to parse", g, err)
49 - }
50 - }
51 -}
52 -
53 -func TestParseStringBad(t *testing.T) {
54 - for _, b := range bad {
55 - if _, err := ParseString(b); err == nil {
56 - t.Error("succeeded in parsing", b)
57 - }
58 - }
59 -}
60 -
61 -func TestParseMultiaddrGood(t *testing.T) {
62 - for _, g := range good {
63 - if _, err := ParseMultiaddr(newMultiaddr(t, g)); err != nil {
64 - t.Error("failed to parse", g, err)
65 - }
66 - }
67 -}
68 -
69 -func TestParseMultiaddrBad(t *testing.T) {
70 - for _, b := range bad {
71 - m, err := ma.NewMultiaddr(b)
72 - if err != nil {
73 - continue // skip these.
74 - }
75 -
76 - if _, err := ParseMultiaddr(m); err == nil {
77 - t.Error("succeeded in parsing", m)
78 - }
79 - }
80 -}
81 -
82 -func TestIDMatches(t *testing.T) {
83 - for _, g := range good {
84 - a, err := ParseString(g)
85 - if err != nil {
86 - t.Error("failed to parse", g, err)
87 - continue
88 - }
89 -
90 - sp := path.SplitList(g)
91 - sid := sp[len(sp)-1]
92 - id, err := peer.IDB58Decode(sid)
93 - if err != nil {
94 - t.Error("failed to parse", sid, err)
95 - continue
96 - }
97 -
98 - if a.ID() != id {
99 - t.Error("not equal", a.ID(), id)
100 - }
101 - }
102 -}
103 -
104 -func TestMultiaddrMatches(t *testing.T) {
105 - for _, g := range good {
106 - a, err := ParseString(g)
107 - if err != nil {
108 - t.Error("failed to parse", g, err)
109 - continue
110 - }
111 -
112 - m := newMultiaddr(t, g)
113 - if !a.Multiaddr().Equal(m) {
114 - t.Error("not equal", a.Multiaddr(), m)
115 - }
116 - }
117 -}
118 -
119 -func TestTransport(t *testing.T) {
120 - for _, g := range good {
121 - a, err := ParseString(g)
122 - if err != nil {
123 - t.Error("failed to parse", g, err)
124 - continue
125 - }
126 -
127 - m := newMultiaddr(t, g)
128 - split := ma.Split(m)
129 - m = ma.Join(split[:len(split)-1]...)
130 - if a.Multiaddr().Equal(m) {
131 - t.Error("should not be equal", a.Multiaddr(), m)
132 - }
133 - if !Transport(a).Equal(m) {
134 - t.Error("should be equal", Transport(a), m)
135 - }
136 - }
137 -}