From 2fbd6abe23d9352b6ac7488b6560e7c3c17cd777 Mon Sep 17 00:00:00 2001 From: Shibly Meeran Date: Wed, 6 Mar 2024 16:59:38 +0530 Subject: [PATCH] adding support for multi-query env search --- cli/internal/commands/cmdenv/env.go | 18 +++++++++-------- cli/internal/commands/cmdvault/access.go | 18 +++++++++++------ cli/internal/commands/cmdvault/commons.go | 24 ++++++++++++----------- cli/internal/commands/cmdvault/new.go | 9 ++++++--- 4 files changed, 41 insertions(+), 28 deletions(-) diff --git a/cli/internal/commands/cmdenv/env.go b/cli/internal/commands/cmdenv/env.go index 9abcc44..c5eddb5 100644 --- a/cli/internal/commands/cmdenv/env.go +++ b/cli/internal/commands/cmdenv/env.go @@ -185,16 +185,18 @@ func envListSearchCommand() *cobra.Command { if err != nil { utils.ExitOnError(err) } - query := cmd.Flag(EnvSearchFlag.Name).Value.String() - var envs []*environments.Environment - if query != "" { - envs, err = profile.SearchEnvs(query) - } else { - envs, err = profile.ListEnvs() - } + queries, err := cmd.Flags().GetStringSlice(EnvSearchFlag.Name) if err != nil { utils.ExitOnError(err) } + var envs []*environments.Environment + for _, query := range queries { + result, err := profile.SearchEnvs(query) + if err != nil { + utils.ExitOnError(err) + } + envs = append(envs, result...) + } for _, env := range envs { utils.ShowEnv(*env, false, false) fmt.Println() @@ -202,7 +204,7 @@ func envListSearchCommand() *cobra.Command { utils.SafeExit() }, } - envListSearchCmd.Flags().StringP(EnvSearchFlag.Name, EnvSearchFlag.Shorthand, "", EnvSearchFlag.Usage) + envListSearchCmd.Flags().StringSliceP(EnvSearchFlag.Name, EnvSearchFlag.Shorthand, []string{}, EnvSearchFlag.Usage) return envListSearchCmd } diff --git a/cli/internal/commands/cmdvault/access.go b/cli/internal/commands/cmdvault/access.go index c5722fa..47aa8f4 100644 --- a/cli/internal/commands/cmdvault/access.go +++ b/cli/internal/commands/cmdvault/access.go @@ -46,9 +46,12 @@ func vaultAccessAddCommand() *cobra.Command { if err != nil { utils.ExitOnError(err) } - query := cmd.Flag(cmdenv.EnvSearchFlag.Name).Value.String() + queries, err := cmd.Flags().GetStringSlice(cmdenv.EnvSearchFlag.Name) + if err != nil { + utils.ExitOnError(err) + } selfEnv, _ := cmd.Flags().GetBool(cmdenv.EnvSelfFlag.Name) - publicKeys, _, err := getPublicKeys(publicKeyStrings, query, selfEnv) + publicKeys, _, err := getPublicKeys(publicKeyStrings, queries, selfEnv) if err != nil { utils.ExitOnError(err) } @@ -71,7 +74,7 @@ func vaultAccessAddCommand() *cobra.Command { }, } vaultAccessAddCmd.Flags().StringSliceP(vaultAccessPublicKeysFlag.Name, vaultAccessPublicKeysFlag.Shorthand, []string{}, vaultAccessPublicKeysFlag.Usage) - vaultAccessAddCmd.Flags().StringP(cmdenv.EnvSearchFlag.Name, cmdenv.EnvSearchFlag.Shorthand, "", cmdenv.EnvSearchFlag.Usage) + vaultAccessAddCmd.Flags().StringSliceP(cmdenv.EnvSearchFlag.Name, cmdenv.EnvSearchFlag.Shorthand, []string{}, cmdenv.EnvSearchFlag.Usage) vaultAccessAddCmd.Flags().BoolP(cmdenv.EnvSelfFlag.Name, cmdenv.EnvSelfFlag.Shorthand, false, cmdenv.EnvSelfFlag.Usage) return vaultAccessAddCmd } @@ -90,9 +93,12 @@ func vaultAccessRemoveCommand() *cobra.Command { if err != nil { utils.ExitOnError(err) } - query := cmd.Flag(cmdenv.EnvSearchFlag.Name).Value.String() + queries, err := cmd.Flags().GetStringSlice(cmdenv.EnvSearchFlag.Name) + if err != nil { + utils.ExitOnError(err) + } selfEnv, _ := cmd.Flags().GetBool(cmdenv.EnvSelfFlag.Name) - publicKeys, _, err := getPublicKeys(publicKeyStrings, query, selfEnv) + publicKeys, _, err := getPublicKeys(publicKeyStrings, queries, selfEnv) if err != nil { utils.ExitOnError(err) } @@ -113,7 +119,7 @@ func vaultAccessRemoveCommand() *cobra.Command { }, } vaultAccessRemoveCmd.Flags().StringSliceP(vaultAccessPublicKeysFlag.Name, vaultAccessPublicKeysFlag.Shorthand, []string{}, vaultAccessPublicKeysFlag.Usage) - vaultAccessRemoveCmd.Flags().StringP(cmdenv.EnvSearchFlag.Name, cmdenv.EnvSearchFlag.Shorthand, "", cmdenv.EnvSearchFlag.Usage) + vaultAccessRemoveCmd.Flags().StringSliceP(cmdenv.EnvSearchFlag.Name, cmdenv.EnvSearchFlag.Shorthand, []string{}, cmdenv.EnvSearchFlag.Usage) vaultAccessRemoveCmd.Flags().BoolP(cmdenv.EnvSelfFlag.Name, cmdenv.EnvSelfFlag.Shorthand, false, cmdenv.EnvSelfFlag.Usage) return vaultAccessRemoveCmd } diff --git a/cli/internal/commands/cmdvault/commons.go b/cli/internal/commands/cmdvault/commons.go index af02cd7..54510f0 100644 --- a/cli/internal/commands/cmdvault/commons.go +++ b/cli/internal/commands/cmdvault/commons.go @@ -18,9 +18,9 @@ func getVault(filePath string) (*vaults.Vault, error) { return vault, err } -func getPublicKeys(pubKeyStrSlice []string, query string, self bool) (publicKeys []*crypto.PublicKey, +func getPublicKeys(pubKeyStrSlice, queries []string, self bool) (publicKeys []*crypto.PublicKey, rootPublicKey *crypto.PublicKey, err error) { - if len(pubKeyStrSlice) == 0 && query == "" && !self { + if len(pubKeyStrSlice) == 0 && len(queries) == 0 && !self { return nil, nil, fmt.Errorf("Specify atleast one of the following flags:\n" + " --" + cmdenv.EnvSearchFlag.Name + "\n" + " --" + vaultAccessPublicKeysFlag.Name + "\n" + @@ -34,23 +34,25 @@ func getPublicKeys(pubKeyStrSlice []string, query string, self bool) (publicKeys publicKeys = append(publicKeys, publicKey) } profile, err := profiles.GetDefaultProfile() - if query != "" { + if len(queries) > 0 { if err != nil { return nil, nil, err } - envs, err := profile.SearchEnvs(query) - if err != nil { - return nil, nil, err - } - for _, env := range envs { - publicKey, err := crypto.PublicKeyFromString(env.PublicKey) + for _, query := range queries { + envs, err := profile.SearchEnvs(query) if err != nil { return nil, nil, err } - publicKeys = append(publicKeys, publicKey) + for _, env := range envs { + publicKey, err := crypto.PublicKeyFromString(env.PublicKey) + if err != nil { + return nil, nil, err + } + publicKeys = append(publicKeys, publicKey) + } } if len(publicKeys) == 0 { - return nil, nil, fmt.Errorf("no matching environments found for search query: " + query) + return nil, nil, fmt.Errorf("no matching environments found for the given search queries") } } if self { diff --git a/cli/internal/commands/cmdvault/new.go b/cli/internal/commands/cmdvault/new.go index 2027778..ca32e61 100644 --- a/cli/internal/commands/cmdvault/new.go +++ b/cli/internal/commands/cmdvault/new.go @@ -42,9 +42,12 @@ func vaultNewCommand() *cobra.Command { if err != nil { utils.ExitOnError(err) } - query := cmd.Flag(cmdenv.EnvSearchFlag.Name).Value.String() + queries, err := cmd.Flags().GetStringSlice(cmdenv.EnvSearchFlag.Name) + if err != nil { + utils.ExitOnError(err) + } shareWithSelf, _ := cmd.Flags().GetBool(cmdenv.EnvSelfFlag.Name) - publicKeys, rootPublicKey, err := getPublicKeys(publicKeyStrings, query, shareWithSelf) + publicKeys, rootPublicKey, err := getPublicKeys(publicKeyStrings, queries, shareWithSelf) if err != nil { utils.ExitOnError(err) } @@ -67,7 +70,7 @@ func vaultNewCommand() *cobra.Command { }, } vaultNewCmd.Flags().StringSliceP(vaultAccessPublicKeysFlag.Name, vaultAccessPublicKeysFlag.Shorthand, []string{}, vaultAccessPublicKeysFlag.Usage) - vaultNewCmd.Flags().StringP(cmdenv.EnvSearchFlag.Name, cmdenv.EnvSearchFlag.Shorthand, "", cmdenv.EnvSearchFlag.Usage) + vaultNewCmd.Flags().StringSliceP(cmdenv.EnvSearchFlag.Name, cmdenv.EnvSearchFlag.Shorthand, []string{}, cmdenv.EnvSearchFlag.Usage) vaultNewCmd.Flags().BoolP(cmdenv.EnvSelfFlag.Name, cmdenv.EnvSelfFlag.Shorthand, false, cmdenv.EnvSelfFlag.Usage) vaultNewCmd.Flags().StringP(vaultK8sFlag.Name, vaultK8sFlag.Shorthand, "", vaultK8sFlag.Usage) vaultNewCmd.Flags().BoolP(vaultEnableHashingFlag.Name, vaultEnableHashingFlag.Shorthand, false, vaultEnableHashingFlag.Usage)