mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-02 15:10:46 +00:00
requester: defer execution of request.Item generation in closure (#723)
* requester: defer execution of request.Item generation in closure. * bithumb: fix issue * coinut/itbit: fix linter issues * binance: fix bug on recvWindow setting * requester: standardize sendpayload + add readme update * nonce: remove inc() function * request: defer unlockiflocked * binance: revert changes for open orders * btcmarkets: defer auth generation functionality, rm context deadline as this will be created just before sending HTTP request. * binance: move const to top * exmo: remove debug output as its generated in the requester function * ftx: defer auth functionality * requester: move error to top * bittrex: defer auth functionality * bitmex: defer auth functionality and remove deadline as generation occurs after rate limiting. * btse: defer auth functionality * coinbasepro: defer auth functionality and removed context deadline as this is generated after rate limiting * coinbene: defer auth functionality and remove context deadline as this is generated after rate limiting * huobi: defer auth functionality and remove context deadline as this is generated after rate limiting * huobi-futures: defer auth functionality and remove context deadline as this is generated after rate limiting * kraken: defer auth functionality and remove context deadline as this is generated after rate limiting * kraken: remove deadline protection for timestamp generation * okgroup: defer auth functionality and remove context deadline as this is generated after rate limiting * poloniex: defer auth functionality * zb: defer auth functionality and remove context deadline as this is generated after rate limiting * exchanges: clean up log output which are done and inspected in the requester package * binance: fix path bug on every retry, rm timeout context as this is not needed * coinbene: fix path bug on retry * binance: consolidate functionality * coinbene: fix linter issues * poloniex: linter fix * kraken: change add -> set * bitstamp: fix path bug for retry * BTSE: fix retry path bug * coinbene: fix path bug whoopsie by me * gateio: fix bug where on retry it does not reset reader * localbitcoins: fix path bug on retry * zb: change domain to land * exchanges: make sure io.Reader is generated every request * exchanges: move reader generation into function scope * wrapper_issues: setup exchange manager * engine: expand withdraw manager test * engine: dont look for environment * bitstamp: fix pathing bug (@thrasher-) * engine/withdraw_manager: purge tests as this is covered in repository withdraw
This commit is contained in:
@@ -19,7 +19,6 @@ import (
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
||||
"github.com/thrasher-corp/gocryptotrader/log"
|
||||
"github.com/thrasher-corp/gocryptotrader/portfolio/withdraw"
|
||||
)
|
||||
|
||||
@@ -1501,14 +1500,17 @@ func (b *Bitfinex) SendHTTPRequest(ep exchange.URL, path string, result interfac
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return b.SendPayload(context.Background(), &request.Item{
|
||||
item := &request.Item{
|
||||
Method: http.MethodGet,
|
||||
Path: endpoint + path,
|
||||
Result: result,
|
||||
Verbose: b.Verbose,
|
||||
HTTPDebugging: b.HTTPDebugging,
|
||||
HTTPRecording: b.HTTPRecording,
|
||||
Endpoint: e})
|
||||
HTTPRecording: b.HTTPRecording}
|
||||
|
||||
return b.SendPayload(context.Background(), e, func() (*request.Item, error) {
|
||||
return item, nil
|
||||
})
|
||||
}
|
||||
|
||||
// SendAuthenticatedHTTPRequest sends an autheticated http request and json
|
||||
@@ -1523,44 +1525,42 @@ func (b *Bitfinex) SendAuthenticatedHTTPRequest(ep exchange.URL, method, path st
|
||||
return err
|
||||
}
|
||||
|
||||
n := b.Requester.GetNonce(true)
|
||||
fullPath := ePoint + bitfinexAPIVersion + path
|
||||
return b.SendPayload(context.Background(), endpoint, func() (*request.Item, error) {
|
||||
n := b.Requester.GetNonce(true)
|
||||
req := make(map[string]interface{})
|
||||
req["request"] = bitfinexAPIVersion + path
|
||||
req["nonce"] = n.String()
|
||||
|
||||
req := make(map[string]interface{})
|
||||
req["request"] = bitfinexAPIVersion + path
|
||||
req["nonce"] = n.String()
|
||||
for key, value := range params {
|
||||
req[key] = value
|
||||
}
|
||||
|
||||
for key, value := range params {
|
||||
req[key] = value
|
||||
}
|
||||
PayloadJSON, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
PayloadJSON, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
return errors.New("sendAuthenticatedAPIRequest: unable to JSON request")
|
||||
}
|
||||
PayloadBase64 := crypto.Base64Encode(PayloadJSON)
|
||||
hmac := crypto.GetHMAC(crypto.HashSHA512_384,
|
||||
[]byte(PayloadBase64),
|
||||
[]byte(b.API.Credentials.Secret))
|
||||
headers := make(map[string]string)
|
||||
headers["X-BFX-APIKEY"] = b.API.Credentials.Key
|
||||
headers["X-BFX-PAYLOAD"] = PayloadBase64
|
||||
headers["X-BFX-SIGNATURE"] = crypto.HexEncodeToString(hmac)
|
||||
|
||||
if b.Verbose {
|
||||
log.Debugf(log.ExchangeSys, "Request JSON: %s\n", PayloadJSON)
|
||||
}
|
||||
|
||||
PayloadBase64 := crypto.Base64Encode(PayloadJSON)
|
||||
hmac := crypto.GetHMAC(crypto.HashSHA512_384, []byte(PayloadBase64),
|
||||
[]byte(b.API.Credentials.Secret))
|
||||
headers := make(map[string]string)
|
||||
headers["X-BFX-APIKEY"] = b.API.Credentials.Key
|
||||
headers["X-BFX-PAYLOAD"] = PayloadBase64
|
||||
headers["X-BFX-SIGNATURE"] = crypto.HexEncodeToString(hmac)
|
||||
|
||||
return b.SendPayload(context.Background(), &request.Item{
|
||||
Method: method,
|
||||
Path: ePoint + bitfinexAPIVersion + path,
|
||||
Headers: headers,
|
||||
Result: result,
|
||||
AuthRequest: true,
|
||||
NonceEnabled: true,
|
||||
Verbose: b.Verbose,
|
||||
HTTPDebugging: b.HTTPDebugging,
|
||||
HTTPRecording: b.HTTPRecording,
|
||||
Endpoint: endpoint})
|
||||
return &request.Item{
|
||||
Method: method,
|
||||
Path: fullPath,
|
||||
Headers: headers,
|
||||
Result: result,
|
||||
AuthRequest: true,
|
||||
NonceEnabled: true,
|
||||
Verbose: b.Verbose,
|
||||
HTTPDebugging: b.HTTPDebugging,
|
||||
HTTPRecording: b.HTTPRecording}, nil
|
||||
})
|
||||
}
|
||||
|
||||
// SendAuthenticatedHTTPRequestV2 sends an autheticated http request and json
|
||||
@@ -1573,44 +1573,46 @@ func (b *Bitfinex) SendAuthenticatedHTTPRequestV2(ep exchange.URL, method, path
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var body io.Reader
|
||||
var payload []byte
|
||||
if len(params) != 0 {
|
||||
payload, err = json.Marshal(params)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
return b.SendPayload(context.Background(), endpoint, func() (*request.Item, error) {
|
||||
var body io.Reader
|
||||
var payload []byte
|
||||
if len(params) != 0 {
|
||||
payload, err = json.Marshal(params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
body = bytes.NewBuffer(payload)
|
||||
}
|
||||
body = bytes.NewBuffer(payload)
|
||||
}
|
||||
|
||||
// This is done in a weird way because bitfinex doesn't accept unixnano
|
||||
n := strconv.FormatInt(int64(b.Requester.GetNonce(false))*1e9, 10)
|
||||
headers := make(map[string]string)
|
||||
headers["Content-Type"] = "application/json"
|
||||
headers["Accept"] = "application/json"
|
||||
headers["bfx-apikey"] = b.API.Credentials.Key
|
||||
headers["bfx-nonce"] = n
|
||||
strPath := "/api" + bitfinexAPIVersion2 + path + string(payload)
|
||||
signStr := strPath + n
|
||||
hmac := crypto.GetHMAC(
|
||||
crypto.HashSHA512_384,
|
||||
[]byte(signStr),
|
||||
[]byte(b.API.Credentials.Secret),
|
||||
)
|
||||
headers["bfx-signature"] = crypto.HexEncodeToString(hmac)
|
||||
// This is done in a weird way because bitfinex doesn't accept unixnano
|
||||
n := strconv.FormatInt(int64(b.Requester.GetNonce(false))*1e9, 10)
|
||||
headers := make(map[string]string)
|
||||
headers["Content-Type"] = "application/json"
|
||||
headers["Accept"] = "application/json"
|
||||
headers["bfx-apikey"] = b.API.Credentials.Key
|
||||
headers["bfx-nonce"] = n
|
||||
strPath := "/api" + bitfinexAPIVersion2 + path + string(payload)
|
||||
signStr := strPath + n
|
||||
hmac := crypto.GetHMAC(
|
||||
crypto.HashSHA512_384,
|
||||
[]byte(signStr),
|
||||
[]byte(b.API.Credentials.Secret),
|
||||
)
|
||||
headers["bfx-signature"] = crypto.HexEncodeToString(hmac)
|
||||
|
||||
return b.SendPayload(context.Background(), &request.Item{
|
||||
Method: method,
|
||||
Path: ePoint + bitfinexAPIVersion2 + path,
|
||||
Headers: headers,
|
||||
Body: body,
|
||||
Result: result,
|
||||
AuthRequest: true,
|
||||
NonceEnabled: true,
|
||||
Verbose: b.Verbose,
|
||||
HTTPDebugging: b.HTTPDebugging,
|
||||
HTTPRecording: b.HTTPRecording,
|
||||
Endpoint: endpoint,
|
||||
return &request.Item{
|
||||
Method: method,
|
||||
Path: ePoint + bitfinexAPIVersion2 + path,
|
||||
Headers: headers,
|
||||
Body: body,
|
||||
Result: result,
|
||||
AuthRequest: true,
|
||||
NonceEnabled: true,
|
||||
Verbose: b.Verbose,
|
||||
HTTPDebugging: b.HTTPDebugging,
|
||||
HTTPRecording: b.HTTPRecording,
|
||||
}, nil
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user