@cryptotaxi247 / kubo / commits / 8382c797f

use dagreader in servehttp

verokarhu committed Sep 28, 2014 at 12:26 UTC 8382c797fcc415802be875a72a929357de49f972
3 files changed +30 -2
server/http/http.go
+11 -2
@@ -2,6 +2,7 @@ package http
2
3 import (
4 "fmt"
5 + "io"
6 "net/http"
7
8 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gorilla/mux"
@@ -30,11 +31,19 @@ func (i *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
31 nd, err := i.ResolvePath(path)
32 if err != nil {
33 w.WriteHeader(http.StatusInternalServerError)
34 + fmt.Println(err)
35 + return
36 + }
37 +
38 + dr, err := i.NewDagReader(nd)
39 + if err != nil {
40 + // TODO: return json object containing the tree data if it's a directory (err == ErrIsDir)
41 + w.WriteHeader(http.StatusInternalServerError)
42 + fmt.Println(err)
43 return
44 }
45
36 - // TODO: return json object containing the tree data if it's a folder
37 - w.Write(nd.Data)
46 + io.Copy(w, dr)
47 }
48
49 func (i *handler) postHandler(w http.ResponseWriter, r *http.Request) {
server/http/http_test.go
+14
@@ -1,6 +1,7 @@
1 package http
2
3 import (
4 + "bytes"
5 "errors"
6 "io"
7 "io/ioutil"
@@ -25,6 +26,7 @@ func TestServeHTTP(t *testing.T) {
26 tests := []test{
27 {"/", http.StatusInternalServerError, "", ""},
28 {"/hash", http.StatusOK, "", "some fine data"},
29 + {"/hash2", http.StatusInternalServerError, "", ""},
30 }
31
32 for _, test := range tests {
@@ -74,6 +76,10 @@ func (i *testIpfsHandler) ResolvePath(path string) (*dag.Node, error) {
76 return &dag.Node{Data: []byte("some fine data")}, nil
77 }
78
79 + if path == "/hash2" {
80 + return &dag.Node{Data: []byte("data that breaks dagreader")}, nil
81 + }
82 +
83 return nil, errors.New("")
84 }
85
@@ -92,3 +98,11 @@ func (i *testIpfsHandler) AddNodeToDAG(nd *dag.Node) (u.Key, error) {
98
99 return "", errors.New("")
100 }
101 +
102 +func (i *testIpfsHandler) NewDagReader(nd *dag.Node) (io.Reader, error) {
103 + if string(nd.Data) != "data that breaks dagreader" {
104 + return bytes.NewReader(nd.Data), nil
105 + }
106 +
107 + return nil, errors.New("")
108 +}
server/http/ipfs.go
+5
@@ -13,6 +13,7 @@ type ipfs interface {
13 ResolvePath(string) (*dag.Node, error)
14 NewDagFromReader(io.Reader) (*dag.Node, error)
15 AddNodeToDAG(nd *dag.Node) (u.Key, error)
16 + NewDagReader(nd *dag.Node) (io.Reader, error)
17 }
18
19 type ipfsHandler struct {
@@ -30,3 +31,7 @@ func (i *ipfsHandler) NewDagFromReader(r io.Reader) (*dag.Node, error) {
31 func (i *ipfsHandler) AddNodeToDAG(nd *dag.Node) (u.Key, error) {
32 return i.node.DAG.Add(nd)
33 }
34 +
35 +func (i *ipfsHandler) NewDagReader(nd *dag.Node) (io.Reader, error) {
36 + return dag.NewDagReader(nd, i.node.DAG)
37 +}