@cryptotaxi247 / kubo / commits / 1794649bf

feat(gateway): error handling improvements (500, 502, 504) (#9660)

* fix(gateway): return 500 for all /ip[nf]s/id failures * fix: replace deprecated structs * chore: bump go-libipfs to version from main

Henrique Dias committed Feb 28, 2023 at 02:21 UTC 1794649bf2d4f8f1607a67f25632053a4d873617
6 files changed +20 -20
core/commands/bitswap.go
+3 -3
@@ -11,7 +11,7 @@ import (
11 cidutil "github.com/ipfs/go-cidutil"
12 cmds "github.com/ipfs/go-ipfs-cmds"
13 bitswap "github.com/ipfs/go-libipfs/bitswap"
14 - decision "github.com/ipfs/go-libipfs/bitswap/decision"
14 + "github.com/ipfs/go-libipfs/bitswap/server"
15 peer "github.com/libp2p/go-libp2p/core/peer"
16 )
17
@@ -179,7 +179,7 @@ prints the ledger associated with a given peer.
179 Arguments: []cmds.Argument{
180 cmds.StringArg("peer", true, false, "The PeerID (B58) of the ledger to inspect."),
181 },
182 - Type: decision.Receipt{},
182 + Type: server.Receipt{},
183 Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
184 nd, err := cmdenv.GetNode(env)
185 if err != nil {
@@ -203,7 +203,7 @@ prints the ledger associated with a given peer.
203 return cmds.EmitOnce(res, bs.LedgerForPeer(partner))
204 },
205 Encoders: cmds.EncoderMap{
206 - cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *decision.Receipt) error {
206 + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *server.Receipt) error {
207 fmt.Fprintf(w, "Ledger for %s\n"+
208 "Debt ratio:\t%f\n"+
209 "Exchanges:\t%d\n"+
docs/examples/kubo-as-a-library/go.mod
+2 -2
@@ -7,7 +7,7 @@ go 1.18
7 replace github.com/ipfs/kubo => ./../../..
8
9 require (
10 - github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176
10 + github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260
11 github.com/ipfs/interface-go-ipfs-core v0.11.0
12 github.com/ipfs/kubo v0.0.0-00010101000000-000000000000
13 github.com/libp2p/go-libp2p v0.26.0
@@ -101,7 +101,7 @@ require (
101 github.com/ipfs/go-metrics-interface v0.0.1 // indirect
102 github.com/ipfs/go-mfs v0.2.1 // indirect
103 github.com/ipfs/go-namesys v0.7.0 // indirect
104 - github.com/ipfs/go-path v0.3.0 // indirect
104 + github.com/ipfs/go-path v0.3.1 // indirect
105 github.com/ipfs/go-peertaskqueue v0.8.1 // indirect
106 github.com/ipfs/go-unixfs v0.4.3 // indirect
107 github.com/ipfs/go-unixfsnode v1.5.2 // indirect
docs/examples/kubo-as-a-library/go.sum
+4 -4
@@ -569,8 +569,8 @@ github.com/ipfs/go-ipld-legacy v0.1.1 h1:BvD8PEuqwBHLTKqlGFTHSwrwFOMkVESEvwIYwR2
569 github.com/ipfs/go-ipld-legacy v0.1.1/go.mod h1:8AyKFCjgRPsQFf15ZQgDB8Din4DML/fOmKZkkFkrIEg=
570 github.com/ipfs/go-ipns v0.3.0 h1:ai791nTgVo+zTuq2bLvEGmWP1M0A6kGTXUsgv/Yq67A=
571 github.com/ipfs/go-ipns v0.3.0/go.mod h1:3cLT2rbvgPZGkHJoPO1YMJeh6LtkxopCkKFcio/wE24=
572 -github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176 h1:QJvWxLRKucrAo7W2vLz5FA2iLKwW6WkHWn8AL8kXAUU=
573 -github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176/go.mod h1:UjjDIuehp2GzlNP0HEr5I9GfFT7zWgst+YfpUEIThtw=
572 +github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260 h1:QRLcCoITO9ZQo2pvjmrfngqKhUKjPopBva3MVH62LT8=
573 +github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260/go.mod h1:3OoEQs95UkqFEf65SbRDpiMwuzI+C/jTsYQaHfBbJXI=
574 github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
575 github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk=
576 github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A=
@@ -598,8 +598,8 @@ github.com/ipfs/go-mfs v0.2.1/go.mod h1:Woj80iuw4ajDnIP6+seRaoHpPsc9hmL0pk/nDNDW
598 github.com/ipfs/go-namesys v0.7.0 h1:xqosk71GIVRkFDtF2UNRcXn4LdNeo7tzuy8feHD6NbU=
599 github.com/ipfs/go-namesys v0.7.0/go.mod h1:KYSZBVZG3VJC34EfqqJPG7T48aWgxseoMPAPA5gLyyQ=
600 github.com/ipfs/go-path v0.2.1/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
601 -github.com/ipfs/go-path v0.3.0 h1:tkjga3MtpXyM5v+3EbRvOHEoo+frwi4oumw5K+KYWyA=
602 -github.com/ipfs/go-path v0.3.0/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
601 +github.com/ipfs/go-path v0.3.1 h1:wkeaCWE/NTuuPGlEkLTsED5UkzfKYZpxaFFPgk8ZVLE=
602 +github.com/ipfs/go-path v0.3.1/go.mod h1:eNLsxJEEMxn/CDzUJ6wuNl+6No6tEUhOZcPKsZsYX0E=
603 github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U=
604 github.com/ipfs/go-peertaskqueue v0.7.0/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU=
605 github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg=
go.mod
+2 -2
@@ -45,7 +45,7 @@ require (
45 github.com/ipfs/go-ipld-git v0.1.1
46 github.com/ipfs/go-ipld-legacy v0.1.1
47 github.com/ipfs/go-ipns v0.3.0
48 - github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176
48 + github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260
49 github.com/ipfs/go-log v1.0.5
50 github.com/ipfs/go-log/v2 v2.5.1
51 github.com/ipfs/go-merkledag v0.9.0
@@ -53,7 +53,7 @@ require (
53 github.com/ipfs/go-metrics-prometheus v0.0.2
54 github.com/ipfs/go-mfs v0.2.1
55 github.com/ipfs/go-namesys v0.7.0
56 - github.com/ipfs/go-path v0.3.0
56 + github.com/ipfs/go-path v0.3.1
57 github.com/ipfs/go-pinning-service-http-client v0.1.2
58 github.com/ipfs/go-unixfs v0.4.3
59 github.com/ipfs/go-unixfsnode v1.5.2
go.sum
+4 -4
@@ -591,8 +591,8 @@ github.com/ipfs/go-ipld-legacy v0.1.1 h1:BvD8PEuqwBHLTKqlGFTHSwrwFOMkVESEvwIYwR2
591 github.com/ipfs/go-ipld-legacy v0.1.1/go.mod h1:8AyKFCjgRPsQFf15ZQgDB8Din4DML/fOmKZkkFkrIEg=
592 github.com/ipfs/go-ipns v0.3.0 h1:ai791nTgVo+zTuq2bLvEGmWP1M0A6kGTXUsgv/Yq67A=
593 github.com/ipfs/go-ipns v0.3.0/go.mod h1:3cLT2rbvgPZGkHJoPO1YMJeh6LtkxopCkKFcio/wE24=
594 -github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176 h1:QJvWxLRKucrAo7W2vLz5FA2iLKwW6WkHWn8AL8kXAUU=
595 -github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176/go.mod h1:UjjDIuehp2GzlNP0HEr5I9GfFT7zWgst+YfpUEIThtw=
594 +github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260 h1:QRLcCoITO9ZQo2pvjmrfngqKhUKjPopBva3MVH62LT8=
595 +github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260/go.mod h1:3OoEQs95UkqFEf65SbRDpiMwuzI+C/jTsYQaHfBbJXI=
596 github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
597 github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk=
598 github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A=
@@ -622,8 +622,8 @@ github.com/ipfs/go-mfs v0.2.1/go.mod h1:Woj80iuw4ajDnIP6+seRaoHpPsc9hmL0pk/nDNDW
622 github.com/ipfs/go-namesys v0.7.0 h1:xqosk71GIVRkFDtF2UNRcXn4LdNeo7tzuy8feHD6NbU=
623 github.com/ipfs/go-namesys v0.7.0/go.mod h1:KYSZBVZG3VJC34EfqqJPG7T48aWgxseoMPAPA5gLyyQ=
624 github.com/ipfs/go-path v0.2.1/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
625 -github.com/ipfs/go-path v0.3.0 h1:tkjga3MtpXyM5v+3EbRvOHEoo+frwi4oumw5K+KYWyA=
626 -github.com/ipfs/go-path v0.3.0/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
625 +github.com/ipfs/go-path v0.3.1 h1:wkeaCWE/NTuuPGlEkLTsED5UkzfKYZpxaFFPgk8ZVLE=
626 +github.com/ipfs/go-path v0.3.1/go.mod h1:eNLsxJEEMxn/CDzUJ6wuNl+6No6tEUhOZcPKsZsYX0E=
627 github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U=
628 github.com/ipfs/go-peertaskqueue v0.7.0/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU=
629 github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg=
test/cli/gateway_test.go
+5 -5
@@ -126,10 +126,10 @@ func TestGateway(t *testing.T) {
126 assert.Equal(t, 404, resp.StatusCode)
127 })
128
129 - t.Run("GET IPFS invalid CID returns 400 (Bad Request)", func(t *testing.T) {
129 + t.Run("GET IPFS invalid CID returns 500 (Internal Server Error)", func(t *testing.T) {
130 t.Parallel()
131 resp := client.Get("/ipfs/QmInvalid/pleaseDontAddMe")
132 - assert.Equal(t, 400, resp.StatusCode)
132 + assert.Equal(t, 500, resp.StatusCode)
133 })
134
135 t.Run("GET IPFS inlined zero-length data object returns ok code (200)", func(t *testing.T) {
@@ -166,10 +166,10 @@ func TestGateway(t *testing.T) {
166 t.Parallel()
167 node.IPFS("name", "publish", "--allow-offline", cid)
168
169 - t.Run("GET invalid IPNS root returns 400 (Bad Request)", func(t *testing.T) {
169 + t.Run("GET invalid IPNS root returns 500 (Internal Server Error)", func(t *testing.T) {
170 t.Parallel()
171 resp := client.Get("/ipns/QmInvalid/pleaseDontAddMe")
172 - assert.Equal(t, 400, resp.StatusCode)
172 + assert.Equal(t, 500, resp.StatusCode)
173 })
174
175 t.Run("GET IPNS path succeeds", func(t *testing.T) {
@@ -198,7 +198,7 @@ func TestGateway(t *testing.T) {
198
199 t.Run("GET invalid IPFS path errors", func(t *testing.T) {
200 t.Parallel()
201 - assert.Equal(t, 400, client.Get("/ipfs/12345").StatusCode)
201 + assert.Equal(t, 500, client.Get("/ipfs/12345").StatusCode)
202 })
203
204 t.Run("GET invalid path errors", func(t *testing.T) {