-
Notifications
You must be signed in to change notification settings - Fork 117
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add permissioned keys cli #2644
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
package cli | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
|
||
"github.com/spf13/cast" | ||
"github.com/spf13/cobra" | ||
|
||
"github.com/cosmos/cosmos-sdk/client" | ||
"github.com/dydxprotocol/v4-chain/protocol/x/accountplus/types" | ||
) | ||
|
||
// GetQueryCmd returns the cli query commands for this module. | ||
func GetQueryCmd() *cobra.Command { | ||
// Group x/accountplus queries under a subcommand. | ||
cmd := &cobra.Command{ | ||
Use: types.ModuleName, | ||
Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), | ||
DisableFlagParsing: true, | ||
SuggestionsMinimumDistance: 2, | ||
RunE: client.ValidateCmd, | ||
} | ||
|
||
cmd.AddCommand( | ||
CmdQueryParam(), | ||
CmdQueryGetAuthenticator(), | ||
CmdQueryGetAllAuthenticators(), | ||
) | ||
return cmd | ||
} | ||
|
||
func CmdQueryParam() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: "param", | ||
Short: "Get param", | ||
Args: cobra.ExactArgs(0), | ||
RunE: func(cmd *cobra.Command, args []string) error { | ||
clientCtx, err := client.GetClientQueryContext(cmd) | ||
if err != nil { | ||
return err | ||
} | ||
queryClient := types.NewQueryClient(clientCtx) | ||
res, err := queryClient.Params( | ||
context.Background(), | ||
&types.QueryParamsRequest{}, | ||
) | ||
if err != nil { | ||
return err | ||
} | ||
return clientCtx.PrintProto(res) | ||
}, | ||
} | ||
return cmd | ||
} | ||
|
||
func CmdQueryGetAuthenticator() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: "get-authenticator [account] [authenticator_id]", | ||
Short: "Get authenticator", | ||
Args: cobra.ExactArgs(3), | ||
RunE: func(cmd *cobra.Command, args []string) error { | ||
clientCtx, err := client.GetClientQueryContext(cmd) | ||
if err != nil { | ||
return err | ||
} | ||
id, err := cast.ToUint64E(args[1]) | ||
if err != nil { | ||
return err | ||
} | ||
queryClient := types.NewQueryClient(clientCtx) | ||
res, err := queryClient.GetAuthenticator( | ||
context.Background(), | ||
&types.GetAuthenticatorRequest{ | ||
Account: args[0], | ||
AuthenticatorId: id, | ||
}, | ||
) | ||
if err != nil { | ||
return err | ||
} | ||
return clientCtx.PrintProto(res) | ||
}, | ||
} | ||
return cmd | ||
} | ||
|
||
func CmdQueryGetAllAuthenticators() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: "get-all-authenticators [account]", | ||
Short: "Get all authenticators for an account", | ||
Args: cobra.ExactArgs(1), | ||
RunE: func(cmd *cobra.Command, args []string) error { | ||
clientCtx, err := client.GetClientQueryContext(cmd) | ||
if err != nil { | ||
return err | ||
} | ||
queryClient := types.NewQueryClient(clientCtx) | ||
res, err := queryClient.GetAuthenticators( | ||
context.Background(), | ||
&types.GetAuthenticatorsRequest{ | ||
Account: args[0], | ||
}, | ||
) | ||
if err != nil { | ||
return err | ||
} | ||
return clientCtx.PrintProto(res) | ||
}, | ||
} | ||
return cmd | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add pagination support for get-all-authenticators command For accounts with many authenticators, the response should be paginated to prevent overwhelming responses. Add pagination flags and logic: func CmdQueryGetAllAuthenticators() *cobra.Command {
cmd := &cobra.Command{
Use: "get-all-authenticators [account]",
Short: "Get all authenticators for an account",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
if err != nil {
return err
}
+ pageReq, err := client.ReadPageRequest(cmd.Flags())
+ if err != nil {
+ return err
+ }
queryClient := types.NewQueryClient(clientCtx)
res, err := queryClient.GetAuthenticators(
context.Background(),
&types.GetAuthenticatorsRequest{
Account: args[0],
+ Pagination: pageReq,
},
)
if err != nil {
return err
}
return clientCtx.PrintProto(res)
},
}
+ flags.AddPaginationFlagsToCmd(cmd, "authenticators")
return cmd
}
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package cli | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/cosmos/cosmos-sdk/client" | ||
"github.com/cosmos/cosmos-sdk/client/flags" | ||
"github.com/cosmos/cosmos-sdk/client/tx" | ||
"github.com/dydxprotocol/v4-chain/protocol/x/accountplus/types" | ||
"github.com/spf13/cast" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
// GetTxCmd returns the transaction commands for this module. | ||
func GetTxCmd() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: types.ModuleName, | ||
Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), | ||
DisableFlagParsing: true, | ||
SuggestionsMinimumDistance: 2, | ||
RunE: client.ValidateCmd, | ||
} | ||
cmd.AddCommand(CmdAddAuthenticator()) | ||
cmd.AddCommand(CmdRemoveAuthenticator()) | ||
return cmd | ||
} | ||
|
||
func CmdAddAuthenticator() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: "add-authenticator account authenticator_type data", | ||
Short: "Registers an authenticator", | ||
Args: cobra.ExactArgs(3), | ||
RunE: func(cmd *cobra.Command, args []string) error { | ||
clientCtx, err := client.GetClientTxContext(cmd) | ||
if err != nil { | ||
return err | ||
} | ||
msg := types.MsgAddAuthenticator{ | ||
Sender: args[0], | ||
AuthenticatorType: args[1], | ||
Data: []byte(args[2]), | ||
} | ||
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) | ||
}, | ||
} | ||
flags.AddTxFlagsToCmd(cmd) | ||
return cmd | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add input validation for authenticator_type and data parameters The command accepts raw input for authenticator_type and data without validation. This could lead to security issues if malformed or malicious data is provided. Consider:
func CmdAddAuthenticator() *cobra.Command {
cmd := &cobra.Command{
Use: "add-authenticator account authenticator_type data",
- Short: "Registers an authenticator",
+ Short: "Registers an authenticator with the specified type and data",
+ Long: `Registers an authenticator for an account.
+Supported authenticator types: [list supported types]
+Data format: [specify format requirements]`,
Args: cobra.ExactArgs(3),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
}
+ // Validate authenticator type
+ if !types.IsValidAuthenticatorType(args[1]) {
+ return fmt.Errorf("invalid authenticator type: %s", args[1])
+ }
+ // Validate data format and size
+ if err := types.ValidateAuthenticatorData(args[2]); err != nil {
+ return fmt.Errorf("invalid authenticator data: %v", err)
+ }
msg := types.MsgAddAuthenticator{
Sender: args[0],
AuthenticatorType: args[1],
|
||
|
||
func CmdRemoveAuthenticator() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: "remove-authenticator [sender] [authenticator_id]", | ||
Short: "Removes an authenticator", | ||
Args: cobra.ExactArgs(2), | ||
RunE: func(cmd *cobra.Command, args []string) error { | ||
clientCtx, err := client.GetClientTxContext(cmd) | ||
if err != nil { | ||
return err | ||
} | ||
id, err := cast.ToUint64E(args[1]) | ||
if err != nil { | ||
return err | ||
} | ||
msg := types.MsgRemoveAuthenticator{ | ||
Sender: args[0], | ||
Id: id, | ||
} | ||
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) | ||
}, | ||
} | ||
flags.AddTxFlagsToCmd(cmd) | ||
return cmd | ||
} | ||
Comment on lines
+50
to
+73
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add confirmation prompt for authenticator removal Removing an authenticator is a sensitive operation that should require confirmation to prevent accidental removals. Add a confirmation prompt using the SDK's input package: func CmdRemoveAuthenticator() *cobra.Command {
cmd := &cobra.Command{
Use: "remove-authenticator [sender] [authenticator_id]",
- Short: "Removes an authenticator",
+ Short: "Removes an authenticator (requires confirmation)",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
}
id, err := cast.ToUint64E(args[1])
if err != nil {
return err
}
+ buf := bufio.NewReader(cmd.InOrStdin())
+ prompt := fmt.Sprintf("Are you sure you want to remove authenticator %d? (y/N): ", id)
+ if !input.GetConfirmation(prompt, buf) {
+ return fmt.Errorf("operation cancelled")
+ }
msg := types.MsgRemoveAuthenticator{
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix argument count mismatch in get-authenticator command
The command's
Use
string indicates it needs 2 arguments, butArgs: cobra.ExactArgs(3)
requires 3 arguments.Fix the argument count:
📝 Committable suggestion