diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index f4f213279c..0316663d35 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -337,8 +337,26 @@ func splitPath(requestPath string) (path []string) { // Delegates to CommitMultiStore if it implements Queryable func (app *BaseApp) Query(req abci.RequestQuery) (res abci.ResponseQuery) { path := splitPath(req.Path) + if len(path) == 0 { + msg := "no query path provided" + return sdk.ErrUnknownRequest(msg).QueryResult() + } + switch path[0] { // "/app" prefix for special application queries - if len(path) >= 2 && path[0] == "app" { + case "app": + return handleQueryApp(app, path, req) + case "store": + return handleQueryStore(app, path, req) + case "p2p": + return handleQueryP2P(app, path, req) + } + + msg := "unknown query path" + return sdk.ErrUnknownRequest(msg).QueryResult() +} + +func handleQueryApp(app *BaseApp, path []string, req abci.RequestQuery) (res abci.ResponseQuery) { + if len(path) >= 2 { var result sdk.Result switch path[1] { case "simulate": @@ -363,18 +381,24 @@ func (app *BaseApp) Query(req abci.RequestQuery) (res abci.ResponseQuery) { Value: value, } } + msg := "Expected second parameter to be either simulate or version, neither was present" + return sdk.ErrUnknownRequest(msg).QueryResult() +} + +func handleQueryStore(app *BaseApp, path []string, req abci.RequestQuery) (res abci.ResponseQuery) { // "/store" prefix for store queries - if len(path) >= 1 && path[0] == "store" { - queryable, ok := app.cms.(sdk.Queryable) - if !ok { - msg := "multistore doesn't support queries" - return sdk.ErrUnknownRequest(msg).QueryResult() - } - req.Path = "/" + strings.Join(path[1:], "/") - return queryable.Query(req) + queryable, ok := app.cms.(sdk.Queryable) + if !ok { + msg := "multistore doesn't support queries" + return sdk.ErrUnknownRequest(msg).QueryResult() } + req.Path = "/" + strings.Join(path[1:], "/") + return queryable.Query(req) +} + +func handleQueryP2P(app *BaseApp, path []string, req abci.RequestQuery) (res abci.ResponseQuery) { // "/p2p" prefix for p2p queries - if len(path) >= 4 && path[0] == "p2p" { + if len(path) >= 4 { if path[1] == "filter" { if path[2] == "addr" { return app.FilterPeerByAddrPort(path[3]) @@ -384,9 +408,13 @@ func (app *BaseApp) Query(req abci.RequestQuery) (res abci.ResponseQuery) { // NOTE: this changed in tendermint and we didn't notice... return app.FilterPeerByPubKey(path[3]) } + } else { + msg := "Expected second parameter to be filter" + return sdk.ErrUnknownRequest(msg).QueryResult() } } - msg := "unknown query path" + + msg := "Expected path is p2p filter " return sdk.ErrUnknownRequest(msg).QueryResult() } diff --git a/x/ibc/client/cli/relay.go b/x/ibc/client/cli/relay.go index d434ff35a4..1c5a61a18f 100644 --- a/x/ibc/client/cli/relay.go +++ b/x/ibc/client/cli/relay.go @@ -86,6 +86,8 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) { c.loop(fromChainID, fromChainNode, toChainID, toChainNode) } +// This is nolinted as someone is in the process of refactoring this to remove the goto +// nolint: gocyclo func (c relayCommander) loop(fromChainID, fromChainNode, toChainID, toChainNode string) {