diff --git a/cmd/ppass/ppass.go b/cmd/ppass/ppass.go index a33af0e..7713d29 100644 --- a/cmd/ppass/ppass.go +++ b/cmd/ppass/ppass.go @@ -17,6 +17,20 @@ var ( rpcClient *RPC.Client ) + +func parseSingleArgWithOptionalVault(args []string) (vault string, arg string){ + if len(args) == 1 { + vault = "root" + arg = args[0] + } else { + vault = args[0] + arg = args[1] + } + + return vault, arg +} + + // Create the root command var rootCmd = &cobra.Command{ Use: "ppass", @@ -25,11 +39,17 @@ var rootCmd = &cobra.Command{ // Create the 'list' subcommand var listCmd = &cobra.Command{ - Use: "list", + Use: "list [vault]", Short: "List all passwords", + Args: cobra.RangeArgs(0, 1), Run: func(cmd *cobra.Command, args []string) { - var names []string vault := "root" + + if len(args) == 1 { + vault = args[0] + } + + var names []string err := rpcClient.Call("Query.GetAllNames", &vault, &names) if err != nil { @@ -46,12 +66,12 @@ var listCmd = &cobra.Command{ var generateCmd = &cobra.Command{ Use: "generate", Short: "Generate a Password", - Args: cobra.ExactArgs(1), + Args: cobra.RangeArgs(1, 2), Run: func(cmd *cobra.Command, args []string) { - serviceName := args[0] + vault, serviceName := parseSingleArgWithOptionalVault(args) var password *crypto.Password - np := rpc.VaultService{ Vault: "root", Service: serviceName } + np := rpc.VaultService{ Vault: vault, Service: serviceName } err := rpcClient.Call("Query.Generate", &np, &password) if err != nil { @@ -65,12 +85,12 @@ var generateCmd = &cobra.Command{ var showCmd = &cobra.Command{ Use: "show", Short: "show a Password", - Args: cobra.ExactArgs(1), + Args: cobra.RangeArgs(1, 2), Run: func(cmd *cobra.Command, args []string) { - serviceName := args[0] + vault, serviceName := parseSingleArgWithOptionalVault(args) var password *crypto.Password - np := rpc.VaultService{ Vault: "root", Service: serviceName } + np := rpc.VaultService{ Vault: vault, Service: serviceName } err := rpcClient.Call("Query.Get", &np, &password) if err != nil { @@ -172,16 +192,7 @@ var addPeerCmd = &cobra.Command{ Short: "add a peer", Args: cobra.RangeArgs(1, 2), Run: func(cmd *cobra.Command, args []string) { - var vault string - var peerString string - - if len(args) == 1 { - vault = "root" - peerString = args[0] - } else { - vault = args[0] - peerString = args[1] - } + vault, peerString := parseSingleArgWithOptionalVault(args) var success *bool np := rpc.VaultPeer{ Vault: vault, Peer: peerString } @@ -205,16 +216,7 @@ var removePeerCmd = &cobra.Command{ Short: "remove a peer", Args: cobra.RangeArgs(1, 2), Run: func(cmd *cobra.Command, args []string) { - var vault string - var peerString string - - if len(args) == 1 { - vault = "root" - peerString = args[0] - } else { - vault = args[0] - peerString = args[1] - } + vault, peerString := parseSingleArgWithOptionalVault(args) var success *bool np := rpc.VaultPeer{ Vault: vault, Peer: peerString } @@ -238,16 +240,7 @@ var deleteCmd = &cobra.Command{ Short: "delete a Password", Args: cobra.RangeArgs(1, 2), Run: func(cmd *cobra.Command, args []string) { - var vault string - var serviceName string - - if len(args) == 1 { - vault = "root" - serviceName = args[0] - } else { - vault = args[0] - serviceName = args[1] - } + vault, serviceName := parseSingleArgWithOptionalVault(args) var success *bool np := rpc.VaultService{ Vault: vault, Service: serviceName }