Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit 7af2fb7

Browse files
committed
Fix bugs in GET moderators query
1 parent 5482c3a commit 7af2fb7

File tree

2 files changed

+40
-43
lines changed

2 files changed

+40
-43
lines changed

api/jsonapi.go

+12-43
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ import (
3737
lockfile "github.com/ipfs/go-ipfs/repo/fsrepo/lock"
3838
routing "github.com/ipfs/go-ipfs/routing/dht"
3939
"golang.org/x/net/context"
40-
"gx/ipfs/QmUAQaWbKxGCUTuoQVvvicbQNZ9APF5pDGWyAZSe93AtKH/go-multiaddr"
41-
"gx/ipfs/QmYDds3421prZgqKbLpEK7T9Aa2eVdQ7o3YarX1LVLdP2J/go-multihash"
40+
ps "gx/ipfs/QmeXj9VAjmYQZxpmVz7VzccbJrpmr8qkCDSjfVNsPTWTYU/go-libp2p-peerstore"
4241
peer "gx/ipfs/QmfMmLGoKzCHDN7cGgk64PJr4iipzidDRME8HABSJqvmhC/go-libp2p-peer"
4342
"sync"
4443
)
@@ -1574,26 +1573,11 @@ func (i *jsonAPIHandler) GETModerators(w http.ResponseWriter, r *http.Request) {
15741573
}
15751574
var mods []string
15761575
for _, p := range peerInfoList {
1577-
if len(p.Addrs) == 0 {
1578-
continue
1579-
}
1580-
addr := p.Addrs[0]
1581-
if addr.Protocols()[0].Code != multiaddr.P_IPFS {
1582-
continue
1583-
}
1584-
val, err := addr.ValueForProtocol(multiaddr.P_IPFS)
1576+
id, err := core.ExtractIDFromPointer(p)
15851577
if err != nil {
15861578
continue
15871579
}
1588-
mh, err := multihash.FromB58String(val)
1589-
if err != nil {
1590-
continue
1591-
}
1592-
d, err := multihash.Decode(mh)
1593-
if err != nil {
1594-
continue
1595-
}
1596-
mods = append(mods, string(d.Digest))
1580+
mods = append(mods, id)
15971581
}
15981582
var resp string
15991583
removeDuplicates(mods)
@@ -1608,7 +1592,7 @@ func (i *jsonAPIHandler) GETModerators(w http.ResponseWriter, r *http.Request) {
16081592
wg.Done()
16091593
return
16101594
}
1611-
resp := &pb.PeerAndProfile{mod, &profile}
1595+
resp := &pb.PeerAndProfile{m, &profile}
16121596
mar := jsonpb.Marshaler{
16131597
EnumsAsInts: false,
16141598
EmitDefaults: true,
@@ -1671,34 +1655,19 @@ func (i *jsonAPIHandler) GETModerators(w http.ResponseWriter, r *http.Request) {
16711655

16721656
found := make(map[string]bool)
16731657
for p := range peerChan {
1674-
go func() {
1675-
if len(p.Addrs) == 0 {
1676-
return
1677-
}
1678-
addr := p.Addrs[0]
1679-
if addr.Protocols()[0].Code != multiaddr.P_IPFS {
1680-
return
1681-
}
1682-
val, err := addr.ValueForProtocol(multiaddr.P_IPFS)
1683-
if err != nil {
1684-
return
1685-
}
1686-
mh, err := multihash.FromB58String(val)
1658+
go func(pi ps.PeerInfo) {
1659+
pid, err := core.ExtractIDFromPointer(pi)
16871660
if err != nil {
16881661
return
16891662
}
1690-
d, err := multihash.Decode(mh)
1691-
if err != nil {
1692-
return
1693-
}
1694-
if !found[string(d.Digest)] {
1695-
found[string(d.Digest)] = true
1663+
if !found[pid] {
1664+
found[pid] = true
16961665
if strings.ToLower(include) == "profile" {
1697-
profile, err := i.node.FetchProfile(string(d.Digest))
1666+
profile, err := i.node.FetchProfile(pid)
16981667
if err != nil {
16991668
return
17001669
}
1701-
resp := pb.PeerAndProfileWithID{id, string(d.Digest), &profile}
1670+
resp := pb.PeerAndProfileWithID{id, pid, &profile}
17021671
m := jsonpb.Marshaler{
17031672
EnumsAsInts: false,
17041673
EmitDefaults: true,
@@ -1711,15 +1680,15 @@ func (i *jsonAPIHandler) GETModerators(w http.ResponseWriter, r *http.Request) {
17111680
}
17121681
i.node.Broadcast <- []byte(respJson)
17131682
} else {
1714-
resp := wsResp{id, string(d.Digest)}
1683+
resp := wsResp{id, pid}
17151684
respJson, err := json.MarshalIndent(resp, "", " ")
17161685
if err != nil {
17171686
return
17181687
}
17191688
i.node.Broadcast <- []byte(respJson)
17201689
}
17211690
}
1722-
}()
1691+
}(p)
17231692
}
17241693
}()
17251694
}

core/utils.go

+28
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ package core
22

33
import (
44
"crypto/sha256"
5+
"errors"
6+
ma "gx/ipfs/QmUAQaWbKxGCUTuoQVvvicbQNZ9APF5pDGWyAZSe93AtKH/go-multiaddr"
57
mh "gx/ipfs/QmYDds3421prZgqKbLpEK7T9Aa2eVdQ7o3YarX1LVLdP2J/go-multihash"
8+
ps "gx/ipfs/QmeXj9VAjmYQZxpmVz7VzccbJrpmr8qkCDSjfVNsPTWTYU/go-libp2p-peerstore"
69
)
710

811
// Hash with SHA-256 and encode as a multihash
@@ -18,3 +21,28 @@ func EncodeMultihash(b []byte) (*mh.Multihash, error) {
1821
}
1922
return &multihash, err
2023
}
24+
25+
// Certain pointers, such as moderators, contain a peerID. This function
26+
// will extract the ID from the underlying PeerInfo object.
27+
func ExtractIDFromPointer(pi ps.PeerInfo) (string, error) {
28+
if len(pi.Addrs) == 0 {
29+
return "", errors.New("PeerInfo object has no addresses")
30+
}
31+
addr := pi.Addrs[0]
32+
if addr.Protocols()[0].Code != ma.P_IPFS {
33+
return "", errors.New("IPFS protocol not found in address")
34+
}
35+
val, err := addr.ValueForProtocol(ma.P_IPFS)
36+
if err != nil {
37+
return "", err
38+
}
39+
h, err := mh.FromB58String(val)
40+
if err != nil {
41+
return "", err
42+
}
43+
d, err := mh.Decode(h)
44+
if err != nil {
45+
return "", err
46+
}
47+
return string(d.Digest), nil
48+
}

0 commit comments

Comments
 (0)