Skip to content

Commit 134e0f9

Browse files
committed
fix(DatasetRef): fixes to datasetRef handling
1 parent e1e46f4 commit 134e0f9

File tree

7 files changed

+66
-42
lines changed

7 files changed

+66
-42
lines changed

api/peers.go

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import (
99
"github.com/qri-io/qri/p2p"
1010
"github.com/qri-io/qri/repo"
1111
"github.com/qri-io/qri/repo/profile"
12-
// peer "gx/ipfs/QmXYjuNuxVzXKJCfWasQk1RqkhVLDM9jtUKhqc2WPQmFSB/go-libp2p-peer"
12+
13+
peer "gx/ipfs/QmXYjuNuxVzXKJCfWasQk1RqkhVLDM9jtUKhqc2WPQmFSB/go-libp2p-peer"
1314
)
1415

1516
// PeerHandlers wraps a requests struct to interface with http.HandlerFunc
@@ -50,18 +51,17 @@ func (h *PeerHandlers) PeerHandler(w http.ResponseWriter, r *http.Request) {
5051
}
5152
}
5253

53-
// TODO: add back connect endpoint
5454
// ConnectToPeerHandler is the endpoint for explicitly connecting to a peer
55-
// func (h *PeerHandlers) ConnectToPeerHandler(w http.ResponseWriter, r *http.Request) {
56-
// switch r.Method {
57-
// case "OPTIONS":
58-
// util.EmptyOkHandler(w, r)
59-
// case "GET":
60-
// h.connectToPeerHandler(w, r)
61-
// default:
62-
// util.NotFoundHandler(w, r)
63-
// }
64-
// }
55+
func (h *PeerHandlers) ConnectToPeerHandler(w http.ResponseWriter, r *http.Request) {
56+
switch r.Method {
57+
case "OPTIONS":
58+
util.EmptyOkHandler(w, r)
59+
case "GET":
60+
h.connectToPeerHandler(w, r)
61+
default:
62+
util.NotFoundHandler(w, r)
63+
}
64+
}
6565

6666
// ConnectionsHandler is the endpoint for listing qri & IPFS connections
6767
func (h *PeerHandlers) ConnectionsHandler(w http.ResponseWriter, r *http.Request) {
@@ -120,21 +120,21 @@ func (h *PeerHandlers) namespaceHandler(w http.ResponseWriter, r *http.Request)
120120

121121
}
122122

123-
// TODO: add back connect endpoint
124-
// func (h *PeerHandlers) connectToPeerHandler(w http.ResponseWriter, r *http.Request) {
125-
// b58pid := r.URL.Path[len("/connect/"):]
126-
// pid, err := peer.IDB58Decode(b58pid)
127-
// if err != nil {
128-
// util.WriteErrResponse(w, http.StatusBadRequest, err)
129-
// return
130-
// }
131-
132-
// res := &profile.Profile{}
133-
// if err := h.ConnectToPeer(&pid, res); err != nil {
134-
// h.log.Infof("error connecting to peer: %s", err.Error())
135-
// util.WriteErrResponse(w, http.StatusInternalServerError, err)
136-
// return
137-
// }
138-
139-
// util.WriteResponse(w, res)
140-
// }
123+
func (h *PeerHandlers) connectToPeerHandler(w http.ResponseWriter, r *http.Request) {
124+
b58pid := r.URL.Path[len("/connect/"):]
125+
126+
pid, err := peer.IDB58Decode(b58pid)
127+
if err != nil {
128+
util.WriteErrResponse(w, http.StatusBadRequest, err)
129+
return
130+
}
131+
132+
res := &profile.Profile{}
133+
if err := h.ConnectToPeer(&pid, res); err != nil {
134+
h.log.Infof("error connecting to peer: %s", err.Error())
135+
util.WriteErrResponse(w, http.StatusInternalServerError, err)
136+
return
137+
}
138+
139+
util.WriteResponse(w, res)
140+
}

api/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,8 @@ func NewServerRoutes(s *Server) *http.ServeMux {
224224
ph := NewPeerHandlers(s.log, s.qriNode.Repo, s.qriNode)
225225
m.Handle("/peers", s.middleware(ph.PeersHandler))
226226
m.Handle("/peers/", s.middleware(ph.PeerHandler))
227-
// TODO - add back connect endpoint
228-
// m.Handle("/connect/", s.middleware(ph.ConnectToPeerHandler))
227+
228+
m.Handle("/connect/", s.middleware(ph.ConnectToPeerHandler))
229229
m.Handle("/connections", s.middleware(ph.ConnectionsHandler))
230230

231231
dsh := NewDatasetHandlers(s.log, s.qriNode.Repo)

api/server_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ func TestServerRoutes(t *testing.T) {
7070
{"GET", "/export/me/cities", "", "", 200},
7171
{"GET", "/diff", "diffRequest.json", "diffResponse.json", 200},
7272
{"GET", "/diff", "diffRequestPlusMinusColor.json", "diffResponsePlusMinusColor.json", 200},
73+
{"GET", "/connect/", "", "", 400},
7374
// blatently checking all options for easy test coverage bump
7475
{"OPTIONS", "/add", "", "", 200},
7576
{"OPTIONS", "/add/", "", "", 200},

core/datasets.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,22 +70,27 @@ func (r *DatasetRequests) List(p *ListParams, res *[]repo.DatasetRef) error {
7070
PeerID: p.PeerID,
7171
}
7272

73+
if ds.Peername == "" && ds.PeerID == "" {
74+
ds.Peername = "me"
75+
}
76+
77+
pro, err := r.repo.Profile()
78+
if err != nil {
79+
return fmt.Errorf("error getting profile: %s", err.Error())
80+
}
81+
7382
if err := repo.CanonicalizePeer(r.repo, ds); err != nil {
7483
return fmt.Errorf("error canonicalizing peer: %s", err.Error())
7584
}
7685

77-
if ds.Peername != "" && r.Node != nil {
86+
if ds.Peername != pro.Peername {
87+
if r.Node == nil {
88+
return fmt.Errorf("cannot list remote datasets without p2p connection")
89+
}
90+
7891
replies, err := r.Node.RequestDatasetsList(ds.Peername)
7992
*res = replies
8093
return err
81-
} else if ds.Peername != "" {
82-
pro, err := r.repo.Profile()
83-
if err != nil {
84-
return err
85-
}
86-
if pro.Peername != ds.Peername && r.Node == nil {
87-
return fmt.Errorf("cannot list remote datasets without p2p connection")
88-
}
8994
}
9095

9196
store := r.repo.Store()

core/peers.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,16 @@ func (d *PeerRequests) ConnectToPeer(pid *peer.ID, res *profile.Profile) error {
124124
return d.cli.Call("PeerRequests.ConnectToPeer", pid, res)
125125
}
126126

127+
if profile, err := d.qriNode.Repo.Peers().GetPeer(*pid); err == nil {
128+
*pid, err = profile.IPFSPeerID()
129+
if err != nil {
130+
return fmt.Errorf("error getting IPFS peer ID: %s", err.Error())
131+
}
132+
}
133+
// if err != nil {
134+
// return fmt.Errorf("error getting peer profile: %s", err.Error())
135+
// }
136+
127137
if err := d.qriNode.ConnectToPeer(*pid); err != nil {
128138
return fmt.Errorf("error connecting to peer: %s", err.Error())
129139
}

repo/fs/peer_store.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func (r PeerStore) GetPeer(id peer.ID) (*profile.Profile, error) {
6666

6767
ids := id.Pretty()
6868
for p, d := range ps {
69-
if ids == p {
69+
if ids == p || d.ID == ids {
7070
return d, nil
7171
}
7272
}

repo/fs/refstore.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,14 @@ func (n *Refstore) names() ([]repo.DatasetRef, error) {
162162
for i, rs := range refs {
163163
ref, err := repo.ParseDatasetRef(rs)
164164
if err != nil {
165+
// hold over for
166+
// TODO - remove by 0.3.0
167+
if err.Error() == "invalid PeerID: 'ipfs'" {
168+
ref.PeerID = ""
169+
ref.Path = fmt.Sprintf("/ipfs/%s", ref.Path)
170+
ns[i] = ref
171+
continue
172+
}
165173
return nil, err
166174
}
167175
ns[i] = ref

0 commit comments

Comments
 (0)