gctcli: remove all exchange name client-side validation (#758)

* gctcli: remove all exchange name client-side validation

Since now exchange names can be user-assigned we can no longer have
client-side validation, all exchange name validation must now occur
on the server (it was already doing that).

* engine: add server side exchange name check on some RPCs
This commit is contained in:
Luis Rascão
2021-08-24 00:45:26 +01:00
committed by GitHub
parent a15cbf6651
commit 9bb4348613
7 changed files with 17 additions and 206 deletions

View File

@@ -291,10 +291,6 @@ func enableExchange(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -341,10 +337,6 @@ func disableExchange(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -391,10 +383,6 @@ func getExchangeOTPCode(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -466,10 +454,6 @@ func getExchangeInfo(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -527,10 +511,6 @@ func getTicker(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("pair") {
currencyPair = c.String("pair")
} else {
@@ -643,10 +623,6 @@ func getOrderbook(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("pair") {
currencyPair = c.String("pair")
} else {
@@ -758,10 +734,6 @@ func getAccountInfo(c *cli.Context) error {
assetType = c.Args().Get(1)
}
if !validExchange(exchange) {
return errInvalidExchange
}
if !validAsset(assetType) {
return errInvalidAsset
}
@@ -824,10 +796,6 @@ func getAccountInfoStream(c *cli.Context) error {
assetType = c.Args().Get(1)
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if !validAsset(assetType) {
return errInvalidAsset
}
@@ -898,10 +866,6 @@ func updateAccountInfo(c *cli.Context) error {
assetType = c.Args().Get(1)
}
if !validExchange(exchange) {
return errInvalidExchange
}
if !validAsset(assetType) {
return errInvalidAsset
}
@@ -1274,10 +1238,6 @@ func getOrders(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("asset") {
assetType = c.String("asset")
} else {
@@ -1392,10 +1352,6 @@ func getManagedOrders(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("asset") {
assetType = c.String("asset")
} else {
@@ -1487,10 +1443,6 @@ func getOrder(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("asset") {
assetType = c.String("asset")
} else {
@@ -1607,10 +1559,6 @@ func submitOrder(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("pair") {
currencyPair = c.String("pair")
} else {
@@ -1758,10 +1706,6 @@ func simulateOrder(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("pair") {
currencyPair = c.String("pair")
} else {
@@ -1867,10 +1811,6 @@ func whaleBomb(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("pair") {
currencyPair = c.String("pair")
} else {
@@ -1987,10 +1927,6 @@ func cancelOrder(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("account_id") {
accountID = c.String("account_id")
} else {
@@ -2133,10 +2069,6 @@ func cancelBatchOrders(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("account_id") {
accountID = c.String("account_id")
} else {
@@ -2277,13 +2209,6 @@ func cancelAllOrders(c *cli.Context) error {
exchangeName = c.Args().First()
}
// exchange name is an optional param
if exchangeName != "" {
if !validExchange(exchangeName) {
return errInvalidExchange
}
}
conn, err := setupClient()
if err != nil {
return err
@@ -2318,9 +2243,6 @@ func modifyOrder(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("asset") {
assetType = c.String("asset")
@@ -2488,10 +2410,6 @@ func addEvent(c *cli.Context) error {
return fmt.Errorf("exchange name is required")
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("item") {
item = c.String("item")
} else {
@@ -2658,10 +2576,6 @@ func getCryptocurrencyDepositAddresses(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -2710,10 +2624,6 @@ func getCryptocurrencyDepositAddress(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("cryptocurrency") {
cryptocurrency = c.String("cryptocurrency")
} else if c.Args().Get(1) != "" {
@@ -2796,10 +2706,6 @@ func withdrawCryptocurrencyFunds(c *cli.Context) error {
exchange = c.Args().Get(0)
}
if !validExchange(exchange) {
return errInvalidExchange
}
if c.IsSet("currency") {
cur = c.String("currency")
} else if c.Args().Get(1) != "" {
@@ -2911,10 +2817,6 @@ func withdrawFiatFunds(c *cli.Context) error {
exchange = c.Args().Get(0)
}
if !validExchange(exchange) {
return errInvalidExchange
}
if c.IsSet("currency") {
cur = c.String("currency")
} else if c.Args().Get(1) != "" {
@@ -3380,10 +3282,6 @@ func getOrderbookStream(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("pair") {
pair = c.String("pair")
} else {
@@ -3516,10 +3414,6 @@ func getExchangeOrderbookStream(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -3589,10 +3483,6 @@ func getTickerStream(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
if c.IsSet("pair") {
pair = c.String("pair")
} else {
@@ -3695,10 +3585,6 @@ func getExchangeTickerStream(c *cli.Context) error {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -4330,10 +4216,6 @@ func getHistoricCandles(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var currencyPair string
if c.IsSet("pair") {
currencyPair = c.String("pair")
@@ -4489,10 +4371,6 @@ func getHistoricCandlesExtended(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var currencyPair string
if c.IsSet("pair") {
currencyPair = c.String("pair")
@@ -4668,10 +4546,6 @@ func findMissingSavedCandleIntervals(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var currencyPair string
if c.IsSet("pair") {
currencyPair = c.String("pair")

View File

@@ -382,9 +382,6 @@ func upsertDataHistoryJob(c *cli.Context) error {
if c.IsSet("exchange") {
exchange = c.String("exchange")
}
if !validExchange(exchange) {
return errInvalidExchange
}
if c.IsSet("asset") {
assetType = c.String("asset")

View File

@@ -180,10 +180,6 @@ func enableDisableExchangePair(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return errInvalidExchange
}
if c.IsSet("pairs") {
pairs = c.String("pairs")
} else {
@@ -259,10 +255,6 @@ func getExchangePairs(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return errInvalidExchange
}
if c.IsSet("asset") {
asset = c.String("asset")
} else {
@@ -312,10 +304,6 @@ func enableDisableExchangeAsset(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return errInvalidExchange
}
if c.IsSet("asset") {
asset = c.String("asset")
} else {
@@ -364,10 +352,6 @@ func enableDisableAllExchangePairs(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -400,10 +384,6 @@ func updateExchangeSupportedPairs(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err
@@ -435,10 +415,6 @@ func getExchangeAssets(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return errInvalidExchange
}
conn, err := setupClient()
if err != nil {
return err

View File

@@ -229,10 +229,6 @@ func findMissingSavedTradeIntervals(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var currencyPair string
if c.IsSet("pair") {
currencyPair = c.String("pair")
@@ -324,10 +320,6 @@ func setExchangeTradeProcessing(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var status bool
if c.IsSet("status") {
status = c.Bool("status")
@@ -376,10 +368,6 @@ func getSavedTrades(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var currencyPair string
if c.IsSet("pair") {
currencyPair = c.String("pair")
@@ -475,10 +463,6 @@ func getRecentTrades(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var currencyPair string
if c.IsSet("pair") {
currencyPair = c.String("pair")
@@ -546,10 +530,6 @@ func getHistoricTrades(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var currencyPair string
if c.IsSet("pair") {
currencyPair = c.String("pair")
@@ -668,10 +648,6 @@ func convertSavedTradesToCandles(c *cli.Context) error {
} else {
exchangeName = c.Args().First()
}
if !validExchange(exchangeName) {
return errInvalidExchange
}
var currencyPair string
if c.IsSet("pair") {
currencyPair = c.String("pair")

View File

@@ -4,24 +4,18 @@ import (
"errors"
"strings"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
)
var (
errInvalidPair = errors.New("invalid currency pair supplied")
errInvalidExchange = errors.New("invalid exchange supplied")
errInvalidAsset = errors.New("invalid asset supplied")
errInvalidPair = errors.New("invalid currency pair supplied")
errInvalidAsset = errors.New("invalid asset supplied")
)
func validPair(pair string) bool {
return strings.Contains(pair, pairDelimiter)
}
func validExchange(exch string) bool {
return exchange.IsSupported(exch)
}
func validAsset(i string) bool {
_, err := asset.New(i)
return err == nil

View File

@@ -2,7 +2,6 @@ package main
import (
"context"
"fmt"
"github.com/thrasher-corp/gocryptotrader/gctrpc"
"github.com/urfave/cli/v2"
@@ -107,10 +106,6 @@ func getwebsocketInfo(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return fmt.Errorf("[%s] is not a valid exchange", exchange)
}
conn, err := setupClient()
if err != nil {
return err
@@ -140,10 +135,6 @@ func enableDisableWebsocket(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return fmt.Errorf("[%s] is not a valid exchange", exchange)
}
conn, err := setupClient()
if err != nil {
return err
@@ -172,10 +163,6 @@ func getSubscriptions(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return fmt.Errorf("[%s] is not a valid exchange", exchange)
}
conn, err := setupClient()
if err != nil {
return err
@@ -204,10 +191,6 @@ func setProxy(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return fmt.Errorf("[%s] is not a valid exchange", exchange)
}
var proxy string
if c.IsSet("proxy") {
proxy = c.String("proxy")
@@ -243,10 +226,6 @@ func setURL(c *cli.Context) error {
exchange = c.Args().First()
}
if !validExchange(exchange) {
return fmt.Errorf("[%s] is not a valid exchange", exchange)
}
var url string
if c.IsSet("url") {
url = c.String("url")

View File

@@ -286,6 +286,9 @@ func (s *RPCServer) EnableExchange(_ context.Context, r *gctrpc.GenericExchangeN
// GetExchangeOTPCode retrieves an exchanges OTP code
func (s *RPCServer) GetExchangeOTPCode(_ context.Context, r *gctrpc.GenericExchangeNameRequest) (*gctrpc.GetExchangeOTPResponse, error) {
if exch := s.GetExchangeByName(r.Exchange); exch == nil {
return nil, ErrExchangeNotFound
}
result, err := s.GetExchangeOTPByName(r.Exchange)
return &gctrpc.GetExchangeOTPResponse{OtpCode: result}, err
}
@@ -1864,6 +1867,10 @@ func (s *RPCServer) GetExchangeOrderbookStream(r *gctrpc.GetExchangeOrderbookStr
return errExchangeNameUnset
}
if exch := s.GetExchangeByName(r.Exchange); exch == nil {
return ErrExchangeNotFound
}
pipe, err := orderbook.SubscribeToExchangeOrderbooks(r.Exchange)
if err != nil {
return err
@@ -1916,6 +1923,10 @@ func (s *RPCServer) GetTickerStream(r *gctrpc.GetTickerStreamRequest, stream gct
return errExchangeNameUnset
}
if exch := s.GetExchangeByName(r.Exchange); exch == nil {
return ErrExchangeNotFound
}
a, err := asset.New(r.AssetType)
if err != nil {
return err
@@ -1979,6 +1990,10 @@ func (s *RPCServer) GetExchangeTickerStream(r *gctrpc.GetExchangeTickerStreamReq
return errExchangeNameUnset
}
if exch := s.GetExchangeByName(r.Exchange); exch == nil {
return ErrExchangeNotFound
}
pipe, err := ticker.SubscribeToExchangeTickers(r.Exchange)
if err != nil {
return err