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
e043c29e
Unverified
Commit
e043c29e
authored
Mar 04, 2021
by
Janoš Guljaš
Committed by
GitHub
Mar 04, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
debug api as a concrete service (#1370)
parent
7da9e56e
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
377 additions
and
272 deletions
+377
-272
balances.go
pkg/debugapi/balances.go
+20
-20
chequebook.go
pkg/debugapi/chequebook.go
+57
-57
chunk.go
pkg/debugapi/chunk.go
+10
-10
cors.go
pkg/debugapi/cors.go
+68
-0
cors_test.go
pkg/debugapi/cors_test.go
+96
-0
debugapi.go
pkg/debugapi/debugapi.go
+41
-90
debugapi_test.go
pkg/debugapi/debugapi_test.go
+16
-15
metrics.go
pkg/debugapi/metrics.go
+1
-1
p2p.go
pkg/debugapi/p2p.go
+8
-8
peer.go
pkg/debugapi/peer.go
+15
-15
pingpong.go
pkg/debugapi/pingpong.go
+3
-3
router.go
pkg/debugapi/router.go
+6
-17
settlements.go
pkg/debugapi/settlements.go
+16
-16
tag.go
pkg/debugapi/tag.go
+8
-8
topology.go
pkg/debugapi/topology.go
+4
-4
welcome_message.go
pkg/debugapi/welcome_message.go
+7
-7
node.go
pkg/node/node.go
+1
-1
No files found.
pkg/debugapi/balances.go
View file @
e043c29e
...
@@ -31,12 +31,12 @@ type balancesResponse struct {
...
@@ -31,12 +31,12 @@ type balancesResponse struct {
Balances
[]
balanceResponse
`json:"balances"`
Balances
[]
balanceResponse
`json:"balances"`
}
}
func
(
s
*
server
)
balancesHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
balancesHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
balances
,
err
:=
s
.
A
ccounting
.
Balances
()
balances
,
err
:=
s
.
a
ccounting
.
Balances
()
if
err
!=
nil
{
if
err
!=
nil
{
jsonhttp
.
InternalServerError
(
w
,
errCantBalances
)
jsonhttp
.
InternalServerError
(
w
,
errCantBalances
)
s
.
L
ogger
.
Debugf
(
"debug api: balances: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: balances: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: can not get balances"
)
s
.
l
ogger
.
Error
(
"debug api: can not get balances"
)
return
return
}
}
...
@@ -53,24 +53,24 @@ func (s *server) balancesHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -53,24 +53,24 @@ func (s *server) balancesHandler(w http.ResponseWriter, r *http.Request) {
jsonhttp
.
OK
(
w
,
balancesResponse
{
Balances
:
balResponses
})
jsonhttp
.
OK
(
w
,
balancesResponse
{
Balances
:
balResponses
})
}
}
func
(
s
*
server
)
peerBalanceHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
peerBalanceHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: balances peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: balances peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: balances peer: invalid peer address %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: balances peer: invalid peer address %s"
,
addr
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
return
return
}
}
balance
,
err
:=
s
.
A
ccounting
.
Balance
(
peer
)
balance
,
err
:=
s
.
a
ccounting
.
Balance
(
peer
)
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
accounting
.
ErrPeerNoBalance
)
{
if
errors
.
Is
(
err
,
accounting
.
ErrPeerNoBalance
)
{
jsonhttp
.
NotFound
(
w
,
errNoBalance
)
jsonhttp
.
NotFound
(
w
,
errNoBalance
)
return
return
}
}
s
.
L
ogger
.
Debugf
(
"debug api: balances peer: get peer %s balance: %v"
,
peer
.
String
(),
err
)
s
.
l
ogger
.
Debugf
(
"debug api: balances peer: get peer %s balance: %v"
,
peer
.
String
(),
err
)
s
.
L
ogger
.
Errorf
(
"debug api: balances peer: can't get peer %s balance"
,
peer
.
String
())
s
.
l
ogger
.
Errorf
(
"debug api: balances peer: can't get peer %s balance"
,
peer
.
String
())
jsonhttp
.
InternalServerError
(
w
,
errCantBalance
)
jsonhttp
.
InternalServerError
(
w
,
errCantBalance
)
return
return
}
}
...
@@ -81,12 +81,12 @@ func (s *server) peerBalanceHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -81,12 +81,12 @@ func (s *server) peerBalanceHandler(w http.ResponseWriter, r *http.Request) {
})
})
}
}
func
(
s
*
server
)
compensatedBalancesHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
compensatedBalancesHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
balances
,
err
:=
s
.
A
ccounting
.
CompensatedBalances
()
balances
,
err
:=
s
.
a
ccounting
.
CompensatedBalances
()
if
err
!=
nil
{
if
err
!=
nil
{
jsonhttp
.
InternalServerError
(
w
,
errCantBalances
)
jsonhttp
.
InternalServerError
(
w
,
errCantBalances
)
s
.
L
ogger
.
Debugf
(
"debug api: compensated balances: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: compensated balances: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: can not get compensated balances"
)
s
.
l
ogger
.
Error
(
"debug api: can not get compensated balances"
)
return
return
}
}
...
@@ -103,24 +103,24 @@ func (s *server) compensatedBalancesHandler(w http.ResponseWriter, r *http.Reque
...
@@ -103,24 +103,24 @@ func (s *server) compensatedBalancesHandler(w http.ResponseWriter, r *http.Reque
jsonhttp
.
OK
(
w
,
balancesResponse
{
Balances
:
balResponses
})
jsonhttp
.
OK
(
w
,
balancesResponse
{
Balances
:
balResponses
})
}
}
func
(
s
*
server
)
compensatedPeerBalanceHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
compensatedPeerBalanceHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: compensated balances peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: compensated balances peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: compensated balances peer: invalid peer address %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: compensated balances peer: invalid peer address %s"
,
addr
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
return
return
}
}
balance
,
err
:=
s
.
A
ccounting
.
CompensatedBalance
(
peer
)
balance
,
err
:=
s
.
a
ccounting
.
CompensatedBalance
(
peer
)
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
accounting
.
ErrPeerNoBalance
)
{
if
errors
.
Is
(
err
,
accounting
.
ErrPeerNoBalance
)
{
jsonhttp
.
NotFound
(
w
,
errNoBalance
)
jsonhttp
.
NotFound
(
w
,
errNoBalance
)
return
return
}
}
s
.
L
ogger
.
Debugf
(
"debug api: compensated balances peer: get peer %s balance: %v"
,
peer
.
String
(),
err
)
s
.
l
ogger
.
Debugf
(
"debug api: compensated balances peer: get peer %s balance: %v"
,
peer
.
String
(),
err
)
s
.
L
ogger
.
Errorf
(
"debug api: compensated balances peer: can't get peer %s balance"
,
peer
.
String
())
s
.
l
ogger
.
Errorf
(
"debug api: compensated balances peer: can't get peer %s balance"
,
peer
.
String
())
jsonhttp
.
InternalServerError
(
w
,
errCantBalance
)
jsonhttp
.
InternalServerError
(
w
,
errCantBalance
)
return
return
}
}
...
...
pkg/debugapi/chequebook.go
View file @
e043c29e
...
@@ -56,46 +56,46 @@ type chequebookLastChequesResponse struct {
...
@@ -56,46 +56,46 @@ type chequebookLastChequesResponse struct {
LastCheques
[]
chequebookLastChequesPeerResponse
`json:"lastcheques"`
LastCheques
[]
chequebookLastChequesPeerResponse
`json:"lastcheques"`
}
}
func
(
s
*
server
)
chequebookBalanceHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
chequebookBalanceHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
balance
,
err
:=
s
.
C
hequebook
.
Balance
(
r
.
Context
())
balance
,
err
:=
s
.
c
hequebook
.
Balance
(
r
.
Context
())
if
err
!=
nil
{
if
err
!=
nil
{
jsonhttp
.
InternalServerError
(
w
,
errChequebookBalance
)
jsonhttp
.
InternalServerError
(
w
,
errChequebookBalance
)
s
.
L
ogger
.
Debugf
(
"debug api: chequebook balance: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook balance: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: cannot get chequebook balance"
)
s
.
l
ogger
.
Error
(
"debug api: cannot get chequebook balance"
)
return
return
}
}
availableBalance
,
err
:=
s
.
C
hequebook
.
AvailableBalance
(
r
.
Context
())
availableBalance
,
err
:=
s
.
c
hequebook
.
AvailableBalance
(
r
.
Context
())
if
err
!=
nil
{
if
err
!=
nil
{
jsonhttp
.
InternalServerError
(
w
,
errChequebookBalance
)
jsonhttp
.
InternalServerError
(
w
,
errChequebookBalance
)
s
.
L
ogger
.
Debugf
(
"debug api: chequebook availableBalance: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook availableBalance: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: cannot get chequebook availableBalance"
)
s
.
l
ogger
.
Error
(
"debug api: cannot get chequebook availableBalance"
)
return
return
}
}
jsonhttp
.
OK
(
w
,
chequebookBalanceResponse
{
TotalBalance
:
balance
,
AvailableBalance
:
availableBalance
})
jsonhttp
.
OK
(
w
,
chequebookBalanceResponse
{
TotalBalance
:
balance
,
AvailableBalance
:
availableBalance
})
}
}
func
(
s
*
server
)
chequebookAddressHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
chequebookAddressHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
address
:=
s
.
C
hequebook
.
Address
()
address
:=
s
.
c
hequebook
.
Address
()
jsonhttp
.
OK
(
w
,
chequebookAddressResponse
{
Address
:
address
.
String
()})
jsonhttp
.
OK
(
w
,
chequebookAddressResponse
{
Address
:
address
.
String
()})
}
}
func
(
s
*
server
)
chequebookLastPeerHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
chequebookLastPeerHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: chequebook cheque peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook cheque peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: chequebook cheque peer: invalid peer address %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: chequebook cheque peer: invalid peer address %s"
,
addr
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
return
return
}
}
var
lastSentResponse
*
chequebookLastChequePeerResponse
var
lastSentResponse
*
chequebookLastChequePeerResponse
lastSent
,
err
:=
s
.
S
wap
.
LastSentCheque
(
peer
)
lastSent
,
err
:=
s
.
s
wap
.
LastSentCheque
(
peer
)
if
err
!=
nil
&&
err
!=
chequebook
.
ErrNoCheque
{
if
err
!=
nil
&&
err
!=
chequebook
.
ErrNoCheque
{
s
.
L
ogger
.
Debugf
(
"debug api: chequebook cheque peer: get peer %s last cheque: %v"
,
peer
.
String
(),
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook cheque peer: get peer %s last cheque: %v"
,
peer
.
String
(),
err
)
s
.
L
ogger
.
Errorf
(
"debug api: chequebook cheque peer: can't get peer %s last cheque"
,
peer
.
String
())
s
.
l
ogger
.
Errorf
(
"debug api: chequebook cheque peer: can't get peer %s last cheque"
,
peer
.
String
())
jsonhttp
.
InternalServerError
(
w
,
errCantLastChequePeer
)
jsonhttp
.
InternalServerError
(
w
,
errCantLastChequePeer
)
return
return
}
}
...
@@ -108,10 +108,10 @@ func (s *server) chequebookLastPeerHandler(w http.ResponseWriter, r *http.Reques
...
@@ -108,10 +108,10 @@ func (s *server) chequebookLastPeerHandler(w http.ResponseWriter, r *http.Reques
}
}
var
lastReceivedResponse
*
chequebookLastChequePeerResponse
var
lastReceivedResponse
*
chequebookLastChequePeerResponse
lastReceived
,
err
:=
s
.
S
wap
.
LastReceivedCheque
(
peer
)
lastReceived
,
err
:=
s
.
s
wap
.
LastReceivedCheque
(
peer
)
if
err
!=
nil
&&
err
!=
chequebook
.
ErrNoCheque
{
if
err
!=
nil
&&
err
!=
chequebook
.
ErrNoCheque
{
s
.
L
ogger
.
Debugf
(
"debug api: chequebook cheque peer: get peer %s last cheque: %v"
,
peer
.
String
(),
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook cheque peer: get peer %s last cheque: %v"
,
peer
.
String
(),
err
)
s
.
L
ogger
.
Errorf
(
"debug api: chequebook cheque peer: can't get peer %s last cheque"
,
peer
.
String
())
s
.
l
ogger
.
Errorf
(
"debug api: chequebook cheque peer: can't get peer %s last cheque"
,
peer
.
String
())
jsonhttp
.
InternalServerError
(
w
,
errCantLastChequePeer
)
jsonhttp
.
InternalServerError
(
w
,
errCantLastChequePeer
)
return
return
}
}
...
@@ -130,18 +130,18 @@ func (s *server) chequebookLastPeerHandler(w http.ResponseWriter, r *http.Reques
...
@@ -130,18 +130,18 @@ func (s *server) chequebookLastPeerHandler(w http.ResponseWriter, r *http.Reques
})
})
}
}
func
(
s
*
server
)
chequebookAllLastHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
chequebookAllLastHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
lastchequessent
,
err
:=
s
.
S
wap
.
LastSentCheques
()
lastchequessent
,
err
:=
s
.
s
wap
.
LastSentCheques
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: chequebook cheque all: get all last cheques: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook cheque all: get all last cheques: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: chequebook cheque all: can't get all last cheques"
)
s
.
l
ogger
.
Errorf
(
"debug api: chequebook cheque all: can't get all last cheques"
)
jsonhttp
.
InternalServerError
(
w
,
errCantLastCheque
)
jsonhttp
.
InternalServerError
(
w
,
errCantLastCheque
)
return
return
}
}
lastchequesreceived
,
err
:=
s
.
S
wap
.
LastReceivedCheques
()
lastchequesreceived
,
err
:=
s
.
s
wap
.
LastReceivedCheques
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: chequebook cheque all: get all last cheques: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook cheque all: get all last cheques: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: chequebook cheque all: can't get all last cheques"
)
s
.
l
ogger
.
Errorf
(
"debug api: chequebook cheque all: can't get all last cheques"
)
jsonhttp
.
InternalServerError
(
w
,
errCantLastCheque
)
jsonhttp
.
InternalServerError
(
w
,
errCantLastCheque
)
return
return
}
}
...
@@ -194,20 +194,20 @@ type swapCashoutResponse struct {
...
@@ -194,20 +194,20 @@ type swapCashoutResponse struct {
TransactionHash
string
`json:"transactionHash"`
TransactionHash
string
`json:"transactionHash"`
}
}
func
(
s
*
server
)
swapCashoutHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
swapCashoutHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: cashout peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: cashout peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: cashout peer: invalid peer address %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: cashout peer: invalid peer address %s"
,
addr
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
return
return
}
}
txHash
,
err
:=
s
.
S
wap
.
CashCheque
(
r
.
Context
(),
peer
)
txHash
,
err
:=
s
.
s
wap
.
CashCheque
(
r
.
Context
(),
peer
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: cashout peer: cannot cash %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: cashout peer: cannot cash %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: cashout peer: cannot cash %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: cashout peer: cannot cash %s"
,
addr
)
jsonhttp
.
InternalServerError
(
w
,
errCannotCash
)
jsonhttp
.
InternalServerError
(
w
,
errCannotCash
)
return
return
}
}
...
@@ -230,32 +230,32 @@ type swapCashoutStatusResponse struct {
...
@@ -230,32 +230,32 @@ type swapCashoutStatusResponse struct {
Result
*
swapCashoutStatusResult
`json:"result"`
Result
*
swapCashoutStatusResult
`json:"result"`
}
}
func
(
s
*
server
)
swapCashoutStatusHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
swapCashoutStatusHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: cashout status peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: cashout status peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: cashout status peer: invalid peer address %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: cashout status peer: invalid peer address %s"
,
addr
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
return
return
}
}
status
,
err
:=
s
.
S
wap
.
CashoutStatus
(
r
.
Context
(),
peer
)
status
,
err
:=
s
.
s
wap
.
CashoutStatus
(
r
.
Context
(),
peer
)
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
chequebook
.
ErrNoCheque
)
{
if
errors
.
Is
(
err
,
chequebook
.
ErrNoCheque
)
{
s
.
L
ogger
.
Debugf
(
"debug api: cashout status peer: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: cashout status peer: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: cashout status peer: %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: cashout status peer: %s"
,
addr
)
jsonhttp
.
NotFound
(
w
,
errNoCheque
)
jsonhttp
.
NotFound
(
w
,
errNoCheque
)
return
return
}
}
if
errors
.
Is
(
err
,
chequebook
.
ErrNoCashout
)
{
if
errors
.
Is
(
err
,
chequebook
.
ErrNoCashout
)
{
s
.
L
ogger
.
Debugf
(
"debug api: cashout status peer: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: cashout status peer: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: cashout status peer: %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: cashout status peer: %s"
,
addr
)
jsonhttp
.
NotFound
(
w
,
errNoCashout
)
jsonhttp
.
NotFound
(
w
,
errNoCashout
)
return
return
}
}
s
.
L
ogger
.
Debugf
(
"debug api: cashout status peer: cannot get status %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: cashout status peer: cannot get status %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: cashout status peer: cannot get status %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: cashout status peer: cannot get status %s"
,
addr
)
jsonhttp
.
InternalServerError
(
w
,
errCannotCashStatus
)
jsonhttp
.
InternalServerError
(
w
,
errCannotCashStatus
)
return
return
}
}
...
@@ -283,64 +283,64 @@ type chequebookTxResponse struct {
...
@@ -283,64 +283,64 @@ type chequebookTxResponse struct {
TransactionHash
common
.
Hash
`json:"transactionHash"`
TransactionHash
common
.
Hash
`json:"transactionHash"`
}
}
func
(
s
*
server
)
chequebookWithdrawHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
chequebookWithdrawHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
amountStr
:=
r
.
URL
.
Query
()
.
Get
(
"amount"
)
amountStr
:=
r
.
URL
.
Query
()
.
Get
(
"amount"
)
if
amountStr
==
""
{
if
amountStr
==
""
{
jsonhttp
.
BadRequest
(
w
,
errChequebookNoAmount
)
jsonhttp
.
BadRequest
(
w
,
errChequebookNoAmount
)
s
.
L
ogger
.
Error
(
"debug api: no withdraw amount"
)
s
.
l
ogger
.
Error
(
"debug api: no withdraw amount"
)
return
return
}
}
amount
,
ok
:=
big
.
NewInt
(
0
)
.
SetString
(
amountStr
,
10
)
amount
,
ok
:=
big
.
NewInt
(
0
)
.
SetString
(
amountStr
,
10
)
if
!
ok
{
if
!
ok
{
jsonhttp
.
BadRequest
(
w
,
errChequebookNoAmount
)
jsonhttp
.
BadRequest
(
w
,
errChequebookNoAmount
)
s
.
L
ogger
.
Error
(
"debug api: invalid withdraw amount"
)
s
.
l
ogger
.
Error
(
"debug api: invalid withdraw amount"
)
return
return
}
}
txHash
,
err
:=
s
.
C
hequebook
.
Withdraw
(
r
.
Context
(),
amount
)
txHash
,
err
:=
s
.
c
hequebook
.
Withdraw
(
r
.
Context
(),
amount
)
if
errors
.
Is
(
err
,
chequebook
.
ErrInsufficientFunds
)
{
if
errors
.
Is
(
err
,
chequebook
.
ErrInsufficientFunds
)
{
jsonhttp
.
BadRequest
(
w
,
errChequebookInsufficientFunds
)
jsonhttp
.
BadRequest
(
w
,
errChequebookInsufficientFunds
)
s
.
L
ogger
.
Debugf
(
"debug api: chequebook withdraw: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook withdraw: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: cannot withdraw from chequebook"
)
s
.
l
ogger
.
Error
(
"debug api: cannot withdraw from chequebook"
)
return
return
}
}
if
err
!=
nil
{
if
err
!=
nil
{
jsonhttp
.
InternalServerError
(
w
,
errChequebookNoWithdraw
)
jsonhttp
.
InternalServerError
(
w
,
errChequebookNoWithdraw
)
s
.
L
ogger
.
Debugf
(
"debug api: chequebook withdraw: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook withdraw: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: cannot withdraw from chequebook"
)
s
.
l
ogger
.
Error
(
"debug api: cannot withdraw from chequebook"
)
return
return
}
}
jsonhttp
.
OK
(
w
,
chequebookTxResponse
{
TransactionHash
:
txHash
})
jsonhttp
.
OK
(
w
,
chequebookTxResponse
{
TransactionHash
:
txHash
})
}
}
func
(
s
*
server
)
chequebookDepositHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
chequebookDepositHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
amountStr
:=
r
.
URL
.
Query
()
.
Get
(
"amount"
)
amountStr
:=
r
.
URL
.
Query
()
.
Get
(
"amount"
)
if
amountStr
==
""
{
if
amountStr
==
""
{
jsonhttp
.
BadRequest
(
w
,
errChequebookNoAmount
)
jsonhttp
.
BadRequest
(
w
,
errChequebookNoAmount
)
s
.
L
ogger
.
Error
(
"debug api: no deposit amount"
)
s
.
l
ogger
.
Error
(
"debug api: no deposit amount"
)
return
return
}
}
amount
,
ok
:=
big
.
NewInt
(
0
)
.
SetString
(
amountStr
,
10
)
amount
,
ok
:=
big
.
NewInt
(
0
)
.
SetString
(
amountStr
,
10
)
if
!
ok
{
if
!
ok
{
jsonhttp
.
BadRequest
(
w
,
errChequebookNoAmount
)
jsonhttp
.
BadRequest
(
w
,
errChequebookNoAmount
)
s
.
L
ogger
.
Error
(
"debug api: invalid deposit amount"
)
s
.
l
ogger
.
Error
(
"debug api: invalid deposit amount"
)
return
return
}
}
txHash
,
err
:=
s
.
C
hequebook
.
Deposit
(
r
.
Context
(),
amount
)
txHash
,
err
:=
s
.
c
hequebook
.
Deposit
(
r
.
Context
(),
amount
)
if
errors
.
Is
(
err
,
chequebook
.
ErrInsufficientFunds
)
{
if
errors
.
Is
(
err
,
chequebook
.
ErrInsufficientFunds
)
{
jsonhttp
.
BadRequest
(
w
,
errChequebookInsufficientFunds
)
jsonhttp
.
BadRequest
(
w
,
errChequebookInsufficientFunds
)
s
.
L
ogger
.
Debugf
(
"debug api: chequebook deposit: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook deposit: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: cannot deposit from chequebook"
)
s
.
l
ogger
.
Error
(
"debug api: cannot deposit from chequebook"
)
return
return
}
}
if
err
!=
nil
{
if
err
!=
nil
{
jsonhttp
.
InternalServerError
(
w
,
errChequebookNoDeposit
)
jsonhttp
.
InternalServerError
(
w
,
errChequebookNoDeposit
)
s
.
L
ogger
.
Debugf
(
"debug api: chequebook deposit: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: chequebook deposit: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: cannot deposit from chequebook"
)
s
.
l
ogger
.
Error
(
"debug api: cannot deposit from chequebook"
)
return
return
}
}
...
...
pkg/debugapi/chunk.go
View file @
e043c29e
...
@@ -13,17 +13,17 @@ import (
...
@@ -13,17 +13,17 @@ import (
"github.com/gorilla/mux"
"github.com/gorilla/mux"
)
)
func
(
s
*
server
)
hasChunkHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
hasChunkHandler
(
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
(
"debug api: parse chunk address: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: parse chunk address: %v"
,
err
)
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
(
"debug api: localstore has: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: localstore has: %v"
,
err
)
jsonhttp
.
BadRequest
(
w
,
err
)
jsonhttp
.
BadRequest
(
w
,
err
)
return
return
}
}
...
@@ -35,17 +35,17 @@ func (s *server) hasChunkHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -35,17 +35,17 @@ func (s *server) hasChunkHandler(w http.ResponseWriter, r *http.Request) {
jsonhttp
.
OK
(
w
,
nil
)
jsonhttp
.
OK
(
w
,
nil
)
}
}
func
(
s
*
server
)
removeChunk
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
removeChunk
(
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
(
"debug api: parse chunk address: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: parse chunk address: %v"
,
err
)
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
(
"debug api: localstore remove: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: localstore remove: %v"
,
err
)
jsonhttp
.
BadRequest
(
w
,
err
)
jsonhttp
.
BadRequest
(
w
,
err
)
return
return
}
}
...
@@ -55,9 +55,9 @@ func (s *server) removeChunk(w http.ResponseWriter, r *http.Request) {
...
@@ -55,9 +55,9 @@ func (s *server) removeChunk(w http.ResponseWriter, r *http.Request) {
return
return
}
}
err
=
s
.
S
torer
.
Set
(
r
.
Context
(),
storage
.
ModeSetRemove
,
addr
)
err
=
s
.
s
torer
.
Set
(
r
.
Context
(),
storage
.
ModeSetRemove
,
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: localstore remove: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: localstore remove: %v"
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
...
pkg/debugapi/cors.go
0 → 100644
View file @
e043c29e
// Copyright 2021 The Swarm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
debugapi
import
(
"net/http"
"unicode/utf8"
)
// corsHandler sets CORS headers to HTTP response if allowed origins are configured.
func
(
s
*
Service
)
corsHandler
(
h
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
if
o
:=
r
.
Header
.
Get
(
"Origin"
);
o
!=
""
&&
(
len
(
s
.
corsAllowedOrigins
)
==
0
||
checkOrigin
(
r
,
s
.
corsAllowedOrigins
))
{
w
.
Header
()
.
Set
(
"Access-Control-Allow-Credentials"
,
"true"
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Origin"
,
o
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Headers"
,
"Origin, Accept, Authorization, Content-Type, X-Requested-With, Access-Control-Request-Headers, Access-Control-Request-Method"
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Methods"
,
"GET, HEAD, OPTIONS, POST, PUT, DELETE"
)
w
.
Header
()
.
Set
(
"Access-Control-Max-Age"
,
"3600"
)
}
h
.
ServeHTTP
(
w
,
r
)
})
}
// checkOrigin returns true if the origin header is not set or is equal to the request host.
func
checkOrigin
(
r
*
http
.
Request
,
allowed
[]
string
)
bool
{
origin
:=
r
.
Header
[
"Origin"
]
if
len
(
origin
)
==
0
{
return
true
}
scheme
:=
"http"
if
r
.
TLS
!=
nil
{
scheme
=
"https"
}
hosts
:=
append
(
allowed
,
scheme
+
"://"
+
r
.
Host
)
for
_
,
v
:=
range
hosts
{
if
equalASCIIFold
(
origin
[
0
],
v
)
||
v
==
"*"
{
return
true
}
}
return
false
}
// equalASCIIFold returns true if s is equal to t with ASCII case folding as
// defined in RFC 4790.
func
equalASCIIFold
(
s
,
t
string
)
bool
{
for
s
!=
""
&&
t
!=
""
{
sr
,
size
:=
utf8
.
DecodeRuneInString
(
s
)
s
=
s
[
size
:
]
tr
,
size
:=
utf8
.
DecodeRuneInString
(
t
)
t
=
t
[
size
:
]
if
sr
==
tr
{
continue
}
if
'A'
<=
sr
&&
sr
<=
'Z'
{
sr
=
sr
+
'a'
-
'A'
}
if
'A'
<=
tr
&&
tr
<=
'Z'
{
tr
=
tr
+
'a'
-
'A'
}
if
sr
!=
tr
{
return
false
}
}
return
s
==
t
}
pkg/debugapi/cors_test.go
0 → 100644
View file @
e043c29e
// Copyright 2021 The Swarm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
debugapi_test
import
(
"net/http"
"testing"
)
func
TestCORSHeaders
(
t
*
testing
.
T
)
{
for
_
,
tc
:=
range
[]
struct
{
name
string
origin
string
allowedOrigins
[]
string
wantCORS
bool
}{
{
name
:
"none"
,
},
{
name
:
"no origin"
,
allowedOrigins
:
[]
string
{
"https://gateway.ethswarm.org"
},
wantCORS
:
false
,
},
{
name
:
"single explicit"
,
origin
:
"https://gateway.ethswarm.org"
,
allowedOrigins
:
[]
string
{
"https://gateway.ethswarm.org"
},
wantCORS
:
true
,
},
{
name
:
"single explicit blocked"
,
origin
:
"http://a-hacker.me"
,
allowedOrigins
:
[]
string
{
"https://gateway.ethswarm.org"
},
wantCORS
:
false
,
},
{
name
:
"multiple explicit"
,
origin
:
"https://staging.gateway.ethswarm.org"
,
allowedOrigins
:
[]
string
{
"https://gateway.ethswarm.org"
,
"https://staging.gateway.ethswarm.org"
},
wantCORS
:
true
,
},
{
name
:
"multiple explicit blocked"
,
origin
:
"http://a-hacker.me"
,
allowedOrigins
:
[]
string
{
"https://gateway.ethswarm.org"
,
"https://staging.gateway.ethswarm.org"
},
wantCORS
:
false
,
},
{
name
:
"wildcard"
,
origin
:
"http://localhost:1234"
,
allowedOrigins
:
[]
string
{
"*"
},
wantCORS
:
true
,
},
{
name
:
"wildcard"
,
origin
:
"https://gateway.ethswarm.org"
,
allowedOrigins
:
[]
string
{
"*"
},
wantCORS
:
true
,
},
}
{
t
.
Run
(
tc
.
name
,
func
(
t
*
testing
.
T
)
{
testServer
:=
newTestServer
(
t
,
testServerOptions
{
CORSAllowedOrigins
:
tc
.
allowedOrigins
,
})
req
,
err
:=
http
.
NewRequest
(
http
.
MethodGet
,
"/"
,
nil
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
tc
.
origin
!=
""
{
req
.
Header
.
Set
(
"Origin"
,
tc
.
origin
)
}
r
,
err
:=
testServer
.
Client
.
Do
(
req
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
got
:=
r
.
Header
.
Get
(
"Access-Control-Allow-Origin"
)
if
tc
.
wantCORS
{
if
got
!=
tc
.
origin
{
t
.
Errorf
(
"got Access-Control-Allow-Origin %q, want %q"
,
got
,
tc
.
origin
)
}
}
else
{
if
got
!=
""
{
t
.
Errorf
(
"got Access-Control-Allow-Origin %q, want none"
,
got
)
}
}
})
}
}
pkg/debugapi/debugapi.go
View file @
e043c29e
...
@@ -11,7 +11,6 @@ import (
...
@@ -11,7 +11,6 @@ import (
"crypto/ecdsa"
"crypto/ecdsa"
"net/http"
"net/http"
"sync"
"sync"
"unicode/utf8"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethersphere/bee/pkg/accounting"
"github.com/ethersphere/bee/pkg/accounting"
...
@@ -29,93 +28,44 @@ import (
...
@@ -29,93 +28,44 @@ import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus"
)
)
type
Service
interface
{
// Service implements http.Handler interface to be used in HTTP server.
http
.
Handler
type
Service
struct
{
Configure
(
p2p
p2p
.
DebugService
,
pingpong
pingpong
.
Interface
,
topologyDriver
topology
.
Driver
,
storer
storage
.
Storer
,
tags
*
tags
.
Tags
,
accounting
accounting
.
Interface
,
settlement
settlement
.
Interface
,
chequebookEnabled
bool
,
swap
swap
.
ApiInterface
,
chequebook
chequebook
.
Service
)
overlay
swarm
.
Address
MustRegisterMetrics
(
cs
...
prometheus
.
Collector
)
publicKey
ecdsa
.
PublicKey
}
pssPublicKey
ecdsa
.
PublicKey
ethereumAddress
common
.
Address
type
server
struct
{
p2p
p2p
.
DebugService
Overlay
swarm
.
Address
pingpong
pingpong
.
Interface
PublicKey
ecdsa
.
PublicKey
topologyDriver
topology
.
Driver
PSSPublicKey
ecdsa
.
PublicKey
storer
storage
.
Storer
EthereumAddress
common
.
Address
logger
logging
.
Logger
P2P
p2p
.
DebugService
tracer
*
tracing
.
Tracer
Pingpong
pingpong
.
Interface
tags
*
tags
.
Tags
TopologyDriver
topology
.
Driver
accounting
accounting
.
Interface
Storer
storage
.
Storer
settlement
settlement
.
Interface
Logger
logging
.
Logger
chequebookEnabled
bool
Tracer
*
tracing
.
Tracer
chequebook
chequebook
.
Service
Tags
*
tags
.
Tags
swap
swap
.
ApiInterface
Accounting
accounting
.
Interface
corsAllowedOrigins
[]
string
Settlement
settlement
.
Interface
ChequebookEnabled
bool
Chequebook
chequebook
.
Service
Swap
swap
.
ApiInterface
CORSAllowedOrigins
[]
string
metricsRegistry
*
prometheus
.
Registry
metricsRegistry
*
prometheus
.
Registry
// handler is changed in the Configure method
// handler is changed in the Configure method
handler
http
.
Handler
handler
http
.
Handler
handlerMu
sync
.
RWMutex
handlerMu
sync
.
RWMutex
}
}
// checkOrigin returns true if the origin is not set or is equal to the request host.
func
(
s
*
server
)
checkOrigin
(
r
*
http
.
Request
)
bool
{
origin
:=
r
.
Header
[
"Origin"
]
if
len
(
origin
)
==
0
{
return
true
}
scheme
:=
"http"
if
r
.
TLS
!=
nil
{
scheme
=
"https"
}
hosts
:=
append
(
s
.
CORSAllowedOrigins
,
scheme
+
"://"
+
r
.
Host
)
for
_
,
v
:=
range
hosts
{
if
equalASCIIFold
(
origin
[
0
],
v
)
||
v
==
"*"
{
return
true
}
}
return
false
}
// equalASCIIFold returns true if s is equal to t with ASCII case folding as
// defined in RFC 4790.
func
equalASCIIFold
(
s
,
t
string
)
bool
{
for
s
!=
""
&&
t
!=
""
{
sr
,
size
:=
utf8
.
DecodeRuneInString
(
s
)
s
=
s
[
size
:
]
tr
,
size
:=
utf8
.
DecodeRuneInString
(
t
)
t
=
t
[
size
:
]
if
sr
==
tr
{
continue
}
if
'A'
<=
sr
&&
sr
<=
'Z'
{
sr
=
sr
+
'a'
-
'A'
}
if
'A'
<=
tr
&&
tr
<=
'Z'
{
tr
=
tr
+
'a'
-
'A'
}
if
sr
!=
tr
{
return
false
}
}
return
s
==
t
}
// New creates a new Debug API Service with only basic routers enabled in order
// New creates a new Debug API Service with only basic routers enabled in order
// to expose /addresses, /health endpoints, Go metrics and pprof. It is useful to expose
// to expose /addresses, /health endpoints, Go metrics and pprof. It is useful to expose
// these endpoints before all dependencies are configured and injected to have
// these endpoints before all dependencies are configured and injected to have
// access to basic debugging tools and /health endpoint.
// access to basic debugging tools and /health endpoint.
func
New
(
overlay
swarm
.
Address
,
publicKey
,
pssPublicKey
ecdsa
.
PublicKey
,
ethereumAddress
common
.
Address
,
logger
logging
.
Logger
,
tracer
*
tracing
.
Tracer
,
corsAllowedOrigins
[]
string
)
Service
{
func
New
(
overlay
swarm
.
Address
,
publicKey
,
pssPublicKey
ecdsa
.
PublicKey
,
ethereumAddress
common
.
Address
,
logger
logging
.
Logger
,
tracer
*
tracing
.
Tracer
,
corsAllowedOrigins
[]
string
)
*
Service
{
s
:=
new
(
server
)
s
:=
new
(
Service
)
s
.
O
verlay
=
overlay
s
.
o
verlay
=
overlay
s
.
P
ublicKey
=
publicKey
s
.
p
ublicKey
=
publicKey
s
.
PSS
PublicKey
=
pssPublicKey
s
.
pss
PublicKey
=
pssPublicKey
s
.
E
thereumAddress
=
ethereumAddress
s
.
e
thereumAddress
=
ethereumAddress
s
.
L
ogger
=
logger
s
.
l
ogger
=
logger
s
.
T
racer
=
tracer
s
.
t
racer
=
tracer
s
.
CORS
AllowedOrigins
=
corsAllowedOrigins
s
.
cors
AllowedOrigins
=
corsAllowedOrigins
s
.
metricsRegistry
=
newMetricsRegistry
()
s
.
metricsRegistry
=
newMetricsRegistry
()
s
.
setRouter
(
s
.
newBasicRouter
())
s
.
setRouter
(
s
.
newBasicRouter
())
...
@@ -126,22 +76,23 @@ func New(overlay swarm.Address, publicKey, pssPublicKey ecdsa.PublicKey, ethereu
...
@@ -126,22 +76,23 @@ func New(overlay swarm.Address, publicKey, pssPublicKey ecdsa.PublicKey, ethereu
// Configure injects required dependencies and configuration parameters and
// Configure injects required dependencies and configuration parameters and
// constructs HTTP routes that depend on them. It is intended and safe to call
// constructs HTTP routes that depend on them. It is intended and safe to call
// this method only once.
// this method only once.
func
(
s
*
server
)
Configure
(
p2p
p2p
.
DebugService
,
pingpong
pingpong
.
Interface
,
topologyDriver
topology
.
Driver
,
storer
storage
.
Storer
,
tags
*
tags
.
Tags
,
accounting
accounting
.
Interface
,
settlement
settlement
.
Interface
,
chequebookEnabled
bool
,
swap
swap
.
ApiInterface
,
chequebook
chequebook
.
Service
)
{
func
(
s
*
Service
)
Configure
(
p2p
p2p
.
DebugService
,
pingpong
pingpong
.
Interface
,
topologyDriver
topology
.
Driver
,
storer
storage
.
Storer
,
tags
*
tags
.
Tags
,
accounting
accounting
.
Interface
,
settlement
settlement
.
Interface
,
chequebookEnabled
bool
,
swap
swap
.
ApiInterface
,
chequebook
chequebook
.
Service
)
{
s
.
P2P
=
p2p
s
.
p2p
=
p2p
s
.
P
ingpong
=
pingpong
s
.
p
ingpong
=
pingpong
s
.
T
opologyDriver
=
topologyDriver
s
.
t
opologyDriver
=
topologyDriver
s
.
S
torer
=
storer
s
.
s
torer
=
storer
s
.
T
ags
=
tags
s
.
t
ags
=
tags
s
.
A
ccounting
=
accounting
s
.
a
ccounting
=
accounting
s
.
S
ettlement
=
settlement
s
.
s
ettlement
=
settlement
s
.
C
hequebookEnabled
=
chequebookEnabled
s
.
c
hequebookEnabled
=
chequebookEnabled
s
.
C
hequebook
=
chequebook
s
.
c
hequebook
=
chequebook
s
.
S
wap
=
swap
s
.
s
wap
=
swap
s
.
setRouter
(
s
.
newRouter
())
s
.
setRouter
(
s
.
newRouter
())
}
}
func
(
s
*
server
)
ServeHTTP
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
// ServeHTTP implements http.Handler interface.
func
(
s
*
Service
)
ServeHTTP
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
// protect handler as it is changed by the Configure method
// protect handler as it is changed by the Configure method
s
.
handlerMu
.
RLock
()
s
.
handlerMu
.
RLock
()
h
:=
s
.
handler
h
:=
s
.
handler
...
...
pkg/debugapi/debugapi_test.go
View file @
e043c29e
...
@@ -36,20 +36,21 @@ import (
...
@@ -36,20 +36,21 @@ import (
)
)
type
testServerOptions
struct
{
type
testServerOptions
struct
{
Overlay
swarm
.
Address
Overlay
swarm
.
Address
PublicKey
ecdsa
.
PublicKey
PublicKey
ecdsa
.
PublicKey
PSSPublicKey
ecdsa
.
PublicKey
PSSPublicKey
ecdsa
.
PublicKey
EthereumAddress
common
.
Address
EthereumAddress
common
.
Address
P2P
*
p2pmock
.
Service
CORSAllowedOrigins
[]
string
Pingpong
pingpong
.
Interface
P2P
*
p2pmock
.
Service
Storer
storage
.
Storer
Pingpong
pingpong
.
Interface
Resolver
resolver
.
Interface
Storer
storage
.
Storer
TopologyOpts
[]
topologymock
.
Option
Resolver
resolver
.
Interface
Tags
*
tags
.
Tags
TopologyOpts
[]
topologymock
.
Option
AccountingOpts
[]
accountingmock
.
Option
Tags
*
tags
.
Tags
SettlementOpts
[]
swapmock
.
Option
AccountingOpts
[]
accountingmock
.
Option
ChequebookOpts
[]
chequebookmock
.
Option
SettlementOpts
[]
swapmock
.
Option
SwapOpts
[]
swapmock
.
Option
ChequebookOpts
[]
chequebookmock
.
Option
SwapOpts
[]
swapmock
.
Option
}
}
type
testServer
struct
{
type
testServer
struct
{
...
@@ -63,7 +64,7 @@ func newTestServer(t *testing.T, o testServerOptions) *testServer {
...
@@ -63,7 +64,7 @@ func newTestServer(t *testing.T, o testServerOptions) *testServer {
settlement
:=
swapmock
.
New
(
o
.
SettlementOpts
...
)
settlement
:=
swapmock
.
New
(
o
.
SettlementOpts
...
)
chequebook
:=
chequebookmock
.
NewChequebook
(
o
.
ChequebookOpts
...
)
chequebook
:=
chequebookmock
.
NewChequebook
(
o
.
ChequebookOpts
...
)
swapserv
:=
swapmock
.
NewApiInterface
(
o
.
SwapOpts
...
)
swapserv
:=
swapmock
.
NewApiInterface
(
o
.
SwapOpts
...
)
s
:=
debugapi
.
New
(
o
.
Overlay
,
o
.
PublicKey
,
o
.
PSSPublicKey
,
o
.
EthereumAddress
,
logging
.
New
(
ioutil
.
Discard
,
0
),
nil
,
nil
)
s
:=
debugapi
.
New
(
o
.
Overlay
,
o
.
PublicKey
,
o
.
PSSPublicKey
,
o
.
EthereumAddress
,
logging
.
New
(
ioutil
.
Discard
,
0
),
nil
,
o
.
CORSAllowedOrigins
)
s
.
Configure
(
o
.
P2P
,
o
.
Pingpong
,
topologyDriver
,
o
.
Storer
,
o
.
Tags
,
acc
,
settlement
,
true
,
swapserv
,
chequebook
)
s
.
Configure
(
o
.
P2P
,
o
.
Pingpong
,
topologyDriver
,
o
.
Storer
,
o
.
Tags
,
acc
,
settlement
,
true
,
swapserv
,
chequebook
)
ts
:=
httptest
.
NewServer
(
s
)
ts
:=
httptest
.
NewServer
(
s
)
t
.
Cleanup
(
ts
.
Close
)
t
.
Cleanup
(
ts
.
Close
)
...
...
pkg/debugapi/metrics.go
View file @
e043c29e
...
@@ -32,6 +32,6 @@ func newMetricsRegistry() (r *prometheus.Registry) {
...
@@ -32,6 +32,6 @@ func newMetricsRegistry() (r *prometheus.Registry) {
return
r
return
r
}
}
func
(
s
*
server
)
MustRegisterMetrics
(
cs
...
prometheus
.
Collector
)
{
func
(
s
*
Service
)
MustRegisterMetrics
(
cs
...
prometheus
.
Collector
)
{
s
.
metricsRegistry
.
MustRegister
(
cs
...
)
s
.
metricsRegistry
.
MustRegister
(
cs
...
)
}
}
pkg/debugapi/p2p.go
View file @
e043c29e
...
@@ -23,25 +23,25 @@ type addressesResponse struct {
...
@@ -23,25 +23,25 @@ type addressesResponse struct {
PSSPublicKey
string
`json:"pss_public_key"`
PSSPublicKey
string
`json:"pss_public_key"`
}
}
func
(
s
*
server
)
addressesHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
addressesHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
// initialize variable to json encode as [] instead null if p2p is nil
// initialize variable to json encode as [] instead null if p2p is nil
underlay
:=
make
([]
multiaddr
.
Multiaddr
,
0
)
underlay
:=
make
([]
multiaddr
.
Multiaddr
,
0
)
// addresses endpoint is exposed before p2p service is configured
// addresses endpoint is exposed before p2p service is configured
// to provide information about other addresses.
// to provide information about other addresses.
if
s
.
P2P
!=
nil
{
if
s
.
p2p
!=
nil
{
u
,
err
:=
s
.
P2P
.
Addresses
()
u
,
err
:=
s
.
p2p
.
Addresses
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: p2p addresses: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: p2p addresses: %v"
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
underlay
=
u
underlay
=
u
}
}
jsonhttp
.
OK
(
w
,
addressesResponse
{
jsonhttp
.
OK
(
w
,
addressesResponse
{
Overlay
:
s
.
O
verlay
,
Overlay
:
s
.
o
verlay
,
Underlay
:
underlay
,
Underlay
:
underlay
,
Ethereum
:
s
.
E
thereumAddress
,
Ethereum
:
s
.
e
thereumAddress
,
PublicKey
:
hex
.
EncodeToString
(
crypto
.
EncodeSecp256k1PublicKey
(
&
s
.
P
ublicKey
)),
PublicKey
:
hex
.
EncodeToString
(
crypto
.
EncodeSecp256k1PublicKey
(
&
s
.
p
ublicKey
)),
PSSPublicKey
:
hex
.
EncodeToString
(
crypto
.
EncodeSecp256k1PublicKey
(
&
s
.
PSS
PublicKey
)),
PSSPublicKey
:
hex
.
EncodeToString
(
crypto
.
EncodeSecp256k1PublicKey
(
&
s
.
pss
PublicKey
)),
})
})
}
}
pkg/debugapi/peer.go
View file @
e043c29e
...
@@ -19,18 +19,18 @@ type peerConnectResponse struct {
...
@@ -19,18 +19,18 @@ type peerConnectResponse struct {
Address
string
`json:"address"`
Address
string
`json:"address"`
}
}
func
(
s
*
server
)
peerConnectHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
peerConnectHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
,
err
:=
multiaddr
.
NewMultiaddr
(
"/"
+
mux
.
Vars
(
r
)[
"multi-address"
])
addr
,
err
:=
multiaddr
.
NewMultiaddr
(
"/"
+
mux
.
Vars
(
r
)[
"multi-address"
])
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: peer connect: parse multiaddress: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: peer connect: parse multiaddress: %v"
,
err
)
jsonhttp
.
BadRequest
(
w
,
err
)
jsonhttp
.
BadRequest
(
w
,
err
)
return
return
}
}
bzzAddr
,
err
:=
s
.
P2P
.
Connect
(
r
.
Context
(),
addr
)
bzzAddr
,
err
:=
s
.
p2p
.
Connect
(
r
.
Context
(),
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: peer connect %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: peer connect %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"unable to connect to peer %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"unable to connect to peer %s"
,
addr
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
@@ -40,22 +40,22 @@ func (s *server) peerConnectHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -40,22 +40,22 @@ func (s *server) peerConnectHandler(w http.ResponseWriter, r *http.Request) {
})
})
}
}
func
(
s
*
server
)
peerDisconnectHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
peerDisconnectHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
:=
mux
.
Vars
(
r
)[
"address"
]
addr
:=
mux
.
Vars
(
r
)[
"address"
]
swarmAddr
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
swarmAddr
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: parse peer address %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: parse peer address %s: %v"
,
addr
,
err
)
jsonhttp
.
BadRequest
(
w
,
"invalid peer address"
)
jsonhttp
.
BadRequest
(
w
,
"invalid peer address"
)
return
return
}
}
if
err
:=
s
.
P2P
.
Disconnect
(
swarmAddr
);
err
!=
nil
{
if
err
:=
s
.
p2p
.
Disconnect
(
swarmAddr
);
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: peer disconnect %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: peer disconnect %s: %v"
,
addr
,
err
)
if
errors
.
Is
(
err
,
p2p
.
ErrPeerNotFound
)
{
if
errors
.
Is
(
err
,
p2p
.
ErrPeerNotFound
)
{
jsonhttp
.
BadRequest
(
w
,
"peer not found"
)
jsonhttp
.
BadRequest
(
w
,
"peer not found"
)
return
return
}
}
s
.
L
ogger
.
Errorf
(
"unable to disconnect peer %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"unable to disconnect peer %s"
,
addr
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
@@ -67,16 +67,16 @@ type peersResponse struct {
...
@@ -67,16 +67,16 @@ type peersResponse struct {
Peers
[]
p2p
.
Peer
`json:"peers"`
Peers
[]
p2p
.
Peer
`json:"peers"`
}
}
func
(
s
*
server
)
peersHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
peersHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
jsonhttp
.
OK
(
w
,
peersResponse
{
jsonhttp
.
OK
(
w
,
peersResponse
{
Peers
:
s
.
P2P
.
Peers
(),
Peers
:
s
.
p2p
.
Peers
(),
})
})
}
}
func
(
s
*
server
)
blocklistedPeersHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
blocklistedPeersHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
peers
,
err
:=
s
.
P2P
.
BlocklistedPeers
()
peers
,
err
:=
s
.
p2p
.
BlocklistedPeers
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: blocklisted peers: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: blocklisted peers: %v"
,
err
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
jsonhttp
.
InternalServerError
(
w
,
nil
)
return
return
}
}
...
...
pkg/debugapi/pingpong.go
View file @
e043c29e
...
@@ -18,11 +18,11 @@ type pingpongResponse struct {
...
@@ -18,11 +18,11 @@ type pingpongResponse struct {
RTT
string
`json:"rtt"`
RTT
string
`json:"rtt"`
}
}
func
(
s
*
server
)
pingpongHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
pingpongHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
peerID
:=
mux
.
Vars
(
r
)[
"peer-id"
]
peerID
:=
mux
.
Vars
(
r
)[
"peer-id"
]
ctx
:=
r
.
Context
()
ctx
:=
r
.
Context
()
span
,
logger
,
ctx
:=
s
.
Tracer
.
StartSpanFromContext
(
ctx
,
"pingpong-api"
,
s
.
L
ogger
)
span
,
logger
,
ctx
:=
s
.
tracer
.
StartSpanFromContext
(
ctx
,
"pingpong-api"
,
s
.
l
ogger
)
defer
span
.
Finish
()
defer
span
.
Finish
()
address
,
err
:=
swarm
.
ParseHexAddress
(
peerID
)
address
,
err
:=
swarm
.
ParseHexAddress
(
peerID
)
...
@@ -32,7 +32,7 @@ func (s *server) pingpongHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -32,7 +32,7 @@ func (s *server) pingpongHandler(w http.ResponseWriter, r *http.Request) {
return
return
}
}
rtt
,
err
:=
s
.
P
ingpong
.
Ping
(
ctx
,
address
,
"hey"
,
"there"
,
","
,
"how are"
,
"you"
,
"?"
)
rtt
,
err
:=
s
.
p
ingpong
.
Ping
(
ctx
,
address
,
"hey"
,
"there"
,
","
,
"how are"
,
"you"
,
"?"
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Debugf
(
"pingpong: ping %s: %v"
,
peerID
,
err
)
logger
.
Debugf
(
"pingpong: ping %s: %v"
,
peerID
,
err
)
if
errors
.
Is
(
err
,
p2p
.
ErrPeerNotFound
)
{
if
errors
.
Is
(
err
,
p2p
.
ErrPeerNotFound
)
{
...
...
pkg/debugapi/router.go
View file @
e043c29e
...
@@ -25,7 +25,7 @@ import (
...
@@ -25,7 +25,7 @@ import (
// - vars
// - vars
// - metrics
// - metrics
// - /addresses
// - /addresses
func
(
s
*
server
)
newBasicRouter
()
*
mux
.
Router
{
func
(
s
*
Service
)
newBasicRouter
()
*
mux
.
Router
{
router
:=
mux
.
NewRouter
()
router
:=
mux
.
NewRouter
()
router
.
NotFoundHandler
=
http
.
HandlerFunc
(
jsonhttp
.
NotFoundHandler
)
router
.
NotFoundHandler
=
http
.
HandlerFunc
(
jsonhttp
.
NotFoundHandler
)
...
@@ -65,7 +65,7 @@ func (s *server) newBasicRouter() *mux.Router {
...
@@ -65,7 +65,7 @@ func (s *server) newBasicRouter() *mux.Router {
// newRouter construct the complete set of routes after all of the dependencies
// newRouter construct the complete set of routes after all of the dependencies
// are injected and exposes /readiness endpoint to provide information that
// are injected and exposes /readiness endpoint to provide information that
// Debug API is fully active.
// Debug API is fully active.
func
(
s
*
server
)
newRouter
()
*
mux
.
Router
{
func
(
s
*
Service
)
newRouter
()
*
mux
.
Router
{
router
:=
s
.
newBasicRouter
()
router
:=
s
.
newBasicRouter
()
router
.
Handle
(
"/readiness"
,
web
.
ChainHandlers
(
router
.
Handle
(
"/readiness"
,
web
.
ChainHandlers
(
...
@@ -129,7 +129,7 @@ func (s *server) newRouter() *mux.Router {
...
@@ -129,7 +129,7 @@ func (s *server) newRouter() *mux.Router {
"GET"
:
http
.
HandlerFunc
(
s
.
peerSettlementsHandler
),
"GET"
:
http
.
HandlerFunc
(
s
.
peerSettlementsHandler
),
})
})
if
s
.
C
hequebookEnabled
{
if
s
.
c
hequebookEnabled
{
router
.
Handle
(
"/chequebook/balance"
,
jsonhttp
.
MethodHandler
{
router
.
Handle
(
"/chequebook/balance"
,
jsonhttp
.
MethodHandler
{
"GET"
:
http
.
HandlerFunc
(
s
.
chequebookBalanceHandler
),
"GET"
:
http
.
HandlerFunc
(
s
.
chequebookBalanceHandler
),
})
})
...
@@ -168,23 +168,12 @@ func (s *server) newRouter() *mux.Router {
...
@@ -168,23 +168,12 @@ func (s *server) newRouter() *mux.Router {
}
}
// setRouter sets the base Debug API handler with common middlewares.
// setRouter sets the base Debug API handler with common middlewares.
func
(
s
*
server
)
setRouter
(
router
http
.
Handler
)
{
func
(
s
*
Service
)
setRouter
(
router
http
.
Handler
)
{
h
:=
http
.
NewServeMux
()
h
:=
http
.
NewServeMux
()
h
.
Handle
(
"/"
,
web
.
ChainHandlers
(
h
.
Handle
(
"/"
,
web
.
ChainHandlers
(
httpaccess
.
NewHTTPAccessLogHandler
(
s
.
Logger
,
logrus
.
InfoLevel
,
s
.
T
racer
,
"debug api access"
),
httpaccess
.
NewHTTPAccessLogHandler
(
s
.
logger
,
logrus
.
InfoLevel
,
s
.
t
racer
,
"debug api access"
),
handlers
.
CompressHandler
,
handlers
.
CompressHandler
,
func
(
h
http
.
Handler
)
http
.
Handler
{
s
.
corsHandler
,
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
if
o
:=
r
.
Header
.
Get
(
"Origin"
);
o
!=
""
&&
(
len
(
s
.
CORSAllowedOrigins
)
==
0
||
s
.
checkOrigin
(
r
))
{
w
.
Header
()
.
Set
(
"Access-Control-Allow-Credentials"
,
"true"
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Origin"
,
o
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Headers"
,
"Origin, Accept, Authorization, Content-Type, X-Requested-With, Access-Control-Request-Headers, Access-Control-Request-Method"
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Methods"
,
"GET, HEAD, OPTIONS, POST, PUT, DELETE"
)
w
.
Header
()
.
Set
(
"Access-Control-Max-Age"
,
"3600"
)
}
h
.
ServeHTTP
(
w
,
r
)
})
},
web
.
NoCacheHeadersHandler
,
web
.
NoCacheHeadersHandler
,
web
.
FinalHandler
(
router
),
web
.
FinalHandler
(
router
),
))
))
...
...
pkg/debugapi/settlements.go
View file @
e043c29e
...
@@ -32,20 +32,20 @@ type settlementsResponse struct {
...
@@ -32,20 +32,20 @@ type settlementsResponse struct {
Settlements
[]
settlementResponse
`json:"settlements"`
Settlements
[]
settlementResponse
`json:"settlements"`
}
}
func
(
s
*
server
)
settlementsHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
settlementsHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
settlementsSent
,
err
:=
s
.
S
ettlement
.
SettlementsSent
()
settlementsSent
,
err
:=
s
.
s
ettlement
.
SettlementsSent
()
if
err
!=
nil
{
if
err
!=
nil
{
jsonhttp
.
InternalServerError
(
w
,
errCantSettlements
)
jsonhttp
.
InternalServerError
(
w
,
errCantSettlements
)
s
.
L
ogger
.
Debugf
(
"debug api: sent settlements: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: sent settlements: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: can not get sent settlements"
)
s
.
l
ogger
.
Error
(
"debug api: can not get sent settlements"
)
return
return
}
}
settlementsReceived
,
err
:=
s
.
S
ettlement
.
SettlementsReceived
()
settlementsReceived
,
err
:=
s
.
s
ettlement
.
SettlementsReceived
()
if
err
!=
nil
{
if
err
!=
nil
{
jsonhttp
.
InternalServerError
(
w
,
errCantSettlements
)
jsonhttp
.
InternalServerError
(
w
,
errCantSettlements
)
s
.
L
ogger
.
Debugf
(
"debug api: received settlements: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: received settlements: %v"
,
err
)
s
.
L
ogger
.
Error
(
"debug api: can not get received settlements"
)
s
.
l
ogger
.
Error
(
"debug api: can not get received settlements"
)
return
return
}
}
...
@@ -88,23 +88,23 @@ func (s *server) settlementsHandler(w http.ResponseWriter, r *http.Request) {
...
@@ -88,23 +88,23 @@ func (s *server) settlementsHandler(w http.ResponseWriter, r *http.Request) {
jsonhttp
.
OK
(
w
,
settlementsResponse
{
TotalSettlementReceived
:
totalReceived
,
TotalSettlementSent
:
totalSent
,
Settlements
:
settlementResponsesArray
})
jsonhttp
.
OK
(
w
,
settlementsResponse
{
TotalSettlementReceived
:
totalReceived
,
TotalSettlementSent
:
totalSent
,
Settlements
:
settlementResponsesArray
})
}
}
func
(
s
*
server
)
peerSettlementsHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
peerSettlementsHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
addr
:=
mux
.
Vars
(
r
)[
"peer"
]
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
peer
,
err
:=
swarm
.
ParseHexAddress
(
addr
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debug api: settlements peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
l
ogger
.
Debugf
(
"debug api: settlements peer: invalid peer address %s: %v"
,
addr
,
err
)
s
.
L
ogger
.
Errorf
(
"debug api: settlements peer: invalid peer address %s"
,
addr
)
s
.
l
ogger
.
Errorf
(
"debug api: settlements peer: invalid peer address %s"
,
addr
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
jsonhttp
.
NotFound
(
w
,
errInvaliAddress
)
return
return
}
}
peerexists
:=
false
peerexists
:=
false
received
,
err
:=
s
.
S
ettlement
.
TotalReceived
(
peer
)
received
,
err
:=
s
.
s
ettlement
.
TotalReceived
(
peer
)
if
err
!=
nil
{
if
err
!=
nil
{
if
!
errors
.
Is
(
err
,
settlement
.
ErrPeerNoSettlements
)
{
if
!
errors
.
Is
(
err
,
settlement
.
ErrPeerNoSettlements
)
{
s
.
L
ogger
.
Debugf
(
"debug api: settlements peer: get peer %s received settlement: %v"
,
peer
.
String
(),
err
)
s
.
l
ogger
.
Debugf
(
"debug api: settlements peer: get peer %s received settlement: %v"
,
peer
.
String
(),
err
)
s
.
L
ogger
.
Errorf
(
"debug api: settlements peer: can't get peer %s received settlement"
,
peer
.
String
())
s
.
l
ogger
.
Errorf
(
"debug api: settlements peer: can't get peer %s received settlement"
,
peer
.
String
())
jsonhttp
.
InternalServerError
(
w
,
errCantSettlementsPeer
)
jsonhttp
.
InternalServerError
(
w
,
errCantSettlementsPeer
)
return
return
}
else
{
}
else
{
...
@@ -116,11 +116,11 @@ func (s *server) peerSettlementsHandler(w http.ResponseWriter, r *http.Request)
...
@@ -116,11 +116,11 @@ func (s *server) peerSettlementsHandler(w http.ResponseWriter, r *http.Request)
peerexists
=
true
peerexists
=
true
}
}
sent
,
err
:=
s
.
S
ettlement
.
TotalSent
(
peer
)
sent
,
err
:=
s
.
s
ettlement
.
TotalSent
(
peer
)
if
err
!=
nil
{
if
err
!=
nil
{
if
!
errors
.
Is
(
err
,
settlement
.
ErrPeerNoSettlements
)
{
if
!
errors
.
Is
(
err
,
settlement
.
ErrPeerNoSettlements
)
{
s
.
L
ogger
.
Debugf
(
"debug api: settlements peer: get peer %s sent settlement: %v"
,
peer
.
String
(),
err
)
s
.
l
ogger
.
Debugf
(
"debug api: settlements peer: get peer %s sent settlement: %v"
,
peer
.
String
(),
err
)
s
.
L
ogger
.
Errorf
(
"debug api: settlements peer: can't get peer %s sent settlement"
,
peer
.
String
())
s
.
l
ogger
.
Errorf
(
"debug api: settlements peer: can't get peer %s sent settlement"
,
peer
.
String
())
jsonhttp
.
InternalServerError
(
w
,
errCantSettlementsPeer
)
jsonhttp
.
InternalServerError
(
w
,
errCantSettlementsPeer
)
return
return
}
else
{
}
else
{
...
...
pkg/debugapi/tag.go
View file @
e043c29e
...
@@ -42,27 +42,27 @@ func newTagResponse(tag *tags.Tag) tagResponse {
...
@@ -42,27 +42,27 @@ func newTagResponse(tag *tags.Tag) tagResponse {
}
}
}
}
func
(
s
*
server
)
getTagHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
getTagHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
idStr
:=
mux
.
Vars
(
r
)[
"id"
]
idStr
:=
mux
.
Vars
(
r
)[
"id"
]
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
}
}
...
...
pkg/debugapi/topology.go
View file @
e043c29e
...
@@ -13,17 +13,17 @@ import (
...
@@ -13,17 +13,17 @@ import (
"github.com/ethersphere/bee/pkg/jsonhttp"
"github.com/ethersphere/bee/pkg/jsonhttp"
)
)
func
(
s
*
server
)
topologyHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
topologyHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
ms
,
ok
:=
s
.
T
opologyDriver
.
(
json
.
Marshaler
)
ms
,
ok
:=
s
.
t
opologyDriver
.
(
json
.
Marshaler
)
if
!
ok
{
if
!
ok
{
s
.
L
ogger
.
Error
(
"topology driver cast to json marshaler"
)
s
.
l
ogger
.
Error
(
"topology driver cast to json marshaler"
)
jsonhttp
.
InternalServerError
(
w
,
"topology json marshal interface error"
)
jsonhttp
.
InternalServerError
(
w
,
"topology json marshal interface error"
)
return
return
}
}
b
,
err
:=
ms
.
MarshalJSON
()
b
,
err
:=
ms
.
MarshalJSON
()
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Errorf
(
"topology marshal to json: %v"
,
err
)
s
.
l
ogger
.
Errorf
(
"topology marshal to json: %v"
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
...
pkg/debugapi/welcome_message.go
View file @
e043c29e
...
@@ -21,25 +21,25 @@ type welcomeMessageResponse struct {
...
@@ -21,25 +21,25 @@ type welcomeMessageResponse struct {
WelcomeMesssage
string
`json:"welcome_message"`
WelcomeMesssage
string
`json:"welcome_message"`
}
}
func
(
s
*
server
)
getWelcomeMessageHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
getWelcomeMessageHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
val
:=
s
.
P2P
.
GetWelcomeMessage
()
val
:=
s
.
p2p
.
GetWelcomeMessage
()
jsonhttp
.
OK
(
w
,
welcomeMessageResponse
{
jsonhttp
.
OK
(
w
,
welcomeMessageResponse
{
WelcomeMesssage
:
val
,
WelcomeMesssage
:
val
,
})
})
}
}
func
(
s
*
server
)
setWelcomeMessageHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
(
s
*
Service
)
setWelcomeMessageHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
var
data
welcomeMessageRequest
var
data
welcomeMessageRequest
err
:=
json
.
NewDecoder
(
r
.
Body
)
.
Decode
(
&
data
)
err
:=
json
.
NewDecoder
(
r
.
Body
)
.
Decode
(
&
data
)
if
err
!=
nil
{
if
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debugapi: welcome message: failed to read request: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debugapi: welcome message: failed to read request: %v"
,
err
)
jsonhttp
.
BadRequest
(
w
,
err
)
jsonhttp
.
BadRequest
(
w
,
err
)
return
return
}
}
if
err
:=
s
.
P2P
.
SetWelcomeMessage
(
data
.
WelcomeMesssage
);
err
!=
nil
{
if
err
:=
s
.
p2p
.
SetWelcomeMessage
(
data
.
WelcomeMesssage
);
err
!=
nil
{
s
.
L
ogger
.
Debugf
(
"debugapi: welcome message: failed to set: %v"
,
err
)
s
.
l
ogger
.
Debugf
(
"debugapi: welcome message: failed to set: %v"
,
err
)
s
.
L
ogger
.
Errorf
(
"Failed to set welcome message"
)
s
.
l
ogger
.
Errorf
(
"Failed to set welcome message"
)
jsonhttp
.
InternalServerError
(
w
,
err
)
jsonhttp
.
InternalServerError
(
w
,
err
)
return
return
}
}
...
...
pkg/node/node.go
View file @
e043c29e
...
@@ -128,7 +128,7 @@ func NewBee(addr string, swarmAddress swarm.Address, publicKey ecdsa.PublicKey,
...
@@ -128,7 +128,7 @@ func NewBee(addr string, swarmAddress swarm.Address, publicKey ecdsa.PublicKey,
tracerCloser
:
tracerCloser
,
tracerCloser
:
tracerCloser
,
}
}
var
debugAPIService
debugapi
.
Service
var
debugAPIService
*
debugapi
.
Service
if
o
.
DebugAPIAddr
!=
""
{
if
o
.
DebugAPIAddr
!=
""
{
overlayEthAddress
,
err
:=
signer
.
EthereumAddress
()
overlayEthAddress
,
err
:=
signer
.
EthereumAddress
()
if
err
!=
nil
{
if
err
!=
nil
{
...
...
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