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
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 {
}
type
server
struct
{
T
ags
*
tags
.
Tags
S
torer
storage
.
Storer
R
esolver
resolver
.
Interface
P
ss
pss
.
Interface
T
raversal
traversal
.
Service
L
ogger
logging
.
Logger
T
racer
*
tracing
.
Tracer
t
ags
*
tags
.
Tags
s
torer
storage
.
Storer
r
esolver
resolver
.
Interface
p
ss
pss
.
Interface
t
raversal
traversal
.
Service
l
ogger
logging
.
Logger
t
racer
*
tracing
.
Tracer
feedFactory
feeds
.
Factory
Options
http
.
Handler
...
...
@@ -95,15 +95,15 @@ const (
// 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
{
s
:=
&
server
{
T
ags
:
tags
,
S
torer
:
storer
,
R
esolver
:
resolver
,
P
ss
:
pss
,
T
raversal
:
traversalService
,
t
ags
:
tags
,
s
torer
:
storer
,
r
esolver
:
resolver
,
p
ss
:
pss
,
t
raversal
:
traversalService
,
feedFactory
:
feedFactory
,
Options
:
o
,
L
ogger
:
logger
,
T
racer
:
tracer
,
l
ogger
:
logger
,
t
racer
:
tracer
,
metrics
:
newMetrics
(),
quit
:
make
(
chan
struct
{}),
}
...
...
@@ -115,7 +115,7 @@ func New(tags *tags.Tags, storer storage.Storer, resolver resolver.Interface, ps
// Close hangs up running websockets on shutdown.
func
(
s
*
server
)
Close
()
error
{
s
.
L
ogger
.
Info
(
"api shutting down"
)
s
.
l
ogger
.
Info
(
"api shutting down"
)
close
(
s
.
quit
)
done
:=
make
(
chan
struct
{})
...
...
@@ -138,7 +138,7 @@ func (s *server) Close() error {
func
(
s
*
server
)
getOrCreateTag
(
tagUid
string
)
(
*
tags
.
Tag
,
bool
,
error
)
{
// if tag ID is not supplied, create a new tag
if
tagUid
==
""
{
tag
,
err
:=
s
.
T
ags
.
Create
(
0
)
tag
,
err
:=
s
.
t
ags
.
Create
(
0
)
if
err
!=
nil
{
return
nil
,
false
,
fmt
.
Errorf
(
"cannot create tag: %w"
,
err
)
}
...
...
@@ -153,11 +153,11 @@ func (s *server) getTag(tagUid string) (*tags.Tag, error) {
if
err
!=
nil
{
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
)
{
log
:=
s
.
L
ogger
log
:=
s
.
l
ogger
// Try and parse the name as a bzz address.
addr
,
err
:=
swarm
.
ParseHexAddress
(
str
)
...
...
@@ -167,13 +167,13 @@ func (s *server) resolveNameOrAddress(str string) (swarm.Address, error) {
}
// If no resolver is not available, return an error.
if
s
.
R
esolver
==
nil
{
if
s
.
r
esolver
==
nil
{
return
swarm
.
ZeroAddress
,
errNoResolver
}
// Try and resolve the name using the provided resolver.
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
{
log
.
Tracef
(
"name resolve: resolved name %s to %s"
,
str
,
addr
)
return
addr
,
nil
...
...
@@ -197,18 +197,18 @@ func requestEncrypt(r *http.Request) bool {
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
)
{
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
)
{
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
}
span
,
_
,
ctx
:=
s
.
Tracer
.
StartSpanFromContext
(
ctx
,
spanName
,
s
.
L
ogger
)
span
,
_
,
ctx
:=
s
.
tracer
.
StartSpanFromContext
(
ctx
,
spanName
,
s
.
l
ogger
)
defer
span
.
Finish
()
err
=
s
.
T
racer
.
AddContextHTTPHeader
(
ctx
,
r
.
Header
)
err
=
s
.
t
racer
.
AddContextHTTPHeader
(
ctx
,
r
.
Header
)
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
}
...
...
pkg/api/bytes.go
View file @
5e1a341d
...
...
@@ -23,7 +23,7 @@ type bytesPostResponse struct {
// bytesUploadHandler handles upload of raw binary data of arbitrary length.
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
))
if
err
!=
nil
{
...
...
@@ -38,8 +38,8 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
if
estimatedTotalChunks
:=
requestCalculateNumberOfChunks
(
r
);
estimatedTotalChunks
>
0
{
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bytes upload: increment tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"bytes upload: increment tag"
)
s
.
l
ogger
.
Debugf
(
"bytes upload: increment tag: %v"
,
err
)
s
.
l
ogger
.
Error
(
"bytes upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
}
...
...
@@ -49,7 +49,7 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
// Add the tag to the context
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
)
if
err
!=
nil
{
logger
.
Debugf
(
"bytes upload: split write all: %v"
,
err
)
...
...
@@ -75,7 +75,7 @@ func (s *server) bytesUploadHandler(w http.ResponseWriter, r *http.Request) {
// bytesGetHandler handles retrieval of raw binary data of arbitrary length.
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"
]
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
...
...
pkg/api/bzz.go
View file @
5e1a341d
...
...
@@ -34,8 +34,8 @@ import (
)
func
(
s
*
server
)
bzzDownloadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
L
ogger
)
ls
:=
loadsave
.
New
(
s
.
S
torer
,
storage
.
ModePutRequest
,
false
)
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
ls
:=
loadsave
.
New
(
s
.
s
torer
,
storage
.
ModePutRequest
,
false
)
feedDereferenced
:=
false
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
...
...
@@ -62,7 +62,7 @@ func (s *server) bzzDownloadHandler(w http.ResponseWriter, r *http.Request) {
FETCH
:
// read manifest entry
j
,
_
,
err
:=
joiner
.
New
(
ctx
,
s
.
S
torer
,
address
)
j
,
_
,
err
:=
joiner
.
New
(
ctx
,
s
.
s
torer
,
address
)
if
err
!=
nil
{
logger
.
Debugf
(
"bzz download: joiner manifest entry %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"bzz download: joiner %s"
,
address
)
...
...
@@ -104,8 +104,8 @@ FETCH:
feedDereferenced
=
true
curBytes
,
err
:=
cur
.
MarshalBinary
()
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"bzz download: marshal feed index: %v"
,
err
)
s
.
L
ogger
.
Error
(
"bzz download: marshal index"
)
s
.
l
ogger
.
Debugf
(
"bzz download: marshal feed index: %v"
,
err
)
s
.
l
ogger
.
Error
(
"bzz download: marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
return
}
...
...
@@ -129,7 +129,7 @@ FETCH:
}
// 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
{
logger
.
Debugf
(
"bzz download: joiner metadata %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"bzz download: joiner %s"
,
address
)
...
...
@@ -251,13 +251,13 @@ FETCH:
func
(
s
*
server
)
serveManifestEntry
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
address
,
manifestEntryAddress
swarm
.
Address
,
etag
bool
)
{
var
(
logger
=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
L
ogger
)
logger
=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
ctx
=
r
.
Context
()
buf
=
bytes
.
NewBuffer
(
nil
)
)
// read file entry
j
,
_
,
err
:=
joiner
.
New
(
ctx
,
s
.
S
torer
,
manifestEntryAddress
)
j
,
_
,
err
:=
joiner
.
New
(
ctx
,
s
.
s
torer
,
manifestEntryAddress
)
if
err
!=
nil
{
logger
.
Debugf
(
"bzz download: joiner read file entry %s: %v"
,
address
,
err
)
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
}
// 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
{
logger
.
Debugf
(
"bzz download: joiner read file entry %s: %v"
,
address
,
err
)
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) {
if
h
:=
r
.
Header
.
Get
(
SwarmTagHeader
);
h
!=
""
{
tag
,
err
=
s
.
getTag
(
h
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: get tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: get tag"
)
s
.
l
ogger
.
Debugf
(
"chunk upload: get tag: %v"
,
err
)
s
.
l
ogger
.
Error
(
"chunk upload: get tag"
)
jsonhttp
.
BadRequest
(
w
,
"cannot get tag"
)
return
...
...
@@ -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
err
=
tag
.
Inc
(
tags
.
StateSplit
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: increment tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: increment tag"
)
s
.
l
ogger
.
Debugf
(
"chunk upload: increment tag: %v"
,
err
)
s
.
l
ogger
.
Error
(
"chunk upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
}
...
...
@@ -62,15 +62,15 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
}
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
.
Debugf
(
"chunk upload: read chunk data error: %v"
,
err
)
s
.
l
ogger
.
Error
(
"chunk upload: read chunk data error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
return
}
if
len
(
data
)
<
swarm
.
SpanSize
{
s
.
L
ogger
.
Debug
(
"chunk upload: not enough data"
)
s
.
L
ogger
.
Error
(
"chunk upload: data length"
)
s
.
l
ogger
.
Debug
(
"chunk upload: not enough data"
)
s
.
l
ogger
.
Error
(
"chunk upload: data length"
)
jsonhttp
.
BadRequest
(
w
,
"data length"
)
return
}
...
...
@@ -80,8 +80,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
err
=
hasher
.
SetSpanBytes
(
data
[
:
swarm
.
SpanSize
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: set span: %v"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: span error"
)
s
.
l
ogger
.
Debugf
(
"chunk upload: set span: %v"
,
err
)
s
.
l
ogger
.
Error
(
"chunk upload: span error"
)
jsonhttp
.
InternalServerError
(
w
,
"span error"
)
return
}
...
...
@@ -94,17 +94,17 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
address
:=
swarm
.
NewAddress
(
hasher
.
Sum
(
nil
))
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
{
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
.
Debugf
(
"chunk upload: chunk write error: %v, addr %s"
,
err
,
address
)
s
.
l
ogger
.
Error
(
"chunk upload: chunk write error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk write error"
)
return
}
else
if
len
(
seen
)
>
0
&&
seen
[
0
]
&&
tag
!=
nil
{
err
:=
tag
.
Inc
(
tags
.
StateSeen
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: increment tag"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: increment tag"
)
s
.
l
ogger
.
Debugf
(
"chunk upload: increment tag"
,
err
)
s
.
l
ogger
.
Error
(
"chunk upload: increment tag"
)
jsonhttp
.
BadRequest
(
w
,
"increment tag"
)
return
}
...
...
@@ -114,8 +114,8 @@ func (s *server) chunkUploadHandler(w http.ResponseWriter, r *http.Request) {
// indicate that the chunk is stored
err
=
tag
.
Inc
(
tags
.
StateStored
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk upload: increment tag"
,
err
)
s
.
L
ogger
.
Error
(
"chunk upload: increment tag"
)
s
.
l
ogger
.
Debugf
(
"chunk upload: increment tag"
,
err
)
s
.
l
ogger
.
Error
(
"chunk upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
}
...
...
@@ -137,27 +137,27 @@ func (s *server) chunkGetHandler(w http.ResponseWriter, r *http.Request) {
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"chunk: parse chunk address %s: %v"
,
nameOrHex
,
err
)
s
.
L
ogger
.
Error
(
"chunk: parse chunk address error"
)
s
.
l
ogger
.
Debugf
(
"chunk: parse chunk address %s: %v"
,
nameOrHex
,
err
)
s
.
l
ogger
.
Error
(
"chunk: parse chunk address error"
)
jsonhttp
.
NotFound
(
w
,
nil
)
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
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"
)
return
}
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."
)
return
}
s
.
L
ogger
.
Debugf
(
"chunk: chunk read error: %v ,addr %s"
,
err
,
address
)
s
.
L
ogger
.
Error
(
"chunk: chunk read error"
)
s
.
l
ogger
.
Debugf
(
"chunk: chunk read error: %v ,addr %s"
,
err
,
address
)
s
.
l
ogger
.
Error
(
"chunk: chunk read error"
)
jsonhttp
.
InternalServerError
(
w
,
"chunk read error"
)
return
}
...
...
pkg/api/dirs.go
View file @
5e1a341d
...
...
@@ -43,7 +43,7 @@ const (
// dirUploadHandler uploads a directory supplied as a tar in an 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
)
if
err
!=
nil
{
logger
.
Errorf
(
"dir upload, validate request"
)
...
...
@@ -62,10 +62,10 @@ func (s *server) dirUploadHandler(w http.ResponseWriter, r *http.Request) {
// Add the tag to the context
ctx
:=
sctx
.
SetTag
(
r
.
Context
(),
tag
)
p
:=
requestPipelineFn
(
s
.
S
torer
,
r
)
p
:=
requestPipelineFn
(
s
.
s
torer
,
r
)
encrypt
:=
requestEncrypt
(
r
)
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
)
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
)
if
err
!=
nil
{
logger
.
Debugf
(
"dir upload: store dir err: %v"
,
err
)
logger
.
Errorf
(
"dir upload: store dir"
)
...
...
pkg/api/feed.go
View file @
5e1a341d
...
...
@@ -40,16 +40,16 @@ type feedReferenceResponse struct {
func
(
s
*
server
)
feedGetHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: decode owner: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: bad owner"
)
s
.
l
ogger
.
Debugf
(
"feed get: decode owner: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: bad owner"
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
return
}
topic
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"topic"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: decode topic: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: bad topic"
)
s
.
l
ogger
.
Debugf
(
"feed get: decode topic: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: bad topic"
)
jsonhttp
.
BadRequest
(
w
,
"bad topic"
)
return
}
...
...
@@ -59,8 +59,8 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
if
atStr
!=
""
{
at
,
err
=
strconv
.
ParseInt
(
atStr
,
10
,
64
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: decode at: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: bad at"
)
s
.
l
ogger
.
Debugf
(
"feed get: decode at: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: bad at"
)
jsonhttp
.
BadRequest
(
w
,
"bad at"
)
return
}
...
...
@@ -71,48 +71,48 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
f
:=
feeds
.
New
(
topic
,
common
.
BytesToAddress
(
owner
))
lookup
,
err
:=
s
.
feedFactory
.
NewLookup
(
feeds
.
Sequence
,
f
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: new lookup: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: new lookup"
)
s
.
l
ogger
.
Debugf
(
"feed get: new lookup: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: new lookup"
)
jsonhttp
.
InternalServerError
(
w
,
"new lookup"
)
return
}
ch
,
cur
,
next
,
err
:=
lookup
.
At
(
r
.
Context
(),
at
,
0
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: lookup: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: lookup error"
)
s
.
l
ogger
.
Debugf
(
"feed get: lookup: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: lookup error"
)
jsonhttp
.
NotFound
(
w
,
"lookup failed"
)
return
}
// KLUDGE: if a feed was never updated, the chunk will be nil
if
ch
==
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: no update found: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: no update found"
)
s
.
l
ogger
.
Debugf
(
"feed get: no update found: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: no update found"
)
jsonhttp
.
NotFound
(
w
,
"lookup failed"
)
return
}
ref
,
_
,
err
:=
parseFeedUpdate
(
ch
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: parse update: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: parse update"
)
s
.
l
ogger
.
Debugf
(
"feed get: parse update: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: parse update"
)
jsonhttp
.
InternalServerError
(
w
,
"parse update"
)
return
}
curBytes
,
err
:=
cur
.
MarshalBinary
()
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: marshal current index: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: marshal index"
)
s
.
l
ogger
.
Debugf
(
"feed get: marshal current index: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
return
}
nextBytes
,
err
:=
next
.
MarshalBinary
()
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed get: marshal next index: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed get: marshal index"
)
s
.
l
ogger
.
Debugf
(
"feed get: marshal next index: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed get: marshal index"
)
jsonhttp
.
InternalServerError
(
w
,
"marshal index"
)
return
}
...
...
@@ -127,24 +127,24 @@ func (s *server) feedGetHandler(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
feedPostHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed put: decode owner: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed put: bad owner"
)
s
.
l
ogger
.
Debugf
(
"feed put: decode owner: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed put: bad owner"
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
return
}
topic
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"topic"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed put: decode topic: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed put: bad topic"
)
s
.
l
ogger
.
Debugf
(
"feed put: decode topic: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed put: bad topic"
)
jsonhttp
.
BadRequest
(
w
,
"bad topic"
)
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
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed put: new manifest: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed put: new manifest"
)
s
.
l
ogger
.
Debugf
(
"feed put: new manifest: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed put: new manifest"
)
jsonhttp
.
InternalServerError
(
w
,
"create manifest"
)
return
}
...
...
@@ -160,15 +160,15 @@ func (s *server) feedPostHandler(w http.ResponseWriter, r *http.Request) {
// a feed manifest stores the metadata at the root "/" path
err
=
feedManifest
.
Add
(
r
.
Context
(),
"/"
,
manifest
.
NewEntry
(
swarm
.
NewAddress
(
emptyAddr
),
meta
))
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed post: add manifest entry: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed post: add manifest entry"
)
s
.
l
ogger
.
Debugf
(
"feed post: add manifest entry: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed post: add manifest entry"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
}
ref
,
err
:=
feedManifest
.
Store
(
r
.
Context
())
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"feed post: store manifest: %v"
,
err
)
s
.
L
ogger
.
Error
(
"feed post: store manifest"
)
s
.
l
ogger
.
Debugf
(
"feed post: store manifest: %v"
,
err
)
s
.
l
ogger
.
Error
(
"feed post: store manifest"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
}
...
...
pkg/api/file.go
View file @
5e1a341d
...
...
@@ -47,7 +47,7 @@ type fileUploadResponse struct {
func
(
s
*
server
)
fileUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
var
(
reader
io
.
Reader
logger
=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
L
ogger
)
logger
=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
fileName
,
contentLength
string
fileSize
uint64
contentType
=
r
.
Header
.
Get
(
"Content-Type"
)
...
...
@@ -74,8 +74,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
if
estimatedTotalChunks
:=
requestCalculateNumberOfChunks
(
r
);
estimatedTotalChunks
>
0
{
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: increment tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: increment tag"
)
s
.
l
ogger
.
Debugf
(
"file upload: increment tag: %v"
,
err
)
s
.
l
ogger
.
Error
(
"file upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
}
...
...
@@ -164,7 +164,7 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
reader
=
tmp
}
p
:=
requestPipelineFn
(
s
.
S
torer
,
r
)
p
:=
requestPipelineFn
(
s
.
s
torer
,
r
)
// first store the file and get its reference
fr
,
err
:=
p
(
ctx
,
reader
,
int64
(
fileSize
))
...
...
@@ -200,8 +200,8 @@ func (s *server) fileUploadHandler(w http.ResponseWriter, r *http.Request) {
estimatedTotalChunks
:=
calculateNumberOfChunks
(
int64
(
len
(
metadataBytes
)),
requestEncrypt
(
r
))
err
=
tag
.
IncN
(
tags
.
TotalChunks
,
estimatedTotalChunks
+
1
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"file upload: increment tag: %v"
,
err
)
s
.
L
ogger
.
Error
(
"file upload: increment tag"
)
s
.
l
ogger
.
Debugf
(
"file upload: increment tag: %v"
,
err
)
s
.
l
ogger
.
Error
(
"file upload: increment tag"
)
jsonhttp
.
InternalServerError
(
w
,
"increment tag"
)
return
}
...
...
@@ -258,7 +258,7 @@ type fileUploadInfo struct {
// fileDownloadHandler downloads the file given the entry's reference.
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"
]
address
,
err
:=
s
.
resolveNameOrAddress
(
nameOrHex
)
...
...
@@ -275,7 +275,7 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
}
// 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
{
logger
.
Debugf
(
"file download: joiner %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"file download: joiner %s"
,
address
)
...
...
@@ -311,7 +311,7 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
}
// 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
{
logger
.
Debugf
(
"file download: joiner %s: %v"
,
address
,
err
)
logger
.
Errorf
(
"file download: joiner %s"
,
address
)
...
...
@@ -346,13 +346,13 @@ func (s *server) fileDownloadHandler(w http.ResponseWriter, r *http.Request) {
// 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
)
{
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
L
ogger
)
logger
:=
tracing
.
NewLoggerWithTraceID
(
r
.
Context
(),
s
.
l
ogger
)
targets
:=
r
.
URL
.
Query
()
.
Get
(
"targets"
)
if
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
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
logger
.
Debugf
(
"api download: not found %s: %v"
,
reference
,
err
)
...
...
pkg/api/pin_bytes.go
View file @
5e1a341d
...
...
@@ -19,25 +19,25 @@ import (
func
(
s
*
server
)
pinBytes
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bytes: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin bytes: parse address: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin bytes: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bytes: store"
)
s
.
l
ogger
.
Debugf
(
"pin bytes: localstore has: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin bytes: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
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
{
s
.
L
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: netstore"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: netstore"
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
...
...
@@ -48,17 +48,17 @@ func (s *server) pinBytes(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseBytesAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseBytesAddresses
(
ctx
,
addr
,
chunkAddressFn
)
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
)
{
s
.
L
ogger
.
Error
(
"pin bytes: invalid type"
)
s
.
l
ogger
.
Error
(
"pin bytes: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
}
s
.
L
ogger
.
Error
(
"pin bytes: cannot pin"
)
s
.
l
ogger
.
Error
(
"pin bytes: cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
return
}
...
...
@@ -70,16 +70,16 @@ func (s *server) pinBytes(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
unpinBytes
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bytes: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin bytes: parse address: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin bytes: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bytes: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bytes: store"
)
s
.
l
ogger
.
Debugf
(
"pin bytes: localstore has: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin bytes: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -93,17 +93,17 @@ func (s *server) unpinBytes(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseBytesAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseBytesAddresses
(
ctx
,
addr
,
chunkAddressFn
)
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
)
{
s
.
L
ogger
.
Error
(
"pin bytes: invalid type"
)
s
.
l
ogger
.
Error
(
"pin bytes: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
}
s
.
L
ogger
.
Error
(
"pin bytes: cannot unpin"
)
s
.
l
ogger
.
Error
(
"pin bytes: cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
return
}
...
...
pkg/api/pin_bzz.go
View file @
5e1a341d
...
...
@@ -19,25 +19,25 @@ import (
func
(
s
*
server
)
pinBzz
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bzz: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin bzz: parse address: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin bzz: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bzz: store"
)
s
.
l
ogger
.
Debugf
(
"pin bzz: localstore has: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin bzz: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
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
{
s
.
L
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: netstore"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: netstore"
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
...
...
@@ -48,17 +48,17 @@ func (s *server) pinBzz(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseManifestAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseManifestAddresses
(
ctx
,
addr
,
chunkAddressFn
)
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
)
{
s
.
L
ogger
.
Error
(
"pin bzz: invalid type"
)
s
.
l
ogger
.
Error
(
"pin bzz: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
}
s
.
L
ogger
.
Error
(
"pin bzz: cannot pin"
)
s
.
l
ogger
.
Error
(
"pin bzz: cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
return
}
...
...
@@ -70,16 +70,16 @@ func (s *server) pinBzz(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
unpinBzz
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bzz: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin bzz: parse address: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin bzz: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin bzz: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin bzz: store"
)
s
.
l
ogger
.
Debugf
(
"pin bzz: localstore has: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin bzz: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -93,17 +93,17 @@ func (s *server) unpinBzz(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseManifestAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseManifestAddresses
(
ctx
,
addr
,
chunkAddressFn
)
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
)
{
s
.
L
ogger
.
Error
(
"pin bzz: invalid type"
)
s
.
l
ogger
.
Error
(
"pin bzz: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
}
s
.
L
ogger
.
Error
(
"pin bzz: cannot unpin"
)
s
.
l
ogger
.
Error
(
"pin bzz: cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
return
}
...
...
pkg/api/pin_chunks.go
View file @
5e1a341d
...
...
@@ -26,35 +26,35 @@ import (
func
(
s
*
server
)
pinChunk
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: parse chunk address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: parse chunk address: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
err
=
s
.
S
torer
.
Set
(
r
.
Context
(),
storage
.
ModeSetPin
,
addr
)
err
=
s
.
s
torer
.
Set
(
r
.
Context
(),
storage
.
ModeSetPin
,
addr
)
if
err
!=
nil
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
ch
,
err
:=
s
.
S
torer
.
Get
(
r
.
Context
(),
storage
.
ModeGetRequest
,
addr
)
ch
,
err
:=
s
.
s
torer
.
Get
(
r
.
Context
(),
storage
.
ModeGetRequest
,
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: netstore"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: netstore"
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
}
_
,
err
=
s
.
S
torer
.
Put
(
r
.
Context
(),
storage
.
ModePutRequestPin
,
ch
)
_
,
err
=
s
.
s
torer
.
Put
(
r
.
Context
(),
storage
.
ModePutRequestPin
,
ch
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: storer put pin: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: storer put pin"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: storer put pin: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: storer put pin"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
}
else
{
s
.
L
ogger
.
Debugf
(
"pin chunk: pinning error: %v, addr %s"
,
err
,
addr
)
s
.
L
ogger
.
Error
(
"pin chunk: cannot pin chunk"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: pinning error: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Error
(
"pin chunk: cannot pin chunk"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin chunk"
)
return
...
...
@@ -69,16 +69,16 @@ func (s *server) pinChunk(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
unpinChunk
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: parse chunk address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: parse chunk address: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: store"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: localstore has: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -88,18 +88,18 @@ func (s *server) unpinChunk(w http.ResponseWriter, r *http.Request) {
return
}
_
,
err
=
s
.
S
torer
.
PinCounter
(
addr
)
_
,
err
=
s
.
s
torer
.
PinCounter
(
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: not pinned: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: pin counter"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: not pinned: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: pin counter"
)
jsonhttp
.
BadRequest
(
w
,
"chunk is not yet pinned"
)
return
}
err
=
s
.
S
torer
.
Set
(
r
.
Context
(),
storage
.
ModeSetUnpin
,
addr
)
err
=
s
.
s
torer
.
Set
(
r
.
Context
(),
storage
.
ModeSetUnpin
,
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin chunk: unpinning error: %v, addr %s"
,
err
,
addr
)
s
.
L
ogger
.
Error
(
"pin chunk: unpin"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: unpinning error: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Error
(
"pin chunk: unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin chunk"
)
return
}
...
...
@@ -125,24 +125,24 @@ func (s *server) listPinnedChunks(w http.ResponseWriter, r *http.Request) {
if
v
:=
r
.
URL
.
Query
()
.
Get
(
"offset"
);
v
!=
""
{
offset
,
err
=
strconv
.
Atoi
(
v
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"list pins: parse offset: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list pins: bad offset"
)
s
.
l
ogger
.
Debugf
(
"list pins: parse offset: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"list pins: bad offset"
)
jsonhttp
.
BadRequest
(
w
,
"bad offset"
)
}
}
if
v
:=
r
.
URL
.
Query
()
.
Get
(
"limit"
);
v
!=
""
{
limit
,
err
=
strconv
.
Atoi
(
v
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"list pins: parse limit: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list pins: bad limit"
)
s
.
l
ogger
.
Debugf
(
"list pins: parse limit: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"list pins: bad limit"
)
jsonhttp
.
BadRequest
(
w
,
"bad limit"
)
}
}
pinnedChunks
,
err
:=
s
.
S
torer
.
PinnedChunks
(
r
.
Context
(),
offset
,
limit
)
pinnedChunks
,
err
:=
s
.
s
torer
.
PinnedChunks
(
r
.
Context
(),
offset
,
limit
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"list pins: list pinned: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list pins: list pinned"
)
s
.
l
ogger
.
Debugf
(
"list pins: list pinned: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"list pins: list pinned"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -160,16 +160,16 @@ func (s *server) listPinnedChunks(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
getPinnedChunk
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin counter: parse chunk ddress: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"pin counter: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin counter: parse chunk ddress: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"pin counter: parse address"
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin counter: localstore has: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"pin counter: store"
)
s
.
l
ogger
.
Debugf
(
"pin counter: localstore has: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"pin counter: store"
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
}
...
...
@@ -179,14 +179,14 @@ func (s *server) getPinnedChunk(w http.ResponseWriter, r *http.Request) {
return
}
pinCounter
,
err
:=
s
.
S
torer
.
PinCounter
(
addr
)
pinCounter
,
err
:=
s
.
s
torer
.
PinCounter
(
addr
)
if
err
!=
nil
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
jsonhttp
.
NotFound
(
w
,
nil
)
return
}
s
.
L
ogger
.
Debugf
(
"pin counter: get pin counter: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"pin counter: get pin counter"
)
s
.
l
ogger
.
Debugf
(
"pin counter: get pin counter: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"pin counter: get pin counter"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -204,16 +204,16 @@ type updatePinCounter struct {
func
(
s
*
server
)
updatePinnedChunkPinCounter
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"update pin counter: parse chunk ddress: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"update pin counter: parse address"
)
s
.
l
ogger
.
Debugf
(
"update pin counter: parse chunk ddress: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"update pin counter: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"update pin counter: localstore has: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"update pin counter: store"
)
s
.
l
ogger
.
Debugf
(
"update pin counter: localstore has: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"update pin counter: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -223,14 +223,14 @@ func (s *server) updatePinnedChunkPinCounter(w http.ResponseWriter, r *http.Requ
return
}
pinCounter
,
err
:=
s
.
S
torer
.
PinCounter
(
addr
)
pinCounter
,
err
:=
s
.
s
torer
.
PinCounter
(
addr
)
if
err
!=
nil
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
jsonhttp
.
NotFound
(
w
,
nil
)
return
}
s
.
L
ogger
.
Debugf
(
"pin counter: get pin counter: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"pin counter: get pin counter"
)
s
.
l
ogger
.
Debugf
(
"pin counter: get pin counter: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"pin counter: get pin counter"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -240,8 +240,8 @@ func (s *server) updatePinnedChunkPinCounter(w http.ResponseWriter, r *http.Requ
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
}
s
.
L
ogger
.
Debugf
(
"update pin counter: read request body error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"update pin counter: read request body error"
)
s
.
l
ogger
.
Debugf
(
"update pin counter: read request body error: %v"
,
err
)
s
.
l
ogger
.
Error
(
"update pin counter: read request body error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read request"
)
return
}
...
...
@@ -250,15 +250,15 @@ func (s *server) updatePinnedChunkPinCounter(w http.ResponseWriter, r *http.Requ
if
len
(
body
)
>
0
{
err
=
json
.
Unmarshal
(
body
,
&
newPinCount
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"update pin counter: unmarshal pin counter error: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"update pin counter: unmarshal pin counter error"
)
s
.
l
ogger
.
Debugf
(
"update pin counter: unmarshal pin counter error: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"update pin counter: unmarshal pin counter error"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling pin counter"
)
return
}
}
if
newPinCount
.
PinCounter
>
math
.
MaxInt32
{
s
.
L
ogger
.
Errorf
(
"update pin counter: invalid pin counter %d"
,
newPinCount
.
PinCounter
)
s
.
l
ogger
.
Errorf
(
"update pin counter: invalid pin counter %d"
,
newPinCount
.
PinCounter
)
jsonhttp
.
BadRequest
(
w
,
"invalid pin counter"
)
return
}
...
...
@@ -267,19 +267,19 @@ func (s *server) updatePinnedChunkPinCounter(w http.ResponseWriter, r *http.Requ
err
=
s
.
updatePinCount
(
r
.
Context
(),
addr
,
int
(
diff
))
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"update pin counter: update error: %v, addr %s"
,
err
,
addr
)
s
.
L
ogger
.
Error
(
"update pin counter: update"
)
s
.
l
ogger
.
Debugf
(
"update pin counter: update error: %v, addr %s"
,
err
,
addr
)
s
.
l
ogger
.
Error
(
"update pin counter: update"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
pinCounter
,
err
=
s
.
S
torer
.
PinCounter
(
addr
)
pinCounter
,
err
=
s
.
s
torer
.
PinCounter
(
addr
)
if
err
!=
nil
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
pinCounter
=
0
}
else
{
s
.
L
ogger
.
Debugf
(
"update pin counter: get pin counter: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"update pin counter: get pin counter"
)
s
.
l
ogger
.
Debugf
(
"update pin counter: get pin counter: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"update pin counter: get pin counter"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -310,7 +310,7 @@ func (s *server) updatePinCount(ctx context.Context, reference swarm.Address, de
default
:
}
err
:=
s
.
S
torer
.
Set
(
ctx
,
mode
,
reference
)
err
:=
s
.
s
torer
.
Set
(
ctx
,
mode
,
reference
)
if
err
!=
nil
{
return
err
}
...
...
@@ -323,26 +323,26 @@ func (s *server) pinChunkAddressFn(ctx context.Context, reference swarm.Address)
return
func
(
address
swarm
.
Address
)
error
{
// NOTE: stop pinning on first error
err
:=
s
.
S
torer
.
Set
(
ctx
,
storage
.
ModeSetPin
,
address
)
err
:=
s
.
s
torer
.
Set
(
ctx
,
storage
.
ModeSetPin
,
address
)
if
err
!=
nil
{
if
errors
.
Is
(
err
,
storage
.
ErrNotFound
)
{
// chunk not found locally, try to get from netstore
ch
,
err
:=
s
.
S
torer
.
Get
(
ctx
,
storage
.
ModeGetRequest
,
address
)
ch
,
err
:=
s
.
s
torer
.
Get
(
ctx
,
storage
.
ModeGetRequest
,
address
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin traversal: storer get: for reference %s, address %s: %w"
,
reference
,
address
,
err
)
s
.
l
ogger
.
Debugf
(
"pin traversal: storer get: for reference %s, address %s: %w"
,
reference
,
address
,
err
)
return
err
}
_
,
err
=
s
.
S
torer
.
Put
(
ctx
,
storage
.
ModePutRequestPin
,
ch
)
_
,
err
=
s
.
s
torer
.
Put
(
ctx
,
storage
.
ModePutRequestPin
,
ch
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin traversal: storer put pin: for reference %s, address %s: %w"
,
reference
,
address
,
err
)
s
.
l
ogger
.
Debugf
(
"pin traversal: storer put pin: for reference %s, address %s: %w"
,
reference
,
address
,
err
)
return
err
}
return
nil
}
s
.
L
ogger
.
Debugf
(
"pin traversal: storer set pin: for reference %s, address %s: %w"
,
reference
,
address
,
err
)
s
.
l
ogger
.
Debugf
(
"pin traversal: storer set pin: for reference %s, address %s: %w"
,
reference
,
address
,
err
)
return
err
}
...
...
@@ -352,14 +352,14 @@ func (s *server) pinChunkAddressFn(ctx context.Context, reference swarm.Address)
func
(
s
*
server
)
unpinChunkAddressFn
(
ctx
context
.
Context
,
reference
swarm
.
Address
)
func
(
address
swarm
.
Address
)
error
{
return
func
(
address
swarm
.
Address
)
error
{
_
,
err
:=
s
.
S
torer
.
PinCounter
(
address
)
_
,
err
:=
s
.
s
torer
.
PinCounter
(
address
)
if
err
!=
nil
{
return
err
}
err
=
s
.
S
torer
.
Set
(
ctx
,
storage
.
ModeSetUnpin
,
address
)
err
=
s
.
s
torer
.
Set
(
ctx
,
storage
.
ModeSetUnpin
,
address
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"unpin traversal: for reference %s, address %s: %w"
,
reference
,
address
,
err
)
s
.
l
ogger
.
Debugf
(
"unpin traversal: for reference %s, address %s: %w"
,
reference
,
address
,
err
)
// continue un-pinning all chunks
}
...
...
pkg/api/pin_files.go
View file @
5e1a341d
...
...
@@ -19,25 +19,25 @@ import (
func
(
s
*
server
)
pinFile
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin files: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin files: parse address: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin files: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin files: store"
)
s
.
l
ogger
.
Debugf
(
"pin files: localstore has: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin files: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
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
{
s
.
L
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin chunk: netstore"
)
s
.
l
ogger
.
Debugf
(
"pin chunk: netstore get: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin chunk: netstore"
)
jsonhttp
.
NotFound
(
w
,
nil
)
return
...
...
@@ -48,17 +48,17 @@ func (s *server) pinFile(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
pinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseFileAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseFileAddresses
(
ctx
,
addr
,
chunkAddressFn
)
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
)
{
s
.
L
ogger
.
Error
(
"pin files: invalid type"
)
s
.
l
ogger
.
Error
(
"pin files: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
}
s
.
L
ogger
.
Error
(
"pin files: cannot pin"
)
s
.
l
ogger
.
Error
(
"pin files: cannot pin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot pin"
)
return
}
...
...
@@ -70,16 +70,16 @@ func (s *server) pinFile(w http.ResponseWriter, r *http.Request) {
func
(
s
*
server
)
unpinFile
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
swarm
.
ParseHexAddress
(
mux
.
Vars
(
r
)[
"address"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: parse address: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin files: parse address"
)
s
.
l
ogger
.
Debugf
(
"pin files: parse address: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin files: parse address"
)
jsonhttp
.
BadRequest
(
w
,
"bad address"
)
return
}
has
,
err
:=
s
.
S
torer
.
Has
(
r
.
Context
(),
addr
)
has
,
err
:=
s
.
s
torer
.
Has
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pin files: localstore has: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pin files: store"
)
s
.
l
ogger
.
Debugf
(
"pin files: localstore has: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pin files: store"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
}
...
...
@@ -93,17 +93,17 @@ func (s *server) unpinFile(w http.ResponseWriter, r *http.Request) {
chunkAddressFn
:=
s
.
unpinChunkAddressFn
(
ctx
,
addr
)
err
=
s
.
T
raversal
.
TraverseFileAddresses
(
ctx
,
addr
,
chunkAddressFn
)
err
=
s
.
t
raversal
.
TraverseFileAddresses
(
ctx
,
addr
,
chunkAddressFn
)
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
)
{
s
.
L
ogger
.
Error
(
"pin files: invalid type"
)
s
.
l
ogger
.
Error
(
"pin files: invalid type"
)
jsonhttp
.
BadRequest
(
w
,
"invalid type"
)
return
}
s
.
L
ogger
.
Error
(
"pin files: cannot unpin"
)
s
.
l
ogger
.
Error
(
"pin files: cannot unpin"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot unpin"
)
return
}
...
...
pkg/api/pss.go
View file @
5e1a341d
...
...
@@ -37,8 +37,8 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
for
_
,
v
:=
range
tgts
{
target
,
err
:=
hex
.
DecodeString
(
v
)
if
err
!=
nil
||
len
(
target
)
>
targetMaxLength
{
s
.
L
ogger
.
Debugf
(
"pss send: bad targets: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pss send: bad targets"
)
s
.
l
ogger
.
Debugf
(
"pss send: bad targets: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pss send: bad targets"
)
jsonhttp
.
BadRequest
(
w
,
nil
)
return
}
...
...
@@ -55,8 +55,8 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
var
err
error
recipient
,
err
=
pss
.
ParseRecipient
(
recipientQueryString
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss recipient: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pss recipient"
)
s
.
l
ogger
.
Debugf
(
"pss recipient: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pss recipient"
)
jsonhttp
.
BadRequest
(
w
,
nil
)
return
}
...
...
@@ -64,16 +64,16 @@ func (s *server) pssPostHandler(w http.ResponseWriter, r *http.Request) {
payload
,
err
:=
ioutil
.
ReadAll
(
r
.
Body
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss read payload: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pss read payload"
)
s
.
l
ogger
.
Debugf
(
"pss read payload: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pss read payload"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
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
{
s
.
L
ogger
.
Debugf
(
"pss send payload: %v. topic: %s"
,
err
,
topicVar
)
s
.
L
ogger
.
Error
(
"pss send payload"
)
s
.
l
ogger
.
Debugf
(
"pss send payload: %v. topic: %s"
,
err
,
topicVar
)
s
.
l
ogger
.
Error
(
"pss send payload"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
}
...
...
@@ -91,8 +91,8 @@ func (s *server) pssWsHandler(w http.ResponseWriter, r *http.Request) {
conn
,
err
:=
upgrader
.
Upgrade
(
w
,
r
,
nil
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss ws: upgrade: %v"
,
err
)
s
.
L
ogger
.
Error
(
"pss ws: cannot upgrade"
)
s
.
l
ogger
.
Debugf
(
"pss ws: upgrade: %v"
,
err
)
s
.
l
ogger
.
Error
(
"pss ws: cannot upgrade"
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
}
...
...
@@ -116,14 +116,14 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
ticker
.
Stop
()
_
=
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
})
defer
cleanup
()
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
)
return
nil
})
...
...
@@ -133,13 +133,13 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
case
b
:=
<-
dataC
:
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
return
}
err
=
conn
.
WriteMessage
(
websocket
.
BinaryMessage
,
b
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss write to websocket: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss write to websocket: %v"
,
err
)
return
}
...
...
@@ -147,12 +147,12 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
// shutdown
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
return
}
err
=
conn
.
WriteMessage
(
websocket
.
CloseMessage
,
[]
byte
{})
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss write close message: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss write close message: %v"
,
err
)
}
return
case
<-
gone
:
...
...
@@ -161,7 +161,7 @@ func (s *server) pumpWs(conn *websocket.Conn, t string) {
case
<-
ticker
.
C
:
err
=
conn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeDeadline
))
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"pss set write deadline: %v"
,
err
)
return
}
if
err
=
conn
.
WriteMessage
(
websocket
.
PingMessage
,
nil
);
err
!=
nil
{
...
...
pkg/api/router.go
View file @
5e1a341d
...
...
@@ -190,7 +190,7 @@ func (s *server) setupRouting() {
)
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
,
// todo: add recovery handler
s
.
pageviewMetricsHandler
,
...
...
@@ -214,7 +214,7 @@ func (s *server) setupRouting() {
func
(
s
*
server
)
gatewayModeForbidEndpointHandler
(
h
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
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
)
return
}
...
...
@@ -226,12 +226,12 @@ func (s *server) gatewayModeForbidHeadersHandler(h http.Handler) http.Handler {
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
if
s
.
GatewayMode
{
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"
)
return
}
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"
)
return
}
...
...
pkg/api/soc.go
View file @
5e1a341d
...
...
@@ -28,31 +28,31 @@ type socPostResponse struct {
func
(
s
*
server
)
socUploadHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
owner
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"owner"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: bad owner: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
s
.
l
ogger
.
Debugf
(
"soc upload: bad owner: %v"
,
err
)
s
.
l
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
jsonhttp
.
BadRequest
(
w
,
"bad owner"
)
return
}
id
,
err
:=
hex
.
DecodeString
(
mux
.
Vars
(
r
)[
"id"
])
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: bad id: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
s
.
l
ogger
.
Debugf
(
"soc upload: bad id: %v"
,
err
)
s
.
l
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
jsonhttp
.
BadRequest
(
w
,
"bad id"
)
return
}
sigStr
:=
r
.
URL
.
Query
()
.
Get
(
"sig"
)
if
sigStr
==
""
{
s
.
L
ogger
.
Debugf
(
"soc upload: empty signature"
)
s
.
L
ogger
.
Error
(
"soc upload: empty signature"
)
s
.
l
ogger
.
Debugf
(
"soc upload: empty signature"
)
s
.
l
ogger
.
Error
(
"soc upload: empty signature"
)
jsonhttp
.
BadRequest
(
w
,
"empty signature"
)
return
}
sig
,
err
:=
hex
.
DecodeString
(
sigStr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: bad signature: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: bad signature"
)
s
.
l
ogger
.
Debugf
(
"soc upload: bad signature: %v"
,
err
)
s
.
l
ogger
.
Error
(
"soc upload: bad signature"
)
jsonhttp
.
BadRequest
(
w
,
"bad signature"
)
return
}
...
...
@@ -62,55 +62,55 @@ func (s *server) socUploadHandler(w http.ResponseWriter, r *http.Request) {
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
}
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
.
Debugf
(
"soc upload: read chunk data error: %v"
,
err
)
s
.
l
ogger
.
Error
(
"soc upload: read chunk data error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
return
}
if
len
(
data
)
<
swarm
.
SpanSize
{
s
.
L
ogger
.
Debugf
(
"soc upload: chunk data too short"
)
s
.
L
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
s
.
l
ogger
.
Debugf
(
"soc upload: chunk data too short"
)
s
.
l
ogger
.
Error
(
"soc upload: %v"
,
errBadRequestParams
)
jsonhttp
.
BadRequest
(
w
,
"short chunk data"
)
return
}
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
.
Error
(
"soc upload: chunk data error"
)
s
.
l
ogger
.
Debugf
(
"soc upload: chunk data exceeds %d bytes"
,
swarm
.
ChunkSize
+
swarm
.
SpanSize
)
s
.
l
ogger
.
Error
(
"soc upload: chunk data error"
)
jsonhttp
.
RequestEntityTooLarge
(
w
,
"payload too large"
)
return
}
ch
,
err
:=
chunk
(
data
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: create content addressed chunk: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: chunk data error"
)
s
.
l
ogger
.
Debugf
(
"soc upload: create content addressed chunk: %v"
,
err
)
s
.
l
ogger
.
Error
(
"soc upload: chunk data error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk data error"
)
return
}
chunk
,
err
:=
soc
.
NewSignedChunk
(
id
,
ch
,
owner
,
sig
)
if
err
!=
nil
{
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
.
Debugf
(
"soc upload: read chunk data error: %v"
,
err
)
s
.
l
ogger
.
Error
(
"soc upload: read chunk data error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read chunk data"
)
return
}
if
!
soc
.
Valid
(
chunk
)
{
s
.
L
ogger
.
Debugf
(
"soc upload: invalid chunk: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: invalid chunk"
)
s
.
l
ogger
.
Debugf
(
"soc upload: invalid chunk: %v"
,
err
)
s
.
l
ogger
.
Error
(
"soc upload: invalid chunk"
)
jsonhttp
.
Unauthorized
(
w
,
"invalid chunk"
)
return
}
ctx
:=
r
.
Context
()
_
,
err
=
s
.
S
torer
.
Put
(
ctx
,
requestModePut
(
r
),
chunk
)
_
,
err
=
s
.
s
torer
.
Put
(
ctx
,
requestModePut
(
r
),
chunk
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"soc upload: chunk write error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"soc upload: chunk write error"
)
s
.
l
ogger
.
Debugf
(
"soc upload: chunk write error: %v"
,
err
)
s
.
l
ogger
.
Error
(
"soc upload: chunk write error"
)
jsonhttp
.
BadRequest
(
w
,
"chunk write error"
)
return
}
...
...
pkg/api/tag.go
View file @
5e1a341d
...
...
@@ -50,8 +50,8 @@ func (s *server) createTagHandler(w http.ResponseWriter, r *http.Request) {
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
}
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
.
Debugf
(
"create tag: read request body error: %v"
,
err
)
s
.
l
ogger
.
Error
(
"create tag: read request body error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read request"
)
return
}
...
...
@@ -60,17 +60,17 @@ func (s *server) createTagHandler(w http.ResponseWriter, r *http.Request) {
if
len
(
body
)
>
0
{
err
=
json
.
Unmarshal
(
body
,
&
tagr
)
if
err
!=
nil
{
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
.
Debugf
(
"create tag: unmarshal tag name error: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"create tag: unmarshal tag name error"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
return
}
}
tag
,
err
:=
s
.
T
ags
.
Create
(
0
)
tag
,
err
:=
s
.
t
ags
.
Create
(
0
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"create tag: tag create error: %v"
,
err
)
s
.
L
ogger
.
Error
(
"create tag: tag create error"
)
s
.
l
ogger
.
Debugf
(
"create tag: tag create error: %v"
,
err
)
s
.
l
ogger
.
Error
(
"create tag: tag create error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot create tag"
)
return
}
...
...
@@ -83,22 +83,22 @@ func (s *server) getTagHandler(w http.ResponseWriter, r *http.Request) {
id
,
err
:=
strconv
.
Atoi
(
idStr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"get tag: parse id %s: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Error
(
"get tag: parse id"
)
s
.
l
ogger
.
Debugf
(
"get tag: parse id %s: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Error
(
"get tag: parse id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
return
}
tag
,
err
:=
s
.
T
ags
.
Get
(
uint32
(
id
))
tag
,
err
:=
s
.
t
ags
.
Get
(
uint32
(
id
))
if
err
!=
nil
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
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
.
Debugf
(
"get tag: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
l
ogger
.
Error
(
"get tag: tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
return
}
s
.
L
ogger
.
Debugf
(
"get tag: tag %v: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Errorf
(
"get tag: %v"
,
idStr
)
s
.
l
ogger
.
Debugf
(
"get tag: tag %v: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Errorf
(
"get tag: %v"
,
idStr
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
return
}
...
...
@@ -112,27 +112,27 @@ func (s *server) deleteTagHandler(w http.ResponseWriter, r *http.Request) {
id
,
err
:=
strconv
.
Atoi
(
idStr
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"delete tag: parse id %s: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Error
(
"delete tag: parse id"
)
s
.
l
ogger
.
Debugf
(
"delete tag: parse id %s: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Error
(
"delete tag: parse id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
return
}
tag
,
err
:=
s
.
T
ags
.
Get
(
uint32
(
id
))
tag
,
err
:=
s
.
t
ags
.
Get
(
uint32
(
id
))
if
err
!=
nil
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
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
.
Debugf
(
"delete tag: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
l
ogger
.
Error
(
"delete tag: tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
return
}
s
.
L
ogger
.
Debugf
(
"delete tag: tag %v: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Errorf
(
"delete tag: %v"
,
idStr
)
s
.
l
ogger
.
Debugf
(
"delete tag: tag %v: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Errorf
(
"delete tag: %v"
,
idStr
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
return
}
s
.
T
ags
.
Delete
(
tag
.
Uid
)
s
.
t
ags
.
Delete
(
tag
.
Uid
)
jsonhttp
.
NoContent
(
w
)
}
...
...
@@ -141,8 +141,8 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
id
,
err
:=
strconv
.
Atoi
(
idStr
)
if
err
!=
nil
{
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
.
Debugf
(
"done split tag: parse id %s: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Error
(
"done split tag: parse id"
)
jsonhttp
.
BadRequest
(
w
,
"invalid id"
)
return
}
...
...
@@ -152,8 +152,8 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
if
jsonhttp
.
HandleBodyReadError
(
err
,
w
)
{
return
}
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
.
Debugf
(
"done split tag: read request body error: %v"
,
err
)
s
.
l
ogger
.
Error
(
"done split tag: read request body error"
)
jsonhttp
.
InternalServerError
(
w
,
"cannot read request"
)
return
}
...
...
@@ -162,31 +162,31 @@ func (s *server) doneSplitHandler(w http.ResponseWriter, r *http.Request) {
if
len
(
body
)
>
0
{
err
=
json
.
Unmarshal
(
body
,
&
tagr
)
if
err
!=
nil
{
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
.
Debugf
(
"done split tag: unmarshal tag name error: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"done split tag: unmarshal tag name error"
)
jsonhttp
.
InternalServerError
(
w
,
"error unmarshaling metadata"
)
return
}
}
tag
,
err
:=
s
.
T
ags
.
Get
(
uint32
(
id
))
tag
,
err
:=
s
.
t
ags
.
Get
(
uint32
(
id
))
if
err
!=
nil
{
if
errors
.
Is
(
err
,
tags
.
ErrNotFound
)
{
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
.
Debugf
(
"done split: tag not present: %v, id %s"
,
err
,
idStr
)
s
.
l
ogger
.
Error
(
"done split: tag not present"
)
jsonhttp
.
NotFound
(
w
,
"tag not present"
)
return
}
s
.
L
ogger
.
Debugf
(
"done split: tag %v: %v"
,
idStr
,
err
)
s
.
L
ogger
.
Errorf
(
"done split: %v"
,
idStr
)
s
.
l
ogger
.
Debugf
(
"done split: tag %v: %v"
,
idStr
,
err
)
s
.
l
ogger
.
Errorf
(
"done split: %v"
,
idStr
)
jsonhttp
.
InternalServerError
(
w
,
"cannot get tag"
)
return
}
_
,
err
=
tag
.
DoneSplit
(
tagr
.
Address
)
if
err
!=
nil
{
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
.
Debugf
(
"done split: failed for address %v"
,
tagr
.
Address
)
s
.
l
ogger
.
Errorf
(
"done split: failed for address %v"
,
tagr
.
Address
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
}
...
...
@@ -202,24 +202,24 @@ func (s *server) listTagsHandler(w http.ResponseWriter, r *http.Request) {
if
v
:=
r
.
URL
.
Query
()
.
Get
(
"offset"
);
v
!=
""
{
offset
,
err
=
strconv
.
Atoi
(
v
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"list tags: parse offset: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list tags: bad offset"
)
s
.
l
ogger
.
Debugf
(
"list tags: parse offset: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"list tags: bad offset"
)
jsonhttp
.
BadRequest
(
w
,
"bad offset"
)
}
}
if
v
:=
r
.
URL
.
Query
()
.
Get
(
"limit"
);
v
!=
""
{
limit
,
err
=
strconv
.
Atoi
(
v
)
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"list tags: parse limit: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list tags: bad limit"
)
s
.
l
ogger
.
Debugf
(
"list tags: parse limit: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"list tags: 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
{
s
.
L
ogger
.
Debugf
(
"list tags: listing: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"list tags: listing"
)
s
.
l
ogger
.
Debugf
(
"list tags: listing: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"list tags: listing"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
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