Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mybee
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
vicotor
mybee
Commits
ff8e5fab
Unverified
Commit
ff8e5fab
authored
Sep 08, 2020
by
acud
Committed by
GitHub
Sep 08, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add opentracing instrumentation to http package (#672)
* add opentracing instrumentation to http package
parent
f245cc88
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
130 additions
and
88 deletions
+130
-88
api.go
pkg/api/api.go
+11
-0
bytes.go
pkg/api/bytes.go
+12
-8
bzz.go
pkg/api/bzz.go
+24
-22
dirs.go
pkg/api/dirs.go
+12
-9
file.go
pkg/api/file.go
+47
-43
router.go
pkg/api/router.go
+24
-6
No files found.
pkg/api/api.go
View file @
ff8e5fab
...
@@ -134,3 +134,14 @@ func requestModePut(r *http.Request) storage.ModePut {
...
@@ -134,3 +134,14 @@ func requestModePut(r *http.Request) storage.ModePut {
func
requestEncrypt
(
r
*
http
.
Request
)
bool
{
func
requestEncrypt
(
r
*
http
.
Request
)
bool
{
return
strings
.
ToLower
(
r
.
Header
.
Get
(
SwarmEncryptHeader
))
==
"true"
return
strings
.
ToLower
(
r
.
Header
.
Get
(
SwarmEncryptHeader
))
==
"true"
}
}
func
(
s
*
server
)
newTracingHandler
(
spanName
string
)
func
(
h
http
.
Handler
)
http
.
Handler
{
return
func
(
h
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
span
,
_
,
ctx
:=
s
.
Tracer
.
StartSpanFromContext
(
r
.
Context
(),
spanName
,
s
.
Logger
)
defer
span
.
Finish
()
h
.
ServeHTTP
(
w
,
r
.
WithContext
(
ctx
))
})
}
}
pkg/api/bytes.go
View file @
ff8e5fab
...
@@ -12,6 +12,7 @@ import (
...
@@ -12,6 +12,7 @@ import (
"github.com/ethersphere/bee/pkg/jsonhttp"
"github.com/ethersphere/bee/pkg/jsonhttp"
"github.com/ethersphere/bee/pkg/sctx"
"github.com/ethersphere/bee/pkg/sctx"
"github.com/ethersphere/bee/pkg/swarm"
"github.com/ethersphere/bee/pkg/swarm"
"github.com/ethersphere/bee/pkg/tracing"
"github.com/gorilla/mux"
"github.com/gorilla/mux"
)
)
...
@@ -21,10 +22,12 @@ type bytesPostResponse struct {
...
@@ -21,10 +22,12 @@ type bytesPostResponse struct {
// bytesUploadHandler handles upload of raw binary data of arbitrary length.
// bytesUploadHandler handles upload of raw binary data of arbitrary length.
func
(
s
*
server
)
bytesUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
bytesUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
Logger
)
tag
,
created
,
err
:=
s
.
getOrCreateTag
(
r
.
Header
.
Get
(
SwarmTagUidHeader
))
tag
,
created
,
err
:=
s
.
getOrCreateTag
(
r
.
Header
.
Get
(
SwarmTagUidHeader
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bytes upload: get or create tag: %v"
,
err
)
l
ogger
.
Debugf
(
"bytes upload: get or create tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"bytes upload: get or create tag"
)
l
ogger
.
Error
(
"bytes upload: get or create tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get or create tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get or create tag"
)
return
return
}
}
...
@@ -35,16 +38,16 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -35,16 +38,16 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
pipe
:=
pipeline
.
NewPipelineBuilder
(
ctx
,
s
.
Storer
,
requestModePut
(
r
),
requestEncrypt
(
r
))
pipe
:=
pipeline
.
NewPipelineBuilder
(
ctx
,
s
.
Storer
,
requestModePut
(
r
),
requestEncrypt
(
r
))
address
,
err
:=
pipeline
.
FeedPipeline
(
ctx
,
pipe
,
r
.
Body
,
r
.
ContentLength
)
address
,
err
:=
pipeline
.
FeedPipeline
(
ctx
,
pipe
,
r
.
Body
,
r
.
ContentLength
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bytes upload: split write all: %v"
,
err
)
l
ogger
.
Debugf
(
"bytes upload: split write all: %v"
,
err
)
s
.
L
ogger
.
Error
(
"bytes upload: split write all"
)
l
ogger
.
Error
(
"bytes upload: split write all"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
if
created
{
if
created
{
_
,
err
=
tag
.
DoneSplit
(
address
)
_
,
err
=
tag
.
DoneSplit
(
address
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bytes upload: done split: %v"
,
err
)
l
ogger
.
Debugf
(
"bytes upload: done split: %v"
,
err
)
s
.
L
ogger
.
Error
(
"bytes upload: done split failed"
)
l
ogger
.
Error
(
"bytes upload: done split failed"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
@@ -58,12 +61,13 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -58,12 +61,13 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
// bytesGetHandler handles retrieval of raw binary data of arbitrary length.
// bytesGetHandler handles retrieval of raw binary data of arbitrary length.
func
(
s
*
server
)
bytesGetHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
bytesGetHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
Logger
)
.
Logger
nameOrHex
:=
mux
.
Vars
(
r
)[
"address"
]
nameOrHex
:=
mux
.
Vars
(
r
)[
"address"
]
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bytes: parse address %s: %v"
,
nameOrHex
,
err
)
l
ogger
.
Debugf
(
"bytes: parse address %s: %v"
,
nameOrHex
,
err
)
s
.
L
ogger
.
Error
(
"bytes: parse address error"
)
l
ogger
.
Error
(
"bytes: parse address error"
)
jsonhttp
.
BadRequest
(
w
,
"invalid address"
)
jsonhttp
.
BadRequest
(
w
,
"invalid address"
)
return
return
}
}
...
...
pkg/api/bzz.go
View file @
ff8e5fab
...
@@ -19,9 +19,11 @@ import (
...
@@ -19,9 +19,11 @@ import (
"github.com/ethersphere/bee/pkg/jsonhttp"
"github.com/ethersphere/bee/pkg/jsonhttp"
"github.com/ethersphere/bee/pkg/manifest"
"github.com/ethersphere/bee/pkg/manifest"
"github.com/ethersphere/bee/pkg/sctx"
"github.com/ethersphere/bee/pkg/sctx"
"github.com/ethersphere/bee/pkg/tracing"
)
)
func
(
s
*
server
)
bzzDownloadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
bzzDownloadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
Logger
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
r
=
r
.
WithContext
(
sctx
.
SetTargets
(
r
.
Context
(),
targets
))
r
=
r
.
WithContext
(
sctx
.
SetTargets
(
r
.
Context
(),
targets
))
ctx
:=
r
.
Context
()
ctx
:=
r
.
Context
()
...
@@ -31,8 +33,8 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -31,8 +33,8 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: parse address %s: %v"
,
nameOrHex
,
err
)
l
ogger
.
Debugf
(
"bzz download: parse address %s: %v"
,
nameOrHex
,
err
)
s
.
L
ogger
.
Error
(
"bzz download: parse address"
)
l
ogger
.
Error
(
"bzz download: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"invalid address"
)
jsonhttp
.
BadRequest
(
w
,
"invalid address"
)
return
return
}
}
...
@@ -45,16 +47,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -45,16 +47,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
buf
:=
bytes
.
NewBuffer
(
nil
)
buf
:=
bytes
.
NewBuffer
(
nil
)
_
,
err
=
file
.
JoinReadAll
(
ctx
,
j
,
address
,
buf
)
_
,
err
=
file
.
JoinReadAll
(
ctx
,
j
,
address
,
buf
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: read entry %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: read entry %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"bzz download: read entry %s"
,
address
)
l
ogger
.
Errorf
(
"bzz download: read entry %s"
,
address
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
}
}
e
:=
&
entry
.
Entry
{}
e
:=
&
entry
.
Entry
{}
err
=
e
.
UnmarshalBinary
(
buf
.
Bytes
())
err
=
e
.
UnmarshalBinary
(
buf
.
Bytes
())
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: unmarshal entry %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: unmarshal entry %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"bzz download: unmarshal entry %s"
,
address
)
l
ogger
.
Errorf
(
"bzz download: unmarshal entry %s"
,
address
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling entry"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling entry"
)
return
return
}
}
...
@@ -63,16 +65,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -63,16 +65,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
buf
=
bytes
.
NewBuffer
(
nil
)
buf
=
bytes
.
NewBuffer
(
nil
)
_
,
err
=
file
.
JoinReadAll
(
ctx
,
j
,
e
.
Metadata
(),
buf
)
_
,
err
=
file
.
JoinReadAll
(
ctx
,
j
,
e
.
Metadata
(),
buf
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: read metadata %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: read metadata %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"bzz download: read metadata %s"
,
address
)
l
ogger
.
Errorf
(
"bzz download: read metadata %s"
,
address
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
}
}
manifestMetadata
:=
&
entry
.
Metadata
{}
manifestMetadata
:=
&
entry
.
Metadata
{}
err
=
json
.
Unmarshal
(
buf
.
Bytes
(),
manifestMetadata
)
err
=
json
.
Unmarshal
(
buf
.
Bytes
(),
manifestMetadata
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: unmarshal metadata %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: unmarshal metadata %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"bzz download: unmarshal metadata %s"
,
address
)
l
ogger
.
Errorf
(
"bzz download: unmarshal metadata %s"
,
address
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
return
return
}
}
...
@@ -86,16 +88,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -86,16 +88,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
s
.
Storer
,
s
.
Storer
,
)
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: not manifest %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: not manifest %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Error
(
"bzz download: not manifest"
)
l
ogger
.
Error
(
"bzz download: not manifest"
)
jsonhttp
.
BadRequest
(
w
,
"not manifest"
)
jsonhttp
.
BadRequest
(
w
,
"not manifest"
)
return
return
}
}
me
,
err
:=
m
.
Lookup
(
path
)
me
,
err
:=
m
.
Lookup
(
path
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: invalid path %s/%s: %v"
,
address
,
path
,
err
)
l
ogger
.
Debugf
(
"bzz download: invalid path %s/%s: %v"
,
address
,
path
,
err
)
s
.
L
ogger
.
Error
(
"bzz download: invalid path"
)
l
ogger
.
Error
(
"bzz download: invalid path"
)
if
errors
.
Is
(
err
,
manifest
.
ErrNotFound
)
{
if
errors
.
Is
(
err
,
manifest
.
ErrNotFound
)
{
jsonhttp
.
NotFound
(
w
,
"path address not found"
)
jsonhttp
.
NotFound
(
w
,
"path address not found"
)
...
@@ -111,16 +113,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -111,16 +113,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
buf
=
bytes
.
NewBuffer
(
nil
)
buf
=
bytes
.
NewBuffer
(
nil
)
_
,
err
=
file
.
JoinReadAll
(
ctx
,
j
,
manifestEntryAddress
,
buf
)
_
,
err
=
file
.
JoinReadAll
(
ctx
,
j
,
manifestEntryAddress
,
buf
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: read file entry %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: read file entry %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"bzz download: read file entry %s"
,
address
)
l
ogger
.
Errorf
(
"bzz download: read file entry %s"
,
address
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
}
}
fe
:=
&
entry
.
Entry
{}
fe
:=
&
entry
.
Entry
{}
err
=
fe
.
UnmarshalBinary
(
buf
.
Bytes
())
err
=
fe
.
UnmarshalBinary
(
buf
.
Bytes
())
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: unmarshal file entry %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: unmarshal file entry %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"bzz download: unmarshal file entry %s"
,
address
)
l
ogger
.
Errorf
(
"bzz download: unmarshal file entry %s"
,
address
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling file entry"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling file entry"
)
return
return
}
}
...
@@ -129,16 +131,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -129,16 +131,16 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
buf
=
bytes
.
NewBuffer
(
nil
)
buf
=
bytes
.
NewBuffer
(
nil
)
_
,
err
=
file
.
JoinReadAll
(
ctx
,
j
,
fe
.
Metadata
(),
buf
)
_
,
err
=
file
.
JoinReadAll
(
ctx
,
j
,
fe
.
Metadata
(),
buf
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: read file metadata %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: read file metadata %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"bzz download: read file metadata %s"
,
address
)
l
ogger
.
Errorf
(
"bzz download: read file metadata %s"
,
address
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
}
}
fileMetadata
:=
&
entry
.
Metadata
{}
fileMetadata
:=
&
entry
.
Metadata
{}
err
=
json
.
Unmarshal
(
buf
.
Bytes
(),
fileMetadata
)
err
=
json
.
Unmarshal
(
buf
.
Bytes
(),
fileMetadata
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: unmarshal metadata %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"bzz download: unmarshal metadata %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"bzz download: unmarshal metadata %s"
,
address
)
l
ogger
.
Errorf
(
"bzz download: unmarshal metadata %s"
,
address
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
return
return
}
}
...
...
pkg/api/dirs.go
View file @
ff8e5fab
...
@@ -24,6 +24,7 @@ import (
...
@@ -24,6 +24,7 @@ import (
"github.com/ethersphere/bee/pkg/sctx"
"github.com/ethersphere/bee/pkg/sctx"
"github.com/ethersphere/bee/pkg/storage"
"github.com/ethersphere/bee/pkg/storage"
"github.com/ethersphere/bee/pkg/swarm"
"github.com/ethersphere/bee/pkg/swarm"
"github.com/ethersphere/bee/pkg/tracing"
)
)
const
(
const
(
...
@@ -33,18 +34,19 @@ const (
...
@@ -33,18 +34,19 @@ const (
// dirUploadHandler uploads a directory supplied as a tar in an HTTP request
// dirUploadHandler uploads a directory supplied as a tar in an HTTP request
func
(
s
*
server
)
dirUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
dirUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
Logger
)
err
:=
validateRequest
(
r
)
err
:=
validateRequest
(
r
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Errorf
(
"dir upload, validate request"
)
l
ogger
.
Errorf
(
"dir upload, validate request"
)
s
.
L
ogger
.
Debugf
(
"dir upload, validate request err: %v"
,
err
)
l
ogger
.
Debugf
(
"dir upload, validate request err: %v"
,
err
)
jsonhttp
.
BadRequest
(
w
,
"could not validate request"
)
jsonhttp
.
BadRequest
(
w
,
"could not validate request"
)
return
return
}
}
tag
,
created
,
err
:=
s
.
getOrCreateTag
(
r
.
Header
.
Get
(
SwarmTagUidHeader
))
tag
,
created
,
err
:=
s
.
getOrCreateTag
(
r
.
Header
.
Get
(
SwarmTagUidHeader
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"dir upload: get or create tag: %v"
,
err
)
l
ogger
.
Debugf
(
"dir upload: get or create tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"dir upload: get or create tag"
)
l
ogger
.
Error
(
"dir upload: get or create tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get or create tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get or create tag"
)
return
return
}
}
...
@@ -54,16 +56,16 @@ func (s *server) dirUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -54,16 +56,16 @@ func (s *server) dirUploadHandler(w http.ResponseWriter, r *http.Request) {
reference
,
err
:=
storeDir
(
ctx
,
r
.
Body
,
s
.
Storer
,
requestModePut
(
r
),
s
.
Logger
,
requestEncrypt
(
r
))
reference
,
err
:=
storeDir
(
ctx
,
r
.
Body
,
s
.
Storer
,
requestModePut
(
r
),
s
.
Logger
,
requestEncrypt
(
r
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"dir upload: store dir err: %v"
,
err
)
l
ogger
.
Debugf
(
"dir upload: store dir err: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"dir upload: store dir"
)
l
ogger
.
Errorf
(
"dir upload: store dir"
)
jsonhttp
.
InternalServerError
(
w
,
"could not store dir"
)
jsonhttp
.
InternalServerError
(
w
,
"could not store dir"
)
return
return
}
}
if
created
{
if
created
{
_
,
err
=
tag
.
DoneSplit
(
reference
)
_
,
err
=
tag
.
DoneSplit
(
reference
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"dir upload: done split: %v"
,
err
)
l
ogger
.
Debugf
(
"dir upload: done split: %v"
,
err
)
s
.
L
ogger
.
Error
(
"dir upload: done split failed"
)
l
ogger
.
Error
(
"dir upload: done split failed"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
@@ -92,7 +94,8 @@ func validateRequest(r *http.Request) error {
...
@@ -92,7 +94,8 @@ func validateRequest(r *http.Request) error {
// storeDir stores all files recursively contained in the directory given as a tar
// storeDir stores all files recursively contained in the directory given as a tar
// it returns the hash for the uploaded manifest corresponding to the uploaded dir
// it returns the hash for the uploaded manifest corresponding to the uploaded dir
func
storeDir
(
ctx
context
.
Context
,
reader
io
.
ReadCloser
,
s
storage
.
Storer
,
mode
storage
.
ModePut
,
logger
logging
.
Logger
,
encrypt
bool
)
(
swarm
.
Address
,
error
)
{
func
storeDir
(
ctx
context
.
Context
,
reader
io
.
ReadCloser
,
s
storage
.
Storer
,
mode
storage
.
ModePut
,
log
logging
.
Logger
,
encrypt
bool
)
(
swarm
.
Address
,
error
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
ctx
,
log
)
dirManifest
,
err
:=
manifest
.
NewDefaultManifest
(
encrypt
,
s
)
dirManifest
,
err
:=
manifest
.
NewDefaultManifest
(
encrypt
,
s
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/api/file.go
View file @
ff8e5fab
...
@@ -27,6 +27,7 @@ import (
...
@@ -27,6 +27,7 @@ import (
"github.com/ethersphere/bee/pkg/sctx"
"github.com/ethersphere/bee/pkg/sctx"
"github.com/ethersphere/bee/pkg/storage"
"github.com/ethersphere/bee/pkg/storage"
"github.com/ethersphere/bee/pkg/swarm"
"github.com/ethersphere/bee/pkg/swarm"
"github.com/ethersphere/bee/pkg/tracing"
"github.com/gorilla/mux"
"github.com/gorilla/mux"
)
)
...
@@ -45,6 +46,7 @@ type fileUploadResponse struct {
...
@@ -45,6 +46,7 @@ type fileUploadResponse struct {
func
(
s
*
server
)
fileUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
fileUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
var
(
var
(
reader
io
.
Reader
reader
io
.
Reader
logger
=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
Logger
)
fileName
,
contentLength
string
fileName
,
contentLength
string
fileSize
uint64
fileSize
uint64
mode
=
requestModePut
(
r
)
mode
=
requestModePut
(
r
)
...
@@ -53,16 +55,16 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -53,16 +55,16 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
mediaType
,
params
,
err
:=
mime
.
ParseMediaType
(
contentType
)
mediaType
,
params
,
err
:=
mime
.
ParseMediaType
(
contentType
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: parse content type header %q: %v"
,
contentType
,
err
)
l
ogger
.
Debugf
(
"file upload: parse content type header %q: %v"
,
contentType
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: parse content type header %q"
,
contentType
)
l
ogger
.
Errorf
(
"file upload: parse content type header %q"
,
contentType
)
jsonhttp
.
BadRequest
(
w
,
"invalid content-type header"
)
jsonhttp
.
BadRequest
(
w
,
"invalid content-type header"
)
return
return
}
}
tag
,
created
,
err
:=
s
.
getOrCreateTag
(
r
.
Header
.
Get
(
SwarmTagUidHeader
))
tag
,
created
,
err
:=
s
.
getOrCreateTag
(
r
.
Header
.
Get
(
SwarmTagUidHeader
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: get or create tag: %v"
,
err
)
l
ogger
.
Debugf
(
"file upload: get or create tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: get or create tag"
)
l
ogger
.
Error
(
"file upload: get or create tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get or create tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get or create tag"
)
return
return
}
}
...
@@ -76,8 +78,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -76,8 +78,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
// read only the first part, as only one file upload is supported
// read only the first part, as only one file upload is supported
part
,
err
:=
mr
.
NextPart
()
part
,
err
:=
mr
.
NextPart
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: read multipart: %v"
,
err
)
l
ogger
.
Debugf
(
"file upload: read multipart: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: read multipart"
)
l
ogger
.
Error
(
"file upload: read multipart"
)
jsonhttp
.
BadRequest
(
w
,
"invalid multipart/form-data"
)
jsonhttp
.
BadRequest
(
w
,
"invalid multipart/form-data"
)
return
return
}
}
...
@@ -96,8 +98,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -96,8 +98,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
br
:=
bufio
.
NewReader
(
part
)
br
:=
bufio
.
NewReader
(
part
)
buf
,
err
:=
br
.
Peek
(
512
)
buf
,
err
:=
br
.
Peek
(
512
)
if
err
!=
nil
&&
err
!=
io
.
EOF
{
if
err
!=
nil
&&
err
!=
io
.
EOF
{
s
.
L
ogger
.
Debugf
(
"file upload: read content type, file %q: %v"
,
fileName
,
err
)
l
ogger
.
Debugf
(
"file upload: read content type, file %q: %v"
,
fileName
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: read content type, file %q"
,
fileName
)
l
ogger
.
Errorf
(
"file upload: read content type, file %q"
,
fileName
)
jsonhttp
.
BadRequest
(
w
,
"error reading content type"
)
jsonhttp
.
BadRequest
(
w
,
"error reading content type"
)
return
return
}
}
...
@@ -116,8 +118,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -116,8 +118,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
if
contentLength
!=
""
{
if
contentLength
!=
""
{
fileSize
,
err
=
strconv
.
ParseUint
(
contentLength
,
10
,
64
)
fileSize
,
err
=
strconv
.
ParseUint
(
contentLength
,
10
,
64
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: content length, file %q: %v"
,
fileName
,
err
)
l
ogger
.
Debugf
(
"file upload: content length, file %q: %v"
,
fileName
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: content length, file %q"
,
fileName
)
l
ogger
.
Errorf
(
"file upload: content length, file %q"
,
fileName
)
jsonhttp
.
BadRequest
(
w
,
"invalid content length header"
)
jsonhttp
.
BadRequest
(
w
,
"invalid content length header"
)
return
return
}
}
...
@@ -125,8 +127,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -125,8 +127,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
// copy the part to a tmp file to get its size
// copy the part to a tmp file to get its size
tmp
,
err
:=
ioutil
.
TempFile
(
""
,
"bee-multipart"
)
tmp
,
err
:=
ioutil
.
TempFile
(
""
,
"bee-multipart"
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: create temporary file: %v"
,
err
)
l
ogger
.
Debugf
(
"file upload: create temporary file: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: create temporary file"
)
l
ogger
.
Errorf
(
"file upload: create temporary file"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
@@ -134,14 +136,14 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -134,14 +136,14 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
defer
tmp
.
Close
()
defer
tmp
.
Close
()
n
,
err
:=
io
.
Copy
(
tmp
,
reader
)
n
,
err
:=
io
.
Copy
(
tmp
,
reader
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: write temporary file: %v"
,
err
)
l
ogger
.
Debugf
(
"file upload: write temporary file: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: write temporary file"
)
l
ogger
.
Error
(
"file upload: write temporary file"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
if
_
,
err
:=
tmp
.
Seek
(
0
,
io
.
SeekStart
);
err
!=
nil
{
if
_
,
err
:=
tmp
.
Seek
(
0
,
io
.
SeekStart
);
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: seek to beginning of temporary file: %v"
,
err
)
l
ogger
.
Debugf
(
"file upload: seek to beginning of temporary file: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: seek to beginning of temporary file"
)
l
ogger
.
Error
(
"file upload: seek to beginning of temporary file"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
@@ -153,8 +155,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -153,8 +155,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
pipe
:=
pipeline
.
NewPipelineBuilder
(
ctx
,
s
.
Storer
,
mode
,
requestEncrypt
(
r
))
pipe
:=
pipeline
.
NewPipelineBuilder
(
ctx
,
s
.
Storer
,
mode
,
requestEncrypt
(
r
))
fr
,
err
:=
pipeline
.
FeedPipeline
(
ctx
,
pipe
,
reader
,
int64
(
fileSize
))
fr
,
err
:=
pipeline
.
FeedPipeline
(
ctx
,
pipe
,
reader
,
int64
(
fileSize
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: file store, file %q: %v"
,
fileName
,
err
)
l
ogger
.
Debugf
(
"file upload: file store, file %q: %v"
,
fileName
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: file store, file %q"
,
fileName
)
l
ogger
.
Errorf
(
"file upload: file store, file %q"
,
fileName
)
jsonhttp
.
InternalServerError
(
w
,
"could not store file data"
)
jsonhttp
.
InternalServerError
(
w
,
"could not store file data"
)
return
return
}
}
...
@@ -169,16 +171,16 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -169,16 +171,16 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
m
.
MimeType
=
contentType
m
.
MimeType
=
contentType
metadataBytes
,
err
:=
json
.
Marshal
(
m
)
metadataBytes
,
err
:=
json
.
Marshal
(
m
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: metadata marshal, file %q: %v"
,
fileName
,
err
)
l
ogger
.
Debugf
(
"file upload: metadata marshal, file %q: %v"
,
fileName
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: metadata marshal, file %q"
,
fileName
)
l
ogger
.
Errorf
(
"file upload: metadata marshal, file %q"
,
fileName
)
jsonhttp
.
InternalServerError
(
w
,
"metadata marshal error"
)
jsonhttp
.
InternalServerError
(
w
,
"metadata marshal error"
)
return
return
}
}
pipe
=
pipeline
.
NewPipelineBuilder
(
ctx
,
s
.
Storer
,
mode
,
requestEncrypt
(
r
))
pipe
=
pipeline
.
NewPipelineBuilder
(
ctx
,
s
.
Storer
,
mode
,
requestEncrypt
(
r
))
mr
,
err
:=
pipeline
.
FeedPipeline
(
ctx
,
pipe
,
bytes
.
NewReader
(
metadataBytes
),
int64
(
len
(
metadataBytes
)))
mr
,
err
:=
pipeline
.
FeedPipeline
(
ctx
,
pipe
,
bytes
.
NewReader
(
metadataBytes
),
int64
(
len
(
metadataBytes
)))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: metadata store, file %q: %v"
,
fileName
,
err
)
l
ogger
.
Debugf
(
"file upload: metadata store, file %q: %v"
,
fileName
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: metadata store, file %q"
,
fileName
)
l
ogger
.
Errorf
(
"file upload: metadata store, file %q"
,
fileName
)
jsonhttp
.
InternalServerError
(
w
,
"could not store metadata"
)
jsonhttp
.
InternalServerError
(
w
,
"could not store metadata"
)
return
return
}
}
...
@@ -187,24 +189,24 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -187,24 +189,24 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
entrie
:=
entry
.
New
(
fr
,
mr
)
entrie
:=
entry
.
New
(
fr
,
mr
)
fileEntryBytes
,
err
:=
entrie
.
MarshalBinary
()
fileEntryBytes
,
err
:=
entrie
.
MarshalBinary
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: entry marshal, file %q: %v"
,
fileName
,
err
)
l
ogger
.
Debugf
(
"file upload: entry marshal, file %q: %v"
,
fileName
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: entry marshal, file %q"
,
fileName
)
l
ogger
.
Errorf
(
"file upload: entry marshal, file %q"
,
fileName
)
jsonhttp
.
InternalServerError
(
w
,
"entry marshal error"
)
jsonhttp
.
InternalServerError
(
w
,
"entry marshal error"
)
return
return
}
}
pipe
=
pipeline
.
NewPipelineBuilder
(
ctx
,
s
.
Storer
,
mode
,
requestEncrypt
(
r
))
pipe
=
pipeline
.
NewPipelineBuilder
(
ctx
,
s
.
Storer
,
mode
,
requestEncrypt
(
r
))
reference
,
err
:=
pipeline
.
FeedPipeline
(
ctx
,
pipe
,
bytes
.
NewReader
(
fileEntryBytes
),
int64
(
len
(
fileEntryBytes
)))
reference
,
err
:=
pipeline
.
FeedPipeline
(
ctx
,
pipe
,
bytes
.
NewReader
(
fileEntryBytes
),
int64
(
len
(
fileEntryBytes
)))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: entry store, file %q: %v"
,
fileName
,
err
)
l
ogger
.
Debugf
(
"file upload: entry store, file %q: %v"
,
fileName
,
err
)
s
.
L
ogger
.
Errorf
(
"file upload: entry store, file %q"
,
fileName
)
l
ogger
.
Errorf
(
"file upload: entry store, file %q"
,
fileName
)
jsonhttp
.
InternalServerError
(
w
,
"could not store entry"
)
jsonhttp
.
InternalServerError
(
w
,
"could not store entry"
)
return
return
}
}
if
created
{
if
created
{
_
,
err
=
tag
.
DoneSplit
(
reference
)
_
,
err
=
tag
.
DoneSplit
(
reference
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: done split: %v"
,
err
)
l
ogger
.
Debugf
(
"file upload: done split: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: done split failed"
)
l
ogger
.
Error
(
"file upload: done split failed"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
@@ -227,34 +229,35 @@ type fileUploadInfo struct {
...
@@ -227,34 +229,35 @@ type fileUploadInfo struct {
// fileDownloadHandler downloads the file given the entry's reference.
// fileDownloadHandler downloads the file given the entry's reference.
func
(
s
*
server
)
fileDownloadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
fileDownloadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
Logger
)
nameOrHex
:=
mux
.
Vars
(
r
)[
"addr"
]
nameOrHex
:=
mux
.
Vars
(
r
)[
"addr"
]
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file download: parse file address %s: %v"
,
nameOrHex
,
err
)
l
ogger
.
Debugf
(
"file download: parse file address %s: %v"
,
nameOrHex
,
err
)
s
.
L
ogger
.
Errorf
(
"file download: parse file address %s"
,
nameOrHex
)
l
ogger
.
Errorf
(
"file download: parse file address %s"
,
nameOrHex
)
jsonhttp
.
BadRequest
(
w
,
"invalid file address"
)
jsonhttp
.
BadRequest
(
w
,
"invalid file address"
)
return
return
}
}
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
sctx
.
SetTargets
(
r
.
Context
(),
targets
)
r
=
r
.
WithContext
(
sctx
.
SetTargets
(
r
.
Context
(),
targets
)
)
// read entry.
// read entry.
j
:=
seekjoiner
.
NewSimpleJoiner
(
s
.
Storer
)
j
:=
seekjoiner
.
NewSimpleJoiner
(
s
.
Storer
)
buf
:=
bytes
.
NewBuffer
(
nil
)
buf
:=
bytes
.
NewBuffer
(
nil
)
_
,
err
=
file
.
JoinReadAll
(
r
.
Context
(),
j
,
address
,
buf
)
_
,
err
=
file
.
JoinReadAll
(
r
.
Context
(),
j
,
address
,
buf
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file download: read entry %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"file download: read entry %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"file download: read entry %s"
,
address
)
l
ogger
.
Errorf
(
"file download: read entry %s"
,
address
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
}
}
e
:=
&
entry
.
Entry
{}
e
:=
&
entry
.
Entry
{}
err
=
e
.
UnmarshalBinary
(
buf
.
Bytes
())
err
=
e
.
UnmarshalBinary
(
buf
.
Bytes
())
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file download: unmarshal entry %s: %v"
,
address
,
err
)
l
ogger
.
Debugf
(
"file download: unmarshal entry %s: %v"
,
address
,
err
)
s
.
L
ogger
.
Errorf
(
"file download: unmarshal entry %s"
,
address
)
l
ogger
.
Errorf
(
"file download: unmarshal entry %s"
,
address
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling entry"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling entry"
)
return
return
}
}
...
@@ -273,16 +276,16 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -273,16 +276,16 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
buf
=
bytes
.
NewBuffer
(
nil
)
buf
=
bytes
.
NewBuffer
(
nil
)
_
,
err
=
file
.
JoinReadAll
(
r
.
Context
(),
j
,
e
.
Metadata
(),
buf
)
_
,
err
=
file
.
JoinReadAll
(
r
.
Context
(),
j
,
e
.
Metadata
(),
buf
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file download: read metadata %s: %v"
,
nameOrHex
,
err
)
l
ogger
.
Debugf
(
"file download: read metadata %s: %v"
,
nameOrHex
,
err
)
s
.
L
ogger
.
Errorf
(
"file download: read metadata %s"
,
nameOrHex
)
l
ogger
.
Errorf
(
"file download: read metadata %s"
,
nameOrHex
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
}
}
metaData
:=
&
entry
.
Metadata
{}
metaData
:=
&
entry
.
Metadata
{}
err
=
json
.
Unmarshal
(
buf
.
Bytes
(),
metaData
)
err
=
json
.
Unmarshal
(
buf
.
Bytes
(),
metaData
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file download: unmarshal metadata %s: %v"
,
nameOrHex
,
err
)
l
ogger
.
Debugf
(
"file download: unmarshal metadata %s: %v"
,
nameOrHex
,
err
)
s
.
L
ogger
.
Errorf
(
"file download: unmarshal metadata %s"
,
nameOrHex
)
l
ogger
.
Errorf
(
"file download: unmarshal metadata %s"
,
nameOrHex
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
return
return
}
}
...
@@ -297,6 +300,7 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -297,6 +300,7 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
// downloadHandler contains common logic for dowloading Swarm file from API
// downloadHandler contains common logic for dowloading Swarm file from API
func
(
s
*
server
)
downloadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
reference
swarm
.
Address
,
additionalHeaders
http
.
Header
)
{
func
(
s
*
server
)
downloadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
reference
swarm
.
Address
,
additionalHeaders
http
.
Header
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
Logger
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
r
=
r
.
WithContext
(
sctx
.
SetTargets
(
r
.
Context
(),
targets
))
r
=
r
.
WithContext
(
sctx
.
SetTargets
(
r
.
Context
(),
targets
))
...
@@ -304,13 +308,13 @@ func (s *server) downloadHandler(w http.ResponseWriter, r *http.Request, referen
...
@@ -304,13 +308,13 @@ func (s *server) downloadHandler(w http.ResponseWriter, r *http.Request, referen
reader
,
l
,
err
:=
rs
.
Join
(
r
.
Context
(),
reference
)
reader
,
l
,
err
:=
rs
.
Join
(
r
.
Context
(),
reference
)
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
s
.
L
ogger
.
Debugf
(
"api download: not found %s: %v"
,
reference
,
err
)
l
ogger
.
Debugf
(
"api download: not found %s: %v"
,
reference
,
err
)
s
.
L
ogger
.
Error
(
"api download: not found"
)
l
ogger
.
Error
(
"api download: not found"
)
jsonhttp
.
NotFound
(
w
,
"not found"
)
jsonhttp
.
NotFound
(
w
,
"not found"
)
return
return
}
}
s
.
L
ogger
.
Debugf
(
"api download: invalid root chunk %s: %v"
,
reference
,
err
)
l
ogger
.
Debugf
(
"api download: invalid root chunk %s: %v"
,
reference
,
err
)
s
.
L
ogger
.
Error
(
"api download: invalid root chunk"
)
l
ogger
.
Error
(
"api download: invalid root chunk"
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
}
}
...
...
pkg/api/router.go
View file @
ff8e5fab
...
@@ -38,21 +38,36 @@ func (s *server) setupRouting() {
...
@@ -38,21 +38,36 @@ func (s *server) setupRouting() {
})
})
handle
(
router
,
"/files"
,
jsonhttp
.
MethodHandler
{
handle
(
router
,
"/files"
,
jsonhttp
.
MethodHandler
{
"POST"
:
http
.
HandlerFunc
(
s
.
fileUploadHandler
),
"POST"
:
web
.
ChainHandlers
(
s
.
newTracingHandler
(
"files-upload"
),
web
.
FinalHandlerFunc
(
s
.
fileUploadHandler
),
),
})
})
handle
(
router
,
"/files/{addr}"
,
jsonhttp
.
MethodHandler
{
handle
(
router
,
"/files/{addr}"
,
jsonhttp
.
MethodHandler
{
"GET"
:
http
.
HandlerFunc
(
s
.
fileDownloadHandler
),
"GET"
:
web
.
ChainHandlers
(
s
.
newTracingHandler
(
"files-download"
),
web
.
FinalHandlerFunc
(
s
.
fileDownloadHandler
),
),
})
})
handle
(
router
,
"/dirs"
,
jsonhttp
.
MethodHandler
{
handle
(
router
,
"/dirs"
,
jsonhttp
.
MethodHandler
{
"POST"
:
http
.
HandlerFunc
(
s
.
dirUploadHandler
),
"POST"
:
web
.
ChainHandlers
(
s
.
newTracingHandler
(
"dirs-upload"
),
web
.
FinalHandlerFunc
(
s
.
dirUploadHandler
),
),
})
})
handle
(
router
,
"/bytes"
,
jsonhttp
.
MethodHandler
{
handle
(
router
,
"/bytes"
,
jsonhttp
.
MethodHandler
{
"POST"
:
http
.
HandlerFunc
(
s
.
bytesUploadHandler
),
"POST"
:
web
.
ChainHandlers
(
s
.
newTracingHandler
(
"bytes-upload"
),
web
.
FinalHandlerFunc
(
s
.
bytesUploadHandler
),
),
})
})
handle
(
router
,
"/bytes/{address}"
,
jsonhttp
.
MethodHandler
{
handle
(
router
,
"/bytes/{address}"
,
jsonhttp
.
MethodHandler
{
"GET"
:
http
.
HandlerFunc
(
s
.
bytesGetHandler
),
"GET"
:
web
.
ChainHandlers
(
s
.
newTracingHandler
(
"bytes-download"
),
web
.
FinalHandlerFunc
(
s
.
bytesGetHandler
),
),
})
})
handle
(
router
,
"/chunks/{addr}"
,
jsonhttp
.
MethodHandler
{
handle
(
router
,
"/chunks/{addr}"
,
jsonhttp
.
MethodHandler
{
...
@@ -64,7 +79,10 @@ func (s *server) setupRouting() {
...
@@ -64,7 +79,10 @@ func (s *server) setupRouting() {
})
})
handle
(
router
,
"/bzz/{address}/{path:.*}"
,
jsonhttp
.
MethodHandler
{
handle
(
router
,
"/bzz/{address}/{path:.*}"
,
jsonhttp
.
MethodHandler
{
"GET"
:
http
.
HandlerFunc
(
s
.
bzzDownloadHandler
),
"GET"
:
web
.
ChainHandlers
(
s
.
newTracingHandler
(
"bzz-download"
),
web
.
FinalHandlerFunc
(
s
.
bzzDownloadHandler
),
),
})
})
handle
(
router
,
"/tags"
,
web
.
ChainHandlers
(
handle
(
router
,
"/tags"
,
web
.
ChainHandlers
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment