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
5e1a341d
Unverified
Commit
5e1a341d
authored
Feb 10, 2021
by
acud
Committed by
GitHub
Feb 10, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
api: unexport api struct fields (#1229)
parent
b9ea7aff
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
322 additions
and
322 deletions
+322
-322
api.go
pkg/api/api.go
+25
-25
bytes.go
pkg/api/bytes.go
+5
-5
bzz.go
pkg/api/bzz.go
+9
-9
chunk.go
pkg/api/chunk.go
+24
-24
dirs.go
pkg/api/dirs.go
+4
-4
feed.go
pkg/api/feed.go
+29
-29
file.go
pkg/api/file.go
+11
-11
pin_bytes.go
pkg/api/pin_bytes.go
+21
-21
pin_bzz.go
pkg/api/pin_bzz.go
+21
-21
pin_chunks.go
pkg/api/pin_chunks.go
+65
-65
pin_files.go
pkg/api/pin_files.go
+21
-21
pss.go
pkg/api/pss.go
+18
-18
router.go
pkg/api/router.go
+4
-4
soc.go
pkg/api/soc.go
+23
-23
tag.go
pkg/api/tag.go
+42
-42
No files found.
pkg/api/api.go
View file @
5e1a341d
...
@@ -65,13 +65,13 @@ type Service interface {
...
@@ -65,13 +65,13 @@ type Service interface {
}
}
type
server
struct
{
type
server
struct
{
T
ags
*
tags
.
Tags
t
ags
*
tags
.
Tags
S
torer
storage
.
Storer
s
torer
storage
.
Storer
R
esolver
resolver
.
Interface
r
esolver
resolver
.
Interface
P
ss
pss
.
Interface
p
ss
pss
.
Interface
T
raversal
traversal
.
Service
t
raversal
traversal
.
Service
L
ogger
logging
.
Logger
l
ogger
logging
.
Logger
T
racer
*
tracing
.
Tracer
t
racer
*
tracing
.
Tracer
feedFactory
feeds
.
Factory
feedFactory
feeds
.
Factory
Options
Options
http
.
Handler
http
.
Handler
...
@@ -95,15 +95,15 @@ const (
...
@@ -95,15 +95,15 @@ const (
// New will create a and initialize a new API service.
// New will create a and initialize a new API service.
func
New
(
tags
*
tags
.
Tags
,
storer
storage
.
Storer
,
resolver
resolver
.
Interface
,
pss
pss
.
Interface
,
traversalService
traversal
.
Service
,
feedFactory
feeds
.
Factory
,
logger
logging
.
Logger
,
tracer
*
tracing
.
Tracer
,
o
Options
)
Service
{
func
New
(
tags
*
tags
.
Tags
,
storer
storage
.
Storer
,
resolver
resolver
.
Interface
,
pss
pss
.
Interface
,
traversalService
traversal
.
Service
,
feedFactory
feeds
.
Factory
,
logger
logging
.
Logger
,
tracer
*
tracing
.
Tracer
,
o
Options
)
Service
{
s
:=
&
server
{
s
:=
&
server
{
T
ags
:
tags
,
t
ags
:
tags
,
S
torer
:
storer
,
s
torer
:
storer
,
R
esolver
:
resolver
,
r
esolver
:
resolver
,
P
ss
:
pss
,
p
ss
:
pss
,
T
raversal
:
traversalService
,
t
raversal
:
traversalService
,
feedFactory
:
feedFactory
,
feedFactory
:
feedFactory
,
Options
:
o
,
Options
:
o
,
L
ogger
:
logger
,
l
ogger
:
logger
,
T
racer
:
tracer
,
t
racer
:
tracer
,
metrics
:
newMetrics
(),
metrics
:
newMetrics
(),
quit
:
make
(
chan
struct
{}),
quit
:
make
(
chan
struct
{}),
}
}
...
@@ -115,7 +115,7 @@ func New(tags *tags.Tags, storer storage.Storer, resolver resolver.Interface, ps
...
@@ -115,7 +115,7 @@ func New(tags *tags.Tags, storer storage.Storer, resolver resolver.Interface, ps
// Close hangs up running websockets on shutdown.
// Close hangs up running websockets on shutdown.
func
(
s
*
server
)
Close
()
error
{
func
(
s
*
server
)
Close
()
error
{
s
.
L
ogger
.
Info
(
"api shutting down"
)
s
.
l
ogger
.
Info
(
"api shutting down"
)
close
(
s
.
quit
)
close
(
s
.
quit
)
done
:=
make
(
chan
struct
{})
done
:=
make
(
chan
struct
{})
...
@@ -138,7 +138,7 @@ func (s *server) Close() error {
...
@@ -138,7 +138,7 @@ func (s *server) Close() error {
func
(
s
*
server
)
getOrCreateTag
(
tagUid
string
)
(
*
tags
.
Tag
,
bool
,
error
)
{
func
(
s
*
server
)
getOrCreateTag
(
tagUid
string
)
(
*
tags
.
Tag
,
bool
,
error
)
{
// if tag ID is not supplied, create a new tag
// if tag ID is not supplied, create a new tag
if
tagUid
==
""
{
if
tagUid
==
""
{
tag
,
err
:=
s
.
T
ags
.
Create
(
0
)
tag
,
err
:=
s
.
t
ags
.
Create
(
0
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
false
,
fmt
.
Errorf
(
"cannot create tag: %w"
,
err
)
return
nil
,
false
,
fmt
.
Errorf
(
"cannot create tag: %w"
,
err
)
}
}
...
@@ -153,11 +153,11 @@ func (s *server) getTag(tagUid string) (*tags.Tag, error) {
...
@@ -153,11 +153,11 @@ func (s *server) getTag(tagUid string) (*tags.Tag, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"cannot parse taguid: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"cannot parse taguid: %w"
,
err
)
}
}
return
s
.
T
ags
.
Get
(
uint32
(
uid
))
return
s
.
t
ags
.
Get
(
uint32
(
uid
))
}
}
func
(
s
*
server
)
resolveNameOrAddress
(
str
string
)
(
swarm
.
Address
,
error
)
{
func
(
s
*
server
)
resolveNameOrAddress
(
str
string
)
(
swarm
.
Address
,
error
)
{
log
:=
s
.
L
ogger
log
:=
s
.
l
ogger
// Try and parse the name as a bzz address.
// Try and parse the name as a bzz address.
addr
,
err
:=
swarm
.
ParseHexAddress
(
str
)
addr
,
err
:=
swarm
.
ParseHexAddress
(
str
)
...
@@ -167,13 +167,13 @@ func (s *server) resolveNameOrAddress(str string) (swarm.Address, error) {
...
@@ -167,13 +167,13 @@ func (s *server) resolveNameOrAddress(str string) (swarm.Address, error) {
}
}
// If no resolver is not available, return an error.
// If no resolver is not available, return an error.
if
s
.
R
esolver
==
nil
{
if
s
.
r
esolver
==
nil
{
return
swarm
.
ZeroAddress
,
errNoResolver
return
swarm
.
ZeroAddress
,
errNoResolver
}
}
// Try and resolve the name using the provided resolver.
// Try and resolve the name using the provided resolver.
log
.
Debugf
(
"name resolve: attempting to resolve %s to bzz address"
,
str
)
log
.
Debugf
(
"name resolve: attempting to resolve %s to bzz address"
,
str
)
addr
,
err
=
s
.
R
esolver
.
Resolve
(
str
)
addr
,
err
=
s
.
r
esolver
.
Resolve
(
str
)
if
err
==
nil
{
if
err
==
nil
{
log
.
Tracef
(
"name resolve: resolved name %s to %s"
,
str
,
addr
)
log
.
Tracef
(
"name resolve: resolved name %s to %s"
,
str
,
addr
)
return
addr
,
nil
return
addr
,
nil
...
@@ -197,18 +197,18 @@ func requestEncrypt(r *http.Request) bool {
...
@@ -197,18 +197,18 @@ func requestEncrypt(r *http.Request) bool {
func
(
s
*
server
)
newTracingHandler
(
spanName
string
)
func
(
h
http
.
Handler
)
http
.
Handler
{
func
(
s
*
server
)
newTracingHandler
(
spanName
string
)
func
(
h
http
.
Handler
)
http
.
Handler
{
return
func
(
h
http
.
Handler
)
http
.
Handler
{
return
func
(
h
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
ctx
,
err
:=
s
.
T
racer
.
WithContextFromHTTPHeaders
(
r
.
Context
(),
r
.
Header
)
ctx
,
err
:=
s
.
t
racer
.
WithContextFromHTTPHeaders
(
r
.
Context
(),
r
.
Header
)
if
err
!=
nil
&&
!
errors
.
Is
(
err
,
tracing
.
ErrContextNotFound
)
{
if
err
!=
nil
&&
!
errors
.
Is
(
err
,
tracing
.
ErrContextNotFound
)
{
s
.
L
ogger
.
Debugf
(
"span '%s': extract tracing context: %v"
,
spanName
,
err
)
s
.
l
ogger
.
Debugf
(
"span '%s': extract tracing context: %v"
,
spanName
,
err
)
// ignore
// ignore
}
}
span
,
_
,
ctx
:=
s
.
Tracer
.
StartSpanFromContext
(
ctx
,
spanName
,
s
.
L
ogger
)
span
,
_
,
ctx
:=
s
.
tracer
.
StartSpanFromContext
(
ctx
,
spanName
,
s
.
l
ogger
)
defer
span
.
Finish
()
defer
span
.
Finish
()
err
=
s
.
T
racer
.
AddContextHTTPHeader
(
ctx
,
r
.
Header
)
err
=
s
.
t
racer
.
AddContextHTTPHeader
(
ctx
,
r
.
Header
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"span '%s': inject tracing context: %v"
,
spanName
,
err
)
s
.
l
ogger
.
Debugf
(
"span '%s': inject tracing context: %v"
,
spanName
,
err
)
// ignore
// ignore
}
}
...
...
pkg/api/bytes.go
View file @
5e1a341d
...
@@ -23,7 +23,7 @@ type bytesPostResponse struct {
...
@@ -23,7 +23,7 @@ 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
.
L
ogger
)
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
tag
,
created
,
err
:=
s
.
getOrCreateTag
(
r
.
Header
.
Get
(
SwarmTagHeader
))
tag
,
created
,
err
:=
s
.
getOrCreateTag
(
r
.
Header
.
Get
(
SwarmTagHeader
))
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -38,8 +38,8 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -38,8 +38,8 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
if
estimatedTotalChunks
:=
requestCalculateNumberOfChunks
(
r
);
estimatedTotalChunks
>
0
{
if
estimatedTotalChunks
:=
requestCalculateNumberOfChunks
(
r
);
estimatedTotalChunks
>
0
{
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
)
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bytes upload: increment tag: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"bytes upload: increment tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"bytes upload: increment tag"
)
s
.
l
ogger
.
Error
(
"bytes upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
return
}
}
...
@@ -49,7 +49,7 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -49,7 +49,7 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
// Add the tag to the context
// Add the tag to the context
ctx
:=
sctx
.
SetTag
(
r
.
Context
(),
tag
)
ctx
:=
sctx
.
SetTag
(
r
.
Context
(),
tag
)
pipe
:=
builder
.
NewPipelineBuilder
(
ctx
,
s
.
S
torer
,
requestModePut
(
r
),
requestEncrypt
(
r
))
pipe
:=
builder
.
NewPipelineBuilder
(
ctx
,
s
.
s
torer
,
requestModePut
(
r
),
requestEncrypt
(
r
))
address
,
err
:=
builder
.
FeedPipeline
(
ctx
,
pipe
,
r
.
Body
,
r
.
ContentLength
)
address
,
err
:=
builder
.
FeedPipeline
(
ctx
,
pipe
,
r
.
Body
,
r
.
ContentLength
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"bytes upload: split write all: %v"
,
err
)
logger
.
Debugf
(
"bytes upload: split write all: %v"
,
err
)
...
@@ -75,7 +75,7 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -75,7 +75,7 @@ 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
.
L
ogger
)
.
Logger
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
.
Logger
nameOrHex
:=
mux
.
Vars
(
r
)[
"address"
]
nameOrHex
:=
mux
.
Vars
(
r
)[
"address"
]
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
...
...
pkg/api/bzz.go
View file @
5e1a341d
...
@@ -34,8 +34,8 @@ import (
...
@@ -34,8 +34,8 @@ import (
)
)
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
.
L
ogger
)
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
ls
:=
loadsave
.
New
(
s
.
S
torer
,
storage
.
ModePutRequest
,
false
)
ls
:=
loadsave
.
New
(
s
.
s
torer
,
storage
.
ModePutRequest
,
false
)
feedDereferenced
:=
false
feedDereferenced
:=
false
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
...
@@ -62,7 +62,7 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -62,7 +62,7 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
FETCH
:
FETCH
:
// read manifest entry
// read manifest entry
j
,
_
,
err
:=
joiner
.
New
(
ctx
,
s
.
S
torer
,
address
)
j
,
_
,
err
:=
joiner
.
New
(
ctx
,
s
.
s
torer
,
address
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"bzz download: joiner manifest entry %s: %v"
,
address
,
err
)
logger
.
Debugf
(
"bzz download: joiner manifest entry %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"bzz download: joiner %s"
,
address
)
logger
.
Errorf
(
"bzz download: joiner %s"
,
address
)
...
@@ -104,8 +104,8 @@ FETCH:
...
@@ -104,8 +104,8 @@ FETCH:
feedDereferenced
=
true
feedDereferenced
=
true
curBytes
,
err
:=
cur
.
MarshalBinary
()
curBytes
,
err
:=
cur
.
MarshalBinary
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: marshal feed index: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"bzz download: marshal feed index: %v"
,
err
)
s
.
L
ogger
.
Error
(
"bzz download: marshal index"
)
s
.
l
ogger
.
Error
(
"bzz download: marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
return
return
}
}
...
@@ -129,7 +129,7 @@ FETCH:
...
@@ -129,7 +129,7 @@ FETCH:
}
}
// read metadata
// read metadata
j
,
_
,
err
=
joiner
.
New
(
ctx
,
s
.
S
torer
,
e
.
Metadata
())
j
,
_
,
err
=
joiner
.
New
(
ctx
,
s
.
s
torer
,
e
.
Metadata
())
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"bzz download: joiner metadata %s: %v"
,
address
,
err
)
logger
.
Debugf
(
"bzz download: joiner metadata %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"bzz download: joiner %s"
,
address
)
logger
.
Errorf
(
"bzz download: joiner %s"
,
address
)
...
@@ -251,13 +251,13 @@ FETCH:
...
@@ -251,13 +251,13 @@ FETCH:
func
(
s
*
server
)
serveManifestEntry
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
address
,
manifestEntryAddress
swarm
.
Address
,
etag
bool
)
{
func
(
s
*
server
)
serveManifestEntry
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
address
,
manifestEntryAddress
swarm
.
Address
,
etag
bool
)
{
var
(
var
(
logger
=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
L
ogger
)
logger
=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
ctx
=
r
.
Context
()
ctx
=
r
.
Context
()
buf
=
bytes
.
NewBuffer
(
nil
)
buf
=
bytes
.
NewBuffer
(
nil
)
)
)
// read file entry
// read file entry
j
,
_
,
err
:=
joiner
.
New
(
ctx
,
s
.
S
torer
,
manifestEntryAddress
)
j
,
_
,
err
:=
joiner
.
New
(
ctx
,
s
.
s
torer
,
manifestEntryAddress
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"bzz download: joiner read file entry %s: %v"
,
address
,
err
)
logger
.
Debugf
(
"bzz download: joiner read file entry %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"bzz download: joiner read file entry %s"
,
address
)
logger
.
Errorf
(
"bzz download: joiner read file entry %s"
,
address
)
...
@@ -282,7 +282,7 @@ func (s *server) serveManifestEntry(w http.ResponseWriter, r *http.Request, addr
...
@@ -282,7 +282,7 @@ func (s *server) serveManifestEntry(w http.ResponseWriter, r *http.Request, addr
}
}
// read file metadata
// read file metadata
j
,
_
,
err
=
joiner
.
New
(
ctx
,
s
.
S
torer
,
fe
.
Metadata
())
j
,
_
,
err
=
joiner
.
New
(
ctx
,
s
.
s
torer
,
fe
.
Metadata
())
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"bzz download: joiner read file entry %s: %v"
,
address
,
err
)
logger
.
Debugf
(
"bzz download: joiner read file entry %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"bzz download: joiner read file entry %s"
,
address
)
logger
.
Errorf
(
"bzz download: joiner read file entry %s"
,
address
)
...
...
pkg/api/chunk.go
View file @
5e1a341d
...
@@ -37,8 +37,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -37,8 +37,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
if
h
:=
r
.
Header
.
Get
(
SwarmTagHeader
);
h
!=
""
{
if
h
:=
r
.
Header
.
Get
(
SwarmTagHeader
);
h
!=
""
{
tag
,
err
=
s
.
getTag
(
h
)
tag
,
err
=
s
.
getTag
(
h
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: get tag: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"chunk upload: get tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: get tag"
)
s
.
l
ogger
.
Error
(
"chunk upload: get tag"
)
jsonhttp
.
BadRequest
(
w
,
"cannot get tag"
)
jsonhttp
.
BadRequest
(
w
,
"cannot get tag"
)
return
return
...
@@ -50,8 +50,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -50,8 +50,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
// increment the StateSplit here since we dont have a splitter for the file upload
// increment the StateSplit here since we dont have a splitter for the file upload
err
=
tag
.
Inc
(
tags
.
StateSplit
)
err
=
tag
.
Inc
(
tags
.
StateSplit
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: increment tag: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"chunk upload: increment tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: increment tag"
)
s
.
l
ogger
.
Error
(
"chunk upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
return
}
}
...
@@ -62,15 +62,15 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -62,15 +62,15 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
return
}
}
s
.
L
ogger
.
Debugf
(
"chunk upload: read chunk data error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"chunk upload: read chunk data error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: read chunk data error"
)
s
.
l
ogger
.
Error
(
"chunk upload: read chunk data error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
return
return
}
}
if
len
(
data
)
<
swarm
.
SpanSize
{
if
len
(
data
)
<
swarm
.
SpanSize
{
s
.
L
ogger
.
Debug
(
"chunk upload: not enough data"
)
s
.
l
ogger
.
Debug
(
"chunk upload: not enough data"
)
s
.
L
ogger
.
Error
(
"chunk upload: data length"
)
s
.
l
ogger
.
Error
(
"chunk upload: data length"
)
jsonhttp
.
BadRequest
(
w
,
"data length"
)
jsonhttp
.
BadRequest
(
w
,
"data length"
)
return
return
}
}
...
@@ -80,8 +80,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -80,8 +80,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
err
=
hasher
.
SetSpanBytes
(
data
[
:
swarm
.
SpanSize
])
err
=
hasher
.
SetSpanBytes
(
data
[
:
swarm
.
SpanSize
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: set span: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"chunk upload: set span: %v"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: span error"
)
s
.
l
ogger
.
Error
(
"chunk upload: span error"
)
jsonhttp
.
InternalServerError
(
w
,
"span error"
)
jsonhttp
.
InternalServerError
(
w
,
"span error"
)
return
return
}
}
...
@@ -94,17 +94,17 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -94,17 +94,17 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
address
:=
swarm
.
NewAddress
(
hasher
.
Sum
(
nil
))
address
:=
swarm
.
NewAddress
(
hasher
.
Sum
(
nil
))
chunk
:=
swarm
.
NewChunk
(
address
,
data
)
chunk
:=
swarm
.
NewChunk
(
address
,
data
)
seen
,
err
:=
s
.
S
torer
.
Put
(
ctx
,
requestModePut
(
r
),
chunk
)
seen
,
err
:=
s
.
s
torer
.
Put
(
ctx
,
requestModePut
(
r
),
chunk
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: chunk write error: %v, addr %s"
,
err
,
address
)
s
.
l
ogger
.
Debugf
(
"chunk upload: chunk write error: %v, addr %s"
,
err
,
address
)
s
.
L
ogger
.
Error
(
"chunk upload: chunk write error"
)
s
.
l
ogger
.
Error
(
"chunk upload: chunk write error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk write error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk write error"
)
return
return
}
else
if
len
(
seen
)
>
0
&&
seen
[
0
]
&&
tag
!=
nil
{
}
else
if
len
(
seen
)
>
0
&&
seen
[
0
]
&&
tag
!=
nil
{
err
:=
tag
.
Inc
(
tags
.
StateSeen
)
err
:=
tag
.
Inc
(
tags
.
StateSeen
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: increment tag"
,
err
)
s
.
l
ogger
.
Debugf
(
"chunk upload: increment tag"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: increment tag"
)
s
.
l
ogger
.
Error
(
"chunk upload: increment tag"
)
jsonhttp
.
BadRequest
(
w
,
"increment tag"
)
jsonhttp
.
BadRequest
(
w
,
"increment tag"
)
return
return
}
}
...
@@ -114,8 +114,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -114,8 +114,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
// indicate that the chunk is stored
// indicate that the chunk is stored
err
=
tag
.
Inc
(
tags
.
StateStored
)
err
=
tag
.
Inc
(
tags
.
StateStored
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: increment tag"
,
err
)
s
.
l
ogger
.
Debugf
(
"chunk upload: increment tag"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: increment tag"
)
s
.
l
ogger
.
Error
(
"chunk upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
return
}
}
...
@@ -137,27 +137,27 @@ func (s *server) chunkGetHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -137,27 +137,27 @@ func (s *server) chunkGetHandler(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
(
"chunk: parse chunk address %s: %v"
,
nameOrHex
,
err
)
s
.
l
ogger
.
Debugf
(
"chunk: parse chunk address %s: %v"
,
nameOrHex
,
err
)
s
.
L
ogger
.
Error
(
"chunk: parse chunk address error"
)
s
.
l
ogger
.
Error
(
"chunk: parse chunk address error"
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
}
}
chunk
,
err
:=
s
.
S
torer
.
Get
(
ctx
,
storage
.
ModeGetRequest
,
address
)
chunk
,
err
:=
s
.
s
torer
.
Get
(
ctx
,
storage
.
ModeGetRequest
,
address
)
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
s
.
L
ogger
.
Tracef
(
"chunk: chunk not found. addr %s"
,
address
)
s
.
l
ogger
.
Tracef
(
"chunk: chunk not found. addr %s"
,
address
)
jsonhttp
.
NotFound
(
w
,
"chunk not found"
)
jsonhttp
.
NotFound
(
w
,
"chunk not found"
)
return
return
}
}
if
errors
.
Is
(
err
,
netstore
.
ErrRecoveryAttempt
)
{
if
errors
.
Is
(
err
,
netstore
.
ErrRecoveryAttempt
)
{
s
.
L
ogger
.
Tracef
(
"chunk: chunk recovery initiated. addr %s"
,
address
)
s
.
l
ogger
.
Tracef
(
"chunk: chunk recovery initiated. addr %s"
,
address
)
jsonhttp
.
Accepted
(
w
,
"chunk recovery initiated. retry after sometime."
)
jsonhttp
.
Accepted
(
w
,
"chunk recovery initiated. retry after sometime."
)
return
return
}
}
s
.
L
ogger
.
Debugf
(
"chunk: chunk read error: %v ,addr %s"
,
err
,
address
)
s
.
l
ogger
.
Debugf
(
"chunk: chunk read error: %v ,addr %s"
,
err
,
address
)
s
.
L
ogger
.
Error
(
"chunk: chunk read error"
)
s
.
l
ogger
.
Error
(
"chunk: chunk read error"
)
jsonhttp
.
InternalServerError
(
w
,
"chunk read error"
)
jsonhttp
.
InternalServerError
(
w
,
"chunk read error"
)
return
return
}
}
...
...
pkg/api/dirs.go
View file @
5e1a341d
...
@@ -43,7 +43,7 @@ const (
...
@@ -43,7 +43,7 @@ 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
.
L
ogger
)
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
err
:=
validateRequest
(
r
)
err
:=
validateRequest
(
r
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Errorf
(
"dir upload, validate request"
)
logger
.
Errorf
(
"dir upload, validate request"
)
...
@@ -62,10 +62,10 @@ func (s *server) dirUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -62,10 +62,10 @@ func (s *server) dirUploadHandler(w http.ResponseWriter, r *http.Request) {
// Add the tag to the context
// Add the tag to the context
ctx
:=
sctx
.
SetTag
(
r
.
Context
(),
tag
)
ctx
:=
sctx
.
SetTag
(
r
.
Context
(),
tag
)
p
:=
requestPipelineFn
(
s
.
S
torer
,
r
)
p
:=
requestPipelineFn
(
s
.
s
torer
,
r
)
encrypt
:=
requestEncrypt
(
r
)
encrypt
:=
requestEncrypt
(
r
)
l
:=
loadsave
.
New
(
s
.
S
torer
,
requestModePut
(
r
),
encrypt
)
l
:=
loadsave
.
New
(
s
.
s
torer
,
requestModePut
(
r
),
encrypt
)
reference
,
err
:=
storeDir
(
ctx
,
encrypt
,
r
.
Body
,
s
.
L
ogger
,
p
,
l
,
r
.
Header
.
Get
(
SwarmIndexDocumentHeader
),
r
.
Header
.
Get
(
SwarmErrorDocumentHeader
),
tag
,
created
)
reference
,
err
:=
storeDir
(
ctx
,
encrypt
,
r
.
Body
,
s
.
l
ogger
,
p
,
l
,
r
.
Header
.
Get
(
SwarmIndexDocumentHeader
),
r
.
Header
.
Get
(
SwarmErrorDocumentHeader
),
tag
,
created
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"dir upload: store dir err: %v"
,
err
)
logger
.
Debugf
(
"dir upload: store dir err: %v"
,
err
)
logger
.
Errorf
(
"dir upload: store dir"
)
logger
.
Errorf
(
"dir upload: store dir"
)
...
...
pkg/api/feed.go
View file @
5e1a341d
...
@@ -40,16 +40,16 @@ type feedReferenceResponse struct {
...
@@ -40,16 +40,16 @@ type feedReferenceResponse struct {
func
(
s
*
server
)
feedGetHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
feedGetHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: decode owner: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: decode owner: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: bad owner"
)
s
.
l
ogger
.
Error
(
"feed get: bad owner"
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
return
return
}
}
topic
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"topic"
])
topic
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"topic"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: decode topic: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: decode topic: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: bad topic"
)
s
.
l
ogger
.
Error
(
"feed get: bad topic"
)
jsonhttp
.
BadRequest
(
w
,
"bad topic"
)
jsonhttp
.
BadRequest
(
w
,
"bad topic"
)
return
return
}
}
...
@@ -59,8 +59,8 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -59,8 +59,8 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
if
atStr
!=
""
{
if
atStr
!=
""
{
at
,
err
=
strconv
.
ParseInt
(
atStr
,
10
,
64
)
at
,
err
=
strconv
.
ParseInt
(
atStr
,
10
,
64
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: decode at: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: decode at: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: bad at"
)
s
.
l
ogger
.
Error
(
"feed get: bad at"
)
jsonhttp
.
BadRequest
(
w
,
"bad at"
)
jsonhttp
.
BadRequest
(
w
,
"bad at"
)
return
return
}
}
...
@@ -71,48 +71,48 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -71,48 +71,48 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
f
:=
feeds
.
New
(
topic
,
common
.
BytesToAddress
(
owner
))
f
:=
feeds
.
New
(
topic
,
common
.
BytesToAddress
(
owner
))
lookup
,
err
:=
s
.
feedFactory
.
NewLookup
(
feeds
.
Sequence
,
f
)
lookup
,
err
:=
s
.
feedFactory
.
NewLookup
(
feeds
.
Sequence
,
f
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: new lookup: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: new lookup: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: new lookup"
)
s
.
l
ogger
.
Error
(
"feed get: new lookup"
)
jsonhttp
.
InternalServerError
(
w
,
"new lookup"
)
jsonhttp
.
InternalServerError
(
w
,
"new lookup"
)
return
return
}
}
ch
,
cur
,
next
,
err
:=
lookup
.
At
(
r
.
Context
(),
at
,
0
)
ch
,
cur
,
next
,
err
:=
lookup
.
At
(
r
.
Context
(),
at
,
0
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: lookup: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: lookup: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: lookup error"
)
s
.
l
ogger
.
Error
(
"feed get: lookup error"
)
jsonhttp
.
NotFound
(
w
,
"lookup failed"
)
jsonhttp
.
NotFound
(
w
,
"lookup failed"
)
return
return
}
}
// KLUDGE: if a feed was never updated, the chunk will be nil
// KLUDGE: if a feed was never updated, the chunk will be nil
if
ch
==
nil
{
if
ch
==
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: no update found: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: no update found: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: no update found"
)
s
.
l
ogger
.
Error
(
"feed get: no update found"
)
jsonhttp
.
NotFound
(
w
,
"lookup failed"
)
jsonhttp
.
NotFound
(
w
,
"lookup failed"
)
return
return
}
}
ref
,
_
,
err
:=
parseFeedUpdate
(
ch
)
ref
,
_
,
err
:=
parseFeedUpdate
(
ch
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: parse update: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: parse update: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: parse update"
)
s
.
l
ogger
.
Error
(
"feed get: parse update"
)
jsonhttp
.
InternalServerError
(
w
,
"parse update"
)
jsonhttp
.
InternalServerError
(
w
,
"parse update"
)
return
return
}
}
curBytes
,
err
:=
cur
.
MarshalBinary
()
curBytes
,
err
:=
cur
.
MarshalBinary
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: marshal current index: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: marshal current index: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: marshal index"
)
s
.
l
ogger
.
Error
(
"feed get: marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
return
return
}
}
nextBytes
,
err
:=
next
.
MarshalBinary
()
nextBytes
,
err
:=
next
.
MarshalBinary
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: marshal next index: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed get: marshal next index: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: marshal index"
)
s
.
l
ogger
.
Error
(
"feed get: marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
return
return
}
}
...
@@ -127,24 +127,24 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -127,24 +127,24 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
feedPostHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
feedPostHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed put: decode owner: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed put: decode owner: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed put: bad owner"
)
s
.
l
ogger
.
Error
(
"feed put: bad owner"
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
return
return
}
}
topic
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"topic"
])
topic
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"topic"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed put: decode topic: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed put: decode topic: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed put: bad topic"
)
s
.
l
ogger
.
Error
(
"feed put: bad topic"
)
jsonhttp
.
BadRequest
(
w
,
"bad topic"
)
jsonhttp
.
BadRequest
(
w
,
"bad topic"
)
return
return
}
}
l
:=
loadsave
.
New
(
s
.
S
torer
,
requestModePut
(
r
),
false
)
l
:=
loadsave
.
New
(
s
.
s
torer
,
requestModePut
(
r
),
false
)
feedManifest
,
err
:=
manifest
.
NewDefaultManifest
(
l
,
false
)
feedManifest
,
err
:=
manifest
.
NewDefaultManifest
(
l
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed put: new manifest: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed put: new manifest: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed put: new manifest"
)
s
.
l
ogger
.
Error
(
"feed put: new manifest"
)
jsonhttp
.
InternalServerError
(
w
,
"create manifest"
)
jsonhttp
.
InternalServerError
(
w
,
"create manifest"
)
return
return
}
}
...
@@ -160,15 +160,15 @@ func (s *server) feedPostHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -160,15 +160,15 @@ func (s *server) feedPostHandler(w http.ResponseWriter, r *http.Request) {
// a feed manifest stores the metadata at the root "/" path
// a feed manifest stores the metadata at the root "/" path
err
=
feedManifest
.
Add
(
r
.
Context
(),
"/"
,
manifest
.
NewEntry
(
swarm
.
NewAddress
(
emptyAddr
),
meta
))
err
=
feedManifest
.
Add
(
r
.
Context
(),
"/"
,
manifest
.
NewEntry
(
swarm
.
NewAddress
(
emptyAddr
),
meta
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed post: add manifest entry: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed post: add manifest entry: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed post: add manifest entry"
)
s
.
l
ogger
.
Error
(
"feed post: add manifest entry"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
ref
,
err
:=
feedManifest
.
Store
(
r
.
Context
())
ref
,
err
:=
feedManifest
.
Store
(
r
.
Context
())
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed post: store manifest: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"feed post: store manifest: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed post: store manifest"
)
s
.
l
ogger
.
Error
(
"feed post: store manifest"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
...
pkg/api/file.go
View file @
5e1a341d
...
@@ -47,7 +47,7 @@ type fileUploadResponse struct {
...
@@ -47,7 +47,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
.
L
ogger
)
logger
=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
fileName
,
contentLength
string
fileName
,
contentLength
string
fileSize
uint64
fileSize
uint64
contentType
=
r
.
Header
.
Get
(
"Content-Type"
)
contentType
=
r
.
Header
.
Get
(
"Content-Type"
)
...
@@ -74,8 +74,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -74,8 +74,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
if
estimatedTotalChunks
:=
requestCalculateNumberOfChunks
(
r
);
estimatedTotalChunks
>
0
{
if
estimatedTotalChunks
:=
requestCalculateNumberOfChunks
(
r
);
estimatedTotalChunks
>
0
{
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
)
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: increment tag: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"file upload: increment tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: increment tag"
)
s
.
l
ogger
.
Error
(
"file upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
return
}
}
...
@@ -164,7 +164,7 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -164,7 +164,7 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
reader
=
tmp
reader
=
tmp
}
}
p
:=
requestPipelineFn
(
s
.
S
torer
,
r
)
p
:=
requestPipelineFn
(
s
.
s
torer
,
r
)
// first store the file and get its reference
// first store the file and get its reference
fr
,
err
:=
p
(
ctx
,
reader
,
int64
(
fileSize
))
fr
,
err
:=
p
(
ctx
,
reader
,
int64
(
fileSize
))
...
@@ -200,8 +200,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -200,8 +200,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
estimatedTotalChunks
:=
calculateNumberOfChunks
(
int64
(
len
(
metadataBytes
)),
requestEncrypt
(
r
))
estimatedTotalChunks
:=
calculateNumberOfChunks
(
int64
(
len
(
metadataBytes
)),
requestEncrypt
(
r
))
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
+
1
)
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
+
1
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: increment tag: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"file upload: increment tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: increment tag"
)
s
.
l
ogger
.
Error
(
"file upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
return
}
}
...
@@ -258,7 +258,7 @@ type fileUploadInfo struct {
...
@@ -258,7 +258,7 @@ 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
.
L
ogger
)
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
nameOrHex
:=
mux
.
Vars
(
r
)[
"addr"
]
nameOrHex
:=
mux
.
Vars
(
r
)[
"addr"
]
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
...
@@ -275,7 +275,7 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -275,7 +275,7 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
}
}
// read entry
// read entry
j
,
_
,
err
:=
joiner
.
New
(
r
.
Context
(),
s
.
S
torer
,
address
)
j
,
_
,
err
:=
joiner
.
New
(
r
.
Context
(),
s
.
s
torer
,
address
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"file download: joiner %s: %v"
,
address
,
err
)
logger
.
Debugf
(
"file download: joiner %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"file download: joiner %s"
,
address
)
logger
.
Errorf
(
"file download: joiner %s"
,
address
)
...
@@ -311,7 +311,7 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -311,7 +311,7 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
}
}
// read metadata
// read metadata
j
,
_
,
err
=
joiner
.
New
(
r
.
Context
(),
s
.
S
torer
,
e
.
Metadata
())
j
,
_
,
err
=
joiner
.
New
(
r
.
Context
(),
s
.
s
torer
,
e
.
Metadata
())
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"file download: joiner %s: %v"
,
address
,
err
)
logger
.
Debugf
(
"file download: joiner %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"file download: joiner %s"
,
address
)
logger
.
Errorf
(
"file download: joiner %s"
,
address
)
...
@@ -346,13 +346,13 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -346,13 +346,13 @@ 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
,
etag
bool
)
{
func
(
s
*
server
)
downloadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
reference
swarm
.
Address
,
additionalHeaders
http
.
Header
,
etag
bool
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
L
ogger
)
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
if
targets
!=
""
{
if
targets
!=
""
{
r
=
r
.
WithContext
(
sctx
.
SetTargets
(
r
.
Context
(),
targets
))
r
=
r
.
WithContext
(
sctx
.
SetTargets
(
r
.
Context
(),
targets
))
}
}
reader
,
l
,
err
:=
joiner
.
New
(
r
.
Context
(),
s
.
S
torer
,
reference
)
reader
,
l
,
err
:=
joiner
.
New
(
r
.
Context
(),
s
.
s
torer
,
reference
)
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
logger
.
Debugf
(
"api download: not found %s: %v"
,
reference
,
err
)
logger
.
Debugf
(
"api download: not found %s: %v"
,
reference
,
err
)
...
...
pkg/api/pin_bytes.go
View file @
5e1a341d
...
@@ -19,25 +19,25 @@ import (
...
@@ -19,25 +19,25 @@ import (
func
(
s
*
server
)
pinBytes
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
pinBytes
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: parse address: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin bytes: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bytes: parse address"
)
s
.
l
ogger
.
Error
(
"pin bytes: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
return
}
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: localstore has: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin bytes: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bytes: store"
)
s
.
l
ogger
.
Error
(
"pin bytes: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
if
!
has
{
if
!
has
{
_
,
err
:=
s
.
S
torer
.
Get
(
r
.
Context
(),
storage
.
ModeGetRequest
,
addr
)
_
,
err
:=
s
.
s
torer
.
Get
(
r
.
Context
(),
storage
.
ModeGetRequest
,
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: netstore"
)
s
.
l
ogger
.
Error
(
"pin chunk: netstore"
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
...
@@ -48,17 +48,17 @@ func (s *server) pinBytes(w http.ResponseWriter, r *http.Request) {
...
@@ -48,17 +48,17 @@ func (s *server) pinBytes(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseBytesAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseBytesAddresses
(
ctx
,
addr
,
chunkAddressFn
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: traverse chunks: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Debugf
(
"pin bytes: traverse chunks: %v, addr %s"
,
err
,
addr
)
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
s
.
L
ogger
.
Error
(
"pin bytes: invalid type"
)
s
.
l
ogger
.
Error
(
"pin bytes: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
return
}
}
s
.
L
ogger
.
Error
(
"pin bytes: cannot pin"
)
s
.
l
ogger
.
Error
(
"pin bytes: cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
return
return
}
}
...
@@ -70,16 +70,16 @@ func (s *server) pinBytes(w http.ResponseWriter, r *http.Request) {
...
@@ -70,16 +70,16 @@ func (s *server) pinBytes(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
unpinBytes
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
unpinBytes
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: parse address: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin bytes: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bytes: parse address"
)
s
.
l
ogger
.
Error
(
"pin bytes: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
return
}
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: localstore has: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin bytes: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bytes: store"
)
s
.
l
ogger
.
Error
(
"pin bytes: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
@@ -93,17 +93,17 @@ func (s *server) unpinBytes(w http.ResponseWriter, r *http.Request) {
...
@@ -93,17 +93,17 @@ func (s *server) unpinBytes(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseBytesAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseBytesAddresses
(
ctx
,
addr
,
chunkAddressFn
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: traverse chunks: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Debugf
(
"pin bytes: traverse chunks: %v, addr %s"
,
err
,
addr
)
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
s
.
L
ogger
.
Error
(
"pin bytes: invalid type"
)
s
.
l
ogger
.
Error
(
"pin bytes: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
return
}
}
s
.
L
ogger
.
Error
(
"pin bytes: cannot unpin"
)
s
.
l
ogger
.
Error
(
"pin bytes: cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
return
return
}
}
...
...
pkg/api/pin_bzz.go
View file @
5e1a341d
...
@@ -19,25 +19,25 @@ import (
...
@@ -19,25 +19,25 @@ import (
func
(
s
*
server
)
pinBzz
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
pinBzz
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: parse address: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin bzz: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bzz: parse address"
)
s
.
l
ogger
.
Error
(
"pin bzz: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
return
}
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: localstore has: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin bzz: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bzz: store"
)
s
.
l
ogger
.
Error
(
"pin bzz: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
if
!
has
{
if
!
has
{
_
,
err
:=
s
.
S
torer
.
Get
(
r
.
Context
(),
storage
.
ModeGetRequest
,
addr
)
_
,
err
:=
s
.
s
torer
.
Get
(
r
.
Context
(),
storage
.
ModeGetRequest
,
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: netstore"
)
s
.
l
ogger
.
Error
(
"pin chunk: netstore"
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
...
@@ -48,17 +48,17 @@ func (s *server) pinBzz(w http.ResponseWriter, r *http.Request) {
...
@@ -48,17 +48,17 @@ func (s *server) pinBzz(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseManifestAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseManifestAddresses
(
ctx
,
addr
,
chunkAddressFn
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: traverse chunks: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Debugf
(
"pin bzz: traverse chunks: %v, addr %s"
,
err
,
addr
)
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
s
.
L
ogger
.
Error
(
"pin bzz: invalid type"
)
s
.
l
ogger
.
Error
(
"pin bzz: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
return
}
}
s
.
L
ogger
.
Error
(
"pin bzz: cannot pin"
)
s
.
l
ogger
.
Error
(
"pin bzz: cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
return
return
}
}
...
@@ -70,16 +70,16 @@ func (s *server) pinBzz(w http.ResponseWriter, r *http.Request) {
...
@@ -70,16 +70,16 @@ func (s *server) pinBzz(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
unpinBzz
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
unpinBzz
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: parse address: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin bzz: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bzz: parse address"
)
s
.
l
ogger
.
Error
(
"pin bzz: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
return
}
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: localstore has: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin bzz: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bzz: store"
)
s
.
l
ogger
.
Error
(
"pin bzz: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
@@ -93,17 +93,17 @@ func (s *server) unpinBzz(w http.ResponseWriter, r *http.Request) {
...
@@ -93,17 +93,17 @@ func (s *server) unpinBzz(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseManifestAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseManifestAddresses
(
ctx
,
addr
,
chunkAddressFn
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: traverse chunks: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Debugf
(
"pin bzz: traverse chunks: %v, addr %s"
,
err
,
addr
)
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
s
.
L
ogger
.
Error
(
"pin bzz: invalid type"
)
s
.
l
ogger
.
Error
(
"pin bzz: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
return
}
}
s
.
L
ogger
.
Error
(
"pin bzz: cannot unpin"
)
s
.
l
ogger
.
Error
(
"pin bzz: cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
return
return
}
}
...
...
pkg/api/pin_chunks.go
View file @
5e1a341d
This diff is collapsed.
Click to expand it.
pkg/api/pin_files.go
View file @
5e1a341d
...
@@ -19,25 +19,25 @@ import (
...
@@ -19,25 +19,25 @@ import (
func
(
s
*
server
)
pinFile
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
pinFile
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: parse address: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin files: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin files: parse address"
)
s
.
l
ogger
.
Error
(
"pin files: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
return
}
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: localstore has: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin files: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin files: store"
)
s
.
l
ogger
.
Error
(
"pin files: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
if
!
has
{
if
!
has
{
_
,
err
:=
s
.
S
torer
.
Get
(
r
.
Context
(),
storage
.
ModeGetRequest
,
addr
)
_
,
err
:=
s
.
s
torer
.
Get
(
r
.
Context
(),
storage
.
ModeGetRequest
,
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: netstore"
)
s
.
l
ogger
.
Error
(
"pin chunk: netstore"
)
jsonhttp
.
NotFound
(
w
,
nil
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
return
...
@@ -48,17 +48,17 @@ func (s *server) pinFile(w http.ResponseWriter, r *http.Request) {
...
@@ -48,17 +48,17 @@ func (s *server) pinFile(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseFileAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseFileAddresses
(
ctx
,
addr
,
chunkAddressFn
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: traverse chunks: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Debugf
(
"pin files: traverse chunks: %v, addr %s"
,
err
,
addr
)
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
s
.
L
ogger
.
Error
(
"pin files: invalid type"
)
s
.
l
ogger
.
Error
(
"pin files: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
return
}
}
s
.
L
ogger
.
Error
(
"pin files: cannot pin"
)
s
.
l
ogger
.
Error
(
"pin files: cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
return
return
}
}
...
@@ -70,16 +70,16 @@ func (s *server) pinFile(w http.ResponseWriter, r *http.Request) {
...
@@ -70,16 +70,16 @@ func (s *server) pinFile(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
unpinFile
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
unpinFile
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: parse address: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin files: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin files: parse address"
)
s
.
l
ogger
.
Error
(
"pin files: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
return
}
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: localstore has: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pin files: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin files: store"
)
s
.
l
ogger
.
Error
(
"pin files: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
@@ -93,17 +93,17 @@ func (s *server) unpinFile(w http.ResponseWriter, r *http.Request) {
...
@@ -93,17 +93,17 @@ func (s *server) unpinFile(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseFileAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseFileAddresses
(
ctx
,
addr
,
chunkAddressFn
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: traverse chunks: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Debugf
(
"pin files: traverse chunks: %v, addr %s"
,
err
,
addr
)
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
if
errors
.
Is
(
err
,
traversal
.
ErrInvalidType
)
{
s
.
L
ogger
.
Error
(
"pin files: invalid type"
)
s
.
l
ogger
.
Error
(
"pin files: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
return
}
}
s
.
L
ogger
.
Error
(
"pin files: cannot unpin"
)
s
.
l
ogger
.
Error
(
"pin files: cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
return
return
}
}
...
...
pkg/api/pss.go
View file @
5e1a341d
...
@@ -37,8 +37,8 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -37,8 +37,8 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
for
_
,
v
:=
range
tgts
{
for
_
,
v
:=
range
tgts
{
target
,
err
:=
hex
.
DecodeString
(
v
)
target
,
err
:=
hex
.
DecodeString
(
v
)
if
err
!=
nil
||
len
(
target
)
>
targetMaxLength
{
if
err
!=
nil
||
len
(
target
)
>
targetMaxLength
{
s
.
L
ogger
.
Debugf
(
"pss send: bad targets: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss send: bad targets: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pss send: bad targets"
)
s
.
l
ogger
.
Error
(
"pss send: bad targets"
)
jsonhttp
.
BadRequest
(
w
,
nil
)
jsonhttp
.
BadRequest
(
w
,
nil
)
return
return
}
}
...
@@ -55,8 +55,8 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -55,8 +55,8 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
var
err
error
var
err
error
recipient
,
err
=
pss
.
ParseRecipient
(
recipientQueryString
)
recipient
,
err
=
pss
.
ParseRecipient
(
recipientQueryString
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss recipient: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss recipient: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pss recipient"
)
s
.
l
ogger
.
Error
(
"pss recipient"
)
jsonhttp
.
BadRequest
(
w
,
nil
)
jsonhttp
.
BadRequest
(
w
,
nil
)
return
return
}
}
...
@@ -64,16 +64,16 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -64,16 +64,16 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
payload
,
err
:=
ioutil
.
ReadAll
(
r
.
Body
)
payload
,
err
:=
ioutil
.
ReadAll
(
r
.
Body
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss read payload: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss read payload: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pss read payload"
)
s
.
l
ogger
.
Error
(
"pss read payload"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
err
=
s
.
P
ss
.
Send
(
r
.
Context
(),
topic
,
payload
,
recipient
,
targets
)
err
=
s
.
p
ss
.
Send
(
r
.
Context
(),
topic
,
payload
,
recipient
,
targets
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss send payload: %v. topic: %s"
,
err
,
topicVar
)
s
.
l
ogger
.
Debugf
(
"pss send payload: %v. topic: %s"
,
err
,
topicVar
)
s
.
L
ogger
.
Error
(
"pss send payload"
)
s
.
l
ogger
.
Error
(
"pss send payload"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
@@ -91,8 +91,8 @@ func (s *server) pssWsHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -91,8 +91,8 @@ func (s *server) pssWsHandler(w http.ResponseWriter, r *http.Request) {
conn
,
err
:=
upgrader
.
Upgrade
(
w
,
r
,
nil
)
conn
,
err
:=
upgrader
.
Upgrade
(
w
,
r
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss ws: upgrade: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss ws: upgrade: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pss ws: cannot upgrade"
)
s
.
l
ogger
.
Error
(
"pss ws: cannot upgrade"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
@@ -116,14 +116,14 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
...
@@ -116,14 +116,14 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
ticker
.
Stop
()
ticker
.
Stop
()
_
=
conn
.
Close
()
_
=
conn
.
Close
()
}()
}()
cleanup
:=
s
.
P
ss
.
Register
(
topic
,
func
(
_
context
.
Context
,
m
[]
byte
)
{
cleanup
:=
s
.
p
ss
.
Register
(
topic
,
func
(
_
context
.
Context
,
m
[]
byte
)
{
dataC
<-
m
dataC
<-
m
})
})
defer
cleanup
()
defer
cleanup
()
conn
.
SetCloseHandler
(
func
(
code
int
,
text
string
)
error
{
conn
.
SetCloseHandler
(
func
(
code
int
,
text
string
)
error
{
s
.
L
ogger
.
Debugf
(
"pss handler: client gone. code %d message %s"
,
code
,
text
)
s
.
l
ogger
.
Debugf
(
"pss handler: client gone. code %d message %s"
,
code
,
text
)
close
(
gone
)
close
(
gone
)
return
nil
return
nil
})
})
...
@@ -133,13 +133,13 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
...
@@ -133,13 +133,13 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
case
b
:=
<-
dataC
:
case
b
:=
<-
dataC
:
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
return
return
}
}
err
=
conn
.
WriteMessage
(
websocket
.
BinaryMessage
,
b
)
err
=
conn
.
WriteMessage
(
websocket
.
BinaryMessage
,
b
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss write to websocket: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss write to websocket: %v"
,
err
)
return
return
}
}
...
@@ -147,12 +147,12 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
...
@@ -147,12 +147,12 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
// shutdown
// shutdown
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
return
return
}
}
err
=
conn
.
WriteMessage
(
websocket
.
CloseMessage
,
[]
byte
{})
err
=
conn
.
WriteMessage
(
websocket
.
CloseMessage
,
[]
byte
{})
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss write close message: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss write close message: %v"
,
err
)
}
}
return
return
case
<-
gone
:
case
<-
gone
:
...
@@ -161,7 +161,7 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
...
@@ -161,7 +161,7 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
case
<-
ticker
.
C
:
case
<-
ticker
.
C
:
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
return
return
}
}
if
err
=
conn
.
WriteMessage
(
websocket
.
PingMessage
,
nil
);
err
!=
nil
{
if
err
=
conn
.
WriteMessage
(
websocket
.
PingMessage
,
nil
);
err
!=
nil
{
...
...
pkg/api/router.go
View file @
5e1a341d
...
@@ -190,7 +190,7 @@ func (s *server) setupRouting() {
...
@@ -190,7 +190,7 @@ func (s *server) setupRouting() {
)
)
s
.
Handler
=
web
.
ChainHandlers
(
s
.
Handler
=
web
.
ChainHandlers
(
httpaccess
.
NewHTTPAccessLogHandler
(
s
.
Logger
,
logrus
.
InfoLevel
,
s
.
T
racer
,
"api access"
),
httpaccess
.
NewHTTPAccessLogHandler
(
s
.
logger
,
logrus
.
InfoLevel
,
s
.
t
racer
,
"api access"
),
handlers
.
CompressHandler
,
handlers
.
CompressHandler
,
// todo: add recovery handler
// todo: add recovery handler
s
.
pageviewMetricsHandler
,
s
.
pageviewMetricsHandler
,
...
@@ -214,7 +214,7 @@ func (s *server) setupRouting() {
...
@@ -214,7 +214,7 @@ func (s *server) setupRouting() {
func
(
s
*
server
)
gatewayModeForbidEndpointHandler
(
h
http
.
Handler
)
http
.
Handler
{
func
(
s
*
server
)
gatewayModeForbidEndpointHandler
(
h
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
if
s
.
GatewayMode
{
if
s
.
GatewayMode
{
s
.
L
ogger
.
Tracef
(
"gateway mode: forbidden %s"
,
r
.
URL
.
String
())
s
.
l
ogger
.
Tracef
(
"gateway mode: forbidden %s"
,
r
.
URL
.
String
())
jsonhttp
.
Forbidden
(
w
,
nil
)
jsonhttp
.
Forbidden
(
w
,
nil
)
return
return
}
}
...
@@ -226,12 +226,12 @@ func (s *server) gatewayModeForbidHeadersHandler(h http.Handler) http.Handler {
...
@@ -226,12 +226,12 @@ func (s *server) gatewayModeForbidHeadersHandler(h http.Handler) http.Handler {
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
if
s
.
GatewayMode
{
if
s
.
GatewayMode
{
if
strings
.
ToLower
(
r
.
Header
.
Get
(
SwarmPinHeader
))
==
"true"
{
if
strings
.
ToLower
(
r
.
Header
.
Get
(
SwarmPinHeader
))
==
"true"
{
s
.
L
ogger
.
Tracef
(
"gateway mode: forbidden pinning %s"
,
r
.
URL
.
String
())
s
.
l
ogger
.
Tracef
(
"gateway mode: forbidden pinning %s"
,
r
.
URL
.
String
())
jsonhttp
.
Forbidden
(
w
,
"pinning is disabled"
)
jsonhttp
.
Forbidden
(
w
,
"pinning is disabled"
)
return
return
}
}
if
strings
.
ToLower
(
r
.
Header
.
Get
(
SwarmEncryptHeader
))
==
"true"
{
if
strings
.
ToLower
(
r
.
Header
.
Get
(
SwarmEncryptHeader
))
==
"true"
{
s
.
L
ogger
.
Tracef
(
"gateway mode: forbidden encryption %s"
,
r
.
URL
.
String
())
s
.
l
ogger
.
Tracef
(
"gateway mode: forbidden encryption %s"
,
r
.
URL
.
String
())
jsonhttp
.
Forbidden
(
w
,
"encryption is disabled"
)
jsonhttp
.
Forbidden
(
w
,
"encryption is disabled"
)
return
return
}
}
...
...
pkg/api/soc.go
View file @
5e1a341d
...
@@ -28,31 +28,31 @@ type socPostResponse struct {
...
@@ -28,31 +28,31 @@ type socPostResponse struct {
func
(
s
*
server
)
socUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
server
)
socUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: bad owner: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"soc upload: bad owner: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
s
.
l
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
return
return
}
}
id
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"id"
])
id
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"id"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: bad id: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"soc upload: bad id: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
s
.
l
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
jsonhttp
.
BadRequest
(
w
,
"bad id"
)
jsonhttp
.
BadRequest
(
w
,
"bad id"
)
return
return
}
}
sigStr
:=
r
.
URL
.
Query
()
.
Get
(
"sig"
)
sigStr
:=
r
.
URL
.
Query
()
.
Get
(
"sig"
)
if
sigStr
==
""
{
if
sigStr
==
""
{
s
.
L
ogger
.
Debugf
(
"soc upload: empty signature"
)
s
.
l
ogger
.
Debugf
(
"soc upload: empty signature"
)
s
.
L
ogger
.
Error
(
"soc upload: empty signature"
)
s
.
l
ogger
.
Error
(
"soc upload: empty signature"
)
jsonhttp
.
BadRequest
(
w
,
"empty signature"
)
jsonhttp
.
BadRequest
(
w
,
"empty signature"
)
return
return
}
}
sig
,
err
:=
hex
.
DecodeString
(
sigStr
)
sig
,
err
:=
hex
.
DecodeString
(
sigStr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: bad signature: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"soc upload: bad signature: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: bad signature"
)
s
.
l
ogger
.
Error
(
"soc upload: bad signature"
)
jsonhttp
.
BadRequest
(
w
,
"bad signature"
)
jsonhttp
.
BadRequest
(
w
,
"bad signature"
)
return
return
}
}
...
@@ -62,55 +62,55 @@ func (s *server) socUploadHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -62,55 +62,55 @@ func (s *server) socUploadHandler(w http.ResponseWriter, r *http.Request) {
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
return
}
}
s
.
L
ogger
.
Debugf
(
"soc upload: read chunk data error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"soc upload: read chunk data error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: read chunk data error"
)
s
.
l
ogger
.
Error
(
"soc upload: read chunk data error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
return
return
}
}
if
len
(
data
)
<
swarm
.
SpanSize
{
if
len
(
data
)
<
swarm
.
SpanSize
{
s
.
L
ogger
.
Debugf
(
"soc upload: chunk data too short"
)
s
.
l
ogger
.
Debugf
(
"soc upload: chunk data too short"
)
s
.
L
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
s
.
l
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
jsonhttp
.
BadRequest
(
w
,
"short chunk data"
)
jsonhttp
.
BadRequest
(
w
,
"short chunk data"
)
return
return
}
}
if
len
(
data
)
>
swarm
.
ChunkSize
+
swarm
.
SpanSize
{
if
len
(
data
)
>
swarm
.
ChunkSize
+
swarm
.
SpanSize
{
s
.
L
ogger
.
Debugf
(
"soc upload: chunk data exceeds %d bytes"
,
swarm
.
ChunkSize
+
swarm
.
SpanSize
)
s
.
l
ogger
.
Debugf
(
"soc upload: chunk data exceeds %d bytes"
,
swarm
.
ChunkSize
+
swarm
.
SpanSize
)
s
.
L
ogger
.
Error
(
"soc upload: chunk data error"
)
s
.
l
ogger
.
Error
(
"soc upload: chunk data error"
)
jsonhttp
.
RequestEntityTooLarge
(
w
,
"payload too large"
)
jsonhttp
.
RequestEntityTooLarge
(
w
,
"payload too large"
)
return
return
}
}
ch
,
err
:=
chunk
(
data
)
ch
,
err
:=
chunk
(
data
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: create content addressed chunk: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"soc upload: create content addressed chunk: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: chunk data error"
)
s
.
l
ogger
.
Error
(
"soc upload: chunk data error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk data error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk data error"
)
return
return
}
}
chunk
,
err
:=
soc
.
NewSignedChunk
(
id
,
ch
,
owner
,
sig
)
chunk
,
err
:=
soc
.
NewSignedChunk
(
id
,
ch
,
owner
,
sig
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: read chunk data error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"soc upload: read chunk data error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: read chunk data error"
)
s
.
l
ogger
.
Error
(
"soc upload: read chunk data error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
return
return
}
}
if
!
soc
.
Valid
(
chunk
)
{
if
!
soc
.
Valid
(
chunk
)
{
s
.
L
ogger
.
Debugf
(
"soc upload: invalid chunk: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"soc upload: invalid chunk: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: invalid chunk"
)
s
.
l
ogger
.
Error
(
"soc upload: invalid chunk"
)
jsonhttp
.
Unauthorized
(
w
,
"invalid chunk"
)
jsonhttp
.
Unauthorized
(
w
,
"invalid chunk"
)
return
return
}
}
ctx
:=
r
.
Context
()
ctx
:=
r
.
Context
()
_
,
err
=
s
.
S
torer
.
Put
(
ctx
,
requestModePut
(
r
),
chunk
)
_
,
err
=
s
.
s
torer
.
Put
(
ctx
,
requestModePut
(
r
),
chunk
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: chunk write error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"soc upload: chunk write error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: chunk write error"
)
s
.
l
ogger
.
Error
(
"soc upload: chunk write error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk write error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk write error"
)
return
return
}
}
...
...
pkg/api/tag.go
View file @
5e1a341d
...
@@ -50,8 +50,8 @@ func (s *server) createTagHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -50,8 +50,8 @@ func (s *server) createTagHandler(w http.ResponseWriter, r *http.Request) {
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
return
}
}
s
.
L
ogger
.
Debugf
(
"create tag: read request body error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"create tag: read request body error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"create tag: read request body error"
)
s
.
l
ogger
.
Error
(
"create tag: read request body error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read request"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read request"
)
return
return
}
}
...
@@ -60,17 +60,17 @@ func (s *server) createTagHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -60,17 +60,17 @@ func (s *server) createTagHandler(w http.ResponseWriter, r *http.Request) {
if
len
(
body
)
>
0
{
if
len
(
body
)
>
0
{
err
=
json
.
Unmarshal
(
body
,
&
tagr
)
err
=
json
.
Unmarshal
(
body
,
&
tagr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"create tag: unmarshal tag name error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"create tag: unmarshal tag name error: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"create tag: unmarshal tag name error"
)
s
.
l
ogger
.
Errorf
(
"create tag: unmarshal tag name error"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
return
return
}
}
}
}
tag
,
err
:=
s
.
T
ags
.
Create
(
0
)
tag
,
err
:=
s
.
t
ags
.
Create
(
0
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"create tag: tag create error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"create tag: tag create error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"create tag: tag create error"
)
s
.
l
ogger
.
Error
(
"create tag: tag create error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot create tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot create tag"
)
return
return
}
}
...
@@ -83,22 +83,22 @@ func (s *server) getTagHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -83,22 +83,22 @@ func (s *server) getTagHandler(w http.ResponseWriter, r *http.Request) {
id
,
err
:=
strconv
.
Atoi
(
idStr
)
id
,
err
:=
strconv
.
Atoi
(
idStr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"get tag: parse id %s: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Debugf
(
"get tag: parse id %s: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Error
(
"get tag: parse id"
)
s
.
l
ogger
.
Error
(
"get tag: parse id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
return
return
}
}
tag
,
err
:=
s
.
T
ags
.
Get
(
uint32
(
id
))
tag
,
err
:=
s
.
t
ags
.
Get
(
uint32
(
id
))
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
s
.
L
ogger
.
Debugf
(
"get tag: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
l
ogger
.
Debugf
(
"get tag: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
L
ogger
.
Error
(
"get tag: tag not present"
)
s
.
l
ogger
.
Error
(
"get tag: tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
return
return
}
}
s
.
L
ogger
.
Debugf
(
"get tag: tag %v: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Debugf
(
"get tag: tag %v: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Errorf
(
"get tag: %v"
,
idStr
)
s
.
l
ogger
.
Errorf
(
"get tag: %v"
,
idStr
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
return
return
}
}
...
@@ -112,27 +112,27 @@ func (s *server) deleteTagHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -112,27 +112,27 @@ func (s *server) deleteTagHandler(w http.ResponseWriter, r *http.Request) {
id
,
err
:=
strconv
.
Atoi
(
idStr
)
id
,
err
:=
strconv
.
Atoi
(
idStr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"delete tag: parse id %s: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Debugf
(
"delete tag: parse id %s: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Error
(
"delete tag: parse id"
)
s
.
l
ogger
.
Error
(
"delete tag: parse id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
return
return
}
}
tag
,
err
:=
s
.
T
ags
.
Get
(
uint32
(
id
))
tag
,
err
:=
s
.
t
ags
.
Get
(
uint32
(
id
))
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
s
.
L
ogger
.
Debugf
(
"delete tag: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
l
ogger
.
Debugf
(
"delete tag: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
L
ogger
.
Error
(
"delete tag: tag not present"
)
s
.
l
ogger
.
Error
(
"delete tag: tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
return
return
}
}
s
.
L
ogger
.
Debugf
(
"delete tag: tag %v: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Debugf
(
"delete tag: tag %v: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Errorf
(
"delete tag: %v"
,
idStr
)
s
.
l
ogger
.
Errorf
(
"delete tag: %v"
,
idStr
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
return
return
}
}
s
.
T
ags
.
Delete
(
tag
.
Uid
)
s
.
t
ags
.
Delete
(
tag
.
Uid
)
jsonhttp
.
NoContent
(
w
)
jsonhttp
.
NoContent
(
w
)
}
}
...
@@ -141,8 +141,8 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -141,8 +141,8 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
id
,
err
:=
strconv
.
Atoi
(
idStr
)
id
,
err
:=
strconv
.
Atoi
(
idStr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"done split tag: parse id %s: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Debugf
(
"done split tag: parse id %s: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Error
(
"done split tag: parse id"
)
s
.
l
ogger
.
Error
(
"done split tag: parse id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
return
return
}
}
...
@@ -152,8 +152,8 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -152,8 +152,8 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
return
}
}
s
.
L
ogger
.
Debugf
(
"done split tag: read request body error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"done split tag: read request body error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"done split tag: read request body error"
)
s
.
l
ogger
.
Error
(
"done split tag: read request body error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read request"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read request"
)
return
return
}
}
...
@@ -162,31 +162,31 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -162,31 +162,31 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
if
len
(
body
)
>
0
{
if
len
(
body
)
>
0
{
err
=
json
.
Unmarshal
(
body
,
&
tagr
)
err
=
json
.
Unmarshal
(
body
,
&
tagr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"done split tag: unmarshal tag name error: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"done split tag: unmarshal tag name error: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"done split tag: unmarshal tag name error"
)
s
.
l
ogger
.
Errorf
(
"done split tag: unmarshal tag name error"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
return
return
}
}
}
}
tag
,
err
:=
s
.
T
ags
.
Get
(
uint32
(
id
))
tag
,
err
:=
s
.
t
ags
.
Get
(
uint32
(
id
))
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
s
.
L
ogger
.
Debugf
(
"done split: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
l
ogger
.
Debugf
(
"done split: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
L
ogger
.
Error
(
"done split: tag not present"
)
s
.
l
ogger
.
Error
(
"done split: tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
return
return
}
}
s
.
L
ogger
.
Debugf
(
"done split: tag %v: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Debugf
(
"done split: tag %v: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Errorf
(
"done split: %v"
,
idStr
)
s
.
l
ogger
.
Errorf
(
"done split: %v"
,
idStr
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
return
return
}
}
_
,
err
=
tag
.
DoneSplit
(
tagr
.
Address
)
_
,
err
=
tag
.
DoneSplit
(
tagr
.
Address
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"done split: failed for address %v"
,
tagr
.
Address
)
s
.
l
ogger
.
Debugf
(
"done split: failed for address %v"
,
tagr
.
Address
)
s
.
L
ogger
.
Errorf
(
"done split: failed for address %v"
,
tagr
.
Address
)
s
.
l
ogger
.
Errorf
(
"done split: failed for address %v"
,
tagr
.
Address
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
@@ -202,24 +202,24 @@ func (s *server) listTagsHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -202,24 +202,24 @@ func (s *server) listTagsHandler(w http.ResponseWriter, r *http.Request) {
if
v
:=
r
.
URL
.
Query
()
.
Get
(
"offset"
);
v
!=
""
{
if
v
:=
r
.
URL
.
Query
()
.
Get
(
"offset"
);
v
!=
""
{
offset
,
err
=
strconv
.
Atoi
(
v
)
offset
,
err
=
strconv
.
Atoi
(
v
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"list tags: parse offset: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"list tags: parse offset: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list tags: bad offset"
)
s
.
l
ogger
.
Errorf
(
"list tags: bad offset"
)
jsonhttp
.
BadRequest
(
w
,
"bad offset"
)
jsonhttp
.
BadRequest
(
w
,
"bad offset"
)
}
}
}
}
if
v
:=
r
.
URL
.
Query
()
.
Get
(
"limit"
);
v
!=
""
{
if
v
:=
r
.
URL
.
Query
()
.
Get
(
"limit"
);
v
!=
""
{
limit
,
err
=
strconv
.
Atoi
(
v
)
limit
,
err
=
strconv
.
Atoi
(
v
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"list tags: parse limit: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"list tags: parse limit: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list tags: bad limit"
)
s
.
l
ogger
.
Errorf
(
"list tags: bad limit"
)
jsonhttp
.
BadRequest
(
w
,
"bad limit"
)
jsonhttp
.
BadRequest
(
w
,
"bad limit"
)
}
}
}
}
tagList
,
err
:=
s
.
T
ags
.
ListAll
(
r
.
Context
(),
offset
,
limit
)
tagList
,
err
:=
s
.
t
ags
.
ListAll
(
r
.
Context
(),
offset
,
limit
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"list tags: listing: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"list tags: listing: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list tags: listing"
)
s
.
l
ogger
.
Errorf
(
"list tags: listing"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
...
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