From d8ba54e4b0aa7adf4899828a735062759f71e0fa Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Mon, 28 Nov 2022 16:59:50 -0500 Subject: [PATCH 1/4] feat: add --grpc client option --- client/cmd.go | 12 ++++++++++++ client/flags/flags.go | 2 ++ 2 files changed, 14 insertions(+) diff --git a/client/cmd.go b/client/cmd.go index 6d5435d2c3c0..d5bd034f7520 100644 --- a/client/cmd.go +++ b/client/cmd.go @@ -8,6 +8,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" "github.com/tendermint/tendermint/libs/cli" + "google.golang.org/grpc" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -147,6 +148,17 @@ func ReadPersistentCommandFlags(clientCtx Context, flagSet *pflag.FlagSet) (Cont } } + if clientCtx.GRPCClient == nil || flagSet.Changed(flags.FlagGRPC) { + grpcURI, _ := flagSet.GetString(flags.FlagGRPC) + if grpcURI != "" { + grpcClient, err := grpc.Dial(grpcURI) + if err != nil { + return Context{}, err + } + clientCtx = clientCtx.WithGRPCClient(grpcClient) + } + } + return clientCtx, nil } diff --git a/client/flags/flags.go b/client/flags/flags.go index 80e1eab8ea43..ed0051213681 100644 --- a/client/flags/flags.go +++ b/client/flags/flags.go @@ -45,6 +45,7 @@ const ( FlagUseLedger = "ledger" FlagChainID = "chain-id" FlagNode = "node" + FlagGRPC = "grpc" FlagHeight = "height" FlagGasAdjustment = "gas-adjustment" FlagFrom = "from" @@ -92,6 +93,7 @@ var LineBreak = &cobra.Command{Run: func(*cobra.Command, []string) {}} // AddQueryFlagsToCmd adds common flags to a module query command. func AddQueryFlagsToCmd(cmd *cobra.Command) { cmd.Flags().String(FlagNode, "tcp://localhost:26657", ": to Tendermint RPC interface for this chain") + cmd.Flags().String(FlagGRPC, "", "URL of the gRPC endpoint for this chain") cmd.Flags().Int64(FlagHeight, 0, "Use a specific height to query state at (this can error if the node is pruning state)") cmd.Flags().StringP(FlagOutput, "o", "text", "Output format (text|json)") From 3c1db4d21485876347f106ffa4a41459f1a9c940 Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Mon, 28 Nov 2022 17:20:33 -0500 Subject: [PATCH 2/4] updates --- client/cmd.go | 10 +++++++++- client/flags/flags.go | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/client/cmd.go b/client/cmd.go index d5bd034f7520..6fc0c3331f9c 100644 --- a/client/cmd.go +++ b/client/cmd.go @@ -9,6 +9,7 @@ import ( "github.com/spf13/pflag" "github.com/tendermint/tendermint/libs/cli" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -151,7 +152,14 @@ func ReadPersistentCommandFlags(clientCtx Context, flagSet *pflag.FlagSet) (Cont if clientCtx.GRPCClient == nil || flagSet.Changed(flags.FlagGRPC) { grpcURI, _ := flagSet.GetString(flags.FlagGRPC) if grpcURI != "" { - grpcClient, err := grpc.Dial(grpcURI) + var dialOpts []grpc.DialOption + + useInsecure, _ := flagSet.GetBool(flags.FlagGRPCInsecure) + if useInsecure { + dialOpts = append(dialOpts, grpc.WithTransportCredentials(insecure.NewCredentials())) + } + + grpcClient, err := grpc.Dial(grpcURI, dialOpts...) if err != nil { return Context{}, err } diff --git a/client/flags/flags.go b/client/flags/flags.go index ed0051213681..44d25cf4c455 100644 --- a/client/flags/flags.go +++ b/client/flags/flags.go @@ -46,6 +46,7 @@ const ( FlagChainID = "chain-id" FlagNode = "node" FlagGRPC = "grpc" + FlagGRPCInsecure = "grpc-insecure" FlagHeight = "height" FlagGasAdjustment = "gas-adjustment" FlagFrom = "from" @@ -94,6 +95,7 @@ var LineBreak = &cobra.Command{Run: func(*cobra.Command, []string) {}} func AddQueryFlagsToCmd(cmd *cobra.Command) { cmd.Flags().String(FlagNode, "tcp://localhost:26657", ": to Tendermint RPC interface for this chain") cmd.Flags().String(FlagGRPC, "", "URL of the gRPC endpoint for this chain") + cmd.Flags().Bool(FlagGRPCInsecure, false, "allow gRPC over insecure channels") cmd.Flags().Int64(FlagHeight, 0, "Use a specific height to query state at (this can error if the node is pruning state)") cmd.Flags().StringP(FlagOutput, "o", "text", "Output format (text|json)") From 22631352d058ec823bfe628b3f292c013304eb6b Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Tue, 29 Nov 2022 10:38:25 -0500 Subject: [PATCH 3/4] default to TLS credentials --- client/cmd.go | 4 ++++ client/flags/flags.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/client/cmd.go b/client/cmd.go index 6fc0c3331f9c..53e43545bd51 100644 --- a/client/cmd.go +++ b/client/cmd.go @@ -1,6 +1,7 @@ package client import ( + "crypto/tls" "fmt" "strings" @@ -9,6 +10,7 @@ import ( "github.com/spf13/pflag" "github.com/tendermint/tendermint/libs/cli" "google.golang.org/grpc" + "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" "github.com/cosmos/cosmos-sdk/client/flags" @@ -157,6 +159,8 @@ func ReadPersistentCommandFlags(clientCtx Context, flagSet *pflag.FlagSet) (Cont useInsecure, _ := flagSet.GetBool(flags.FlagGRPCInsecure) if useInsecure { dialOpts = append(dialOpts, grpc.WithTransportCredentials(insecure.NewCredentials())) + } else { + dialOpts = append(dialOpts, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{}))) } grpcClient, err := grpc.Dial(grpcURI, dialOpts...) diff --git a/client/flags/flags.go b/client/flags/flags.go index 44d25cf4c455..daa40e85b97e 100644 --- a/client/flags/flags.go +++ b/client/flags/flags.go @@ -94,8 +94,8 @@ var LineBreak = &cobra.Command{Run: func(*cobra.Command, []string) {}} // AddQueryFlagsToCmd adds common flags to a module query command. func AddQueryFlagsToCmd(cmd *cobra.Command) { cmd.Flags().String(FlagNode, "tcp://localhost:26657", ": to Tendermint RPC interface for this chain") - cmd.Flags().String(FlagGRPC, "", "URL of the gRPC endpoint for this chain") - cmd.Flags().Bool(FlagGRPCInsecure, false, "allow gRPC over insecure channels") + cmd.Flags().String(FlagGRPC, "", "the gRPC endpoint to use for this chain") + cmd.Flags().Bool(FlagGRPCInsecure, false, "allow gRPC over insecure channels, if not TLS the server must use TLS") cmd.Flags().Int64(FlagHeight, 0, "Use a specific height to query state at (this can error if the node is pruning state)") cmd.Flags().StringP(FlagOutput, "o", "text", "Output format (text|json)") From 42f5ca2bc621bf77206674a248a89fdd61f611eb Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Tue, 29 Nov 2022 13:10:06 -0500 Subject: [PATCH 4/4] add min version because of gosec lint --- client/cmd.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/cmd.go b/client/cmd.go index 53e43545bd51..8ff09a8f13ac 100644 --- a/client/cmd.go +++ b/client/cmd.go @@ -160,7 +160,9 @@ func ReadPersistentCommandFlags(clientCtx Context, flagSet *pflag.FlagSet) (Cont if useInsecure { dialOpts = append(dialOpts, grpc.WithTransportCredentials(insecure.NewCredentials())) } else { - dialOpts = append(dialOpts, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{}))) + dialOpts = append(dialOpts, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{ + MinVersion: tls.VersionTLS12, + }))) } grpcClient, err := grpc.Dial(grpcURI, dialOpts...)