diff --git a/cli/packages/api/api.go b/cli/packages/api/api.go index 37bd5f2995..60cc7d07c0 100644 --- a/cli/packages/api/api.go +++ b/cli/packages/api/api.go @@ -114,6 +114,7 @@ func CallGetSecretsV2(httpClient *resty.Client, request GetEncryptedSecretsV2Req SetHeader("User-Agent", USER_AGENT). SetQueryParam("environment", request.Environment). SetQueryParam("workspaceId", request.WorkspaceId). + SetQueryParam("tagSlugs", request.TagSlugs). Get(fmt.Sprintf("%v/v2/secrets", config.INFISICAL_URL)) if err != nil { @@ -154,13 +155,12 @@ func CallIsAuthenticated(httpClient *resty.Client) bool { SetHeader("User-Agent", USER_AGENT). Post(fmt.Sprintf("%v/v1/auth/checkAuth", config.INFISICAL_URL)) - log.Debugln(fmt.Errorf("CallIsAuthenticated: Unsuccessful response: [response=%v]", response)) - if err != nil { return false } if response.IsError() { + log.Debugln(fmt.Errorf("CallIsAuthenticated: Unsuccessful response: [response=%v]", response)) return false } @@ -175,8 +175,6 @@ func CallGetAccessibleEnvironments(httpClient *resty.Client, request GetAccessib SetHeader("User-Agent", USER_AGENT). Get(fmt.Sprintf("%v/v2/workspace/%s/environments", config.INFISICAL_URL, request.WorkspaceId)) - log.Debugln(fmt.Errorf("CallGetAccessibleEnvironments: Unsuccessful response: [response=%v]", response)) - if err != nil { return GetAccessibleEnvironmentsResponse{}, err } diff --git a/cli/packages/api/model.go b/cli/packages/api/model.go index 22f3e4c4a4..7c9fbbf4e5 100644 --- a/cli/packages/api/model.go +++ b/cli/packages/api/model.go @@ -197,6 +197,7 @@ type GetSecretsByWorkspaceIdAndEnvironmentRequest struct { type GetEncryptedSecretsV2Request struct { Environment string `json:"environment"` WorkspaceId string `json:"workspaceId"` + TagSlugs string `json:"tagSlugs"` } type GetEncryptedSecretsV2Response struct { diff --git a/cli/packages/cmd/export.go b/cli/packages/cmd/export.go index c2963f6bdf..d1e72ff2d1 100644 --- a/cli/packages/cmd/export.go +++ b/cli/packages/cmd/export.go @@ -61,7 +61,12 @@ var exportCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: envName, InfisicalToken: infisicalToken}) + tagSlugs, err := cmd.Flags().GetString("tags") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: envName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs}) if err != nil { util.HandleError(err, "Unable to fetch secrets") } @@ -97,6 +102,7 @@ func init() { exportCmd.Flags().StringP("format", "f", "dotenv", "Set the format of the output file (dotenv, json, csv)") exportCmd.Flags().Bool("secret-overriding", true, "Prioritizes personal secrets, if any, with the same name over shared secrets") exportCmd.Flags().String("token", "", "Fetch secrets using the Infisical Token") + exportCmd.Flags().StringP("tags", "t", "", "filter secrets by tag slugs") } // Format according to the format flag diff --git a/cli/packages/cmd/run.go b/cli/packages/cmd/run.go index 265da0aba5..70c6e627d2 100644 --- a/cli/packages/cmd/run.go +++ b/cli/packages/cmd/run.go @@ -74,7 +74,12 @@ var runCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: envName, InfisicalToken: infisicalToken}) + tagSlugs, err := cmd.Flags().GetString("tags") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: envName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs}) if err != nil { util.HandleError(err, "Could not fetch secrets", "If you are using a service token to fetch secrets, please ensure it is valid") @@ -148,6 +153,7 @@ func init() { runCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets") runCmd.Flags().Bool("secret-overriding", true, "Prioritizes personal secrets, if any, with the same name over shared secrets") runCmd.Flags().StringP("command", "c", "", "chained commands to execute (e.g. \"npm install && npm run dev; echo ...\")") + runCmd.Flags().StringP("tags", "t", "", "filter secrets by tag slugs ") } // Will execute a single command and pass in the given secrets into the process diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go index a00740809e..823505d7db 100644 --- a/cli/packages/cmd/secrets.go +++ b/cli/packages/cmd/secrets.go @@ -46,7 +46,12 @@ var secretsCmd = &cobra.Command{ util.HandleError(err) } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken}) + tagSlugs, err := cmd.Flags().GetString("tags") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs}) if err != nil { util.HandleError(err) } @@ -342,7 +347,12 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken}) + tagSlugs, err := cmd.Flags().GetString("tags") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs}) if err != nil { util.HandleError(err, "To fetch all secrets") } @@ -385,7 +395,12 @@ func generateExampleEnv(cmd *cobra.Command, args []string) { util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken}) + tagSlugs, err := cmd.Flags().GetString("tags") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs}) if err != nil { util.HandleError(err, "To fetch all secrets") } @@ -567,5 +582,6 @@ func init() { secretsCmd.Flags().String("token", "", "Fetch secrets using the Infisical Token") secretsCmd.PersistentFlags().String("env", "dev", "Used to select the environment name on which actions should be taken on") secretsCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets") + secretsCmd.PersistentFlags().StringP("tags", "t", "", "filter secrets by tag slugs") rootCmd.AddCommand(secretsCmd) } diff --git a/cli/packages/models/cli.go b/cli/packages/models/cli.go index 3ffc1cc20f..1f86d6c8c2 100644 --- a/cli/packages/models/cli.go +++ b/cli/packages/models/cli.go @@ -51,4 +51,5 @@ type SymmetricEncryptionResult struct { type GetAllSecretsParameters struct { Environment string InfisicalToken string + TagSlugs string } diff --git a/cli/packages/util/secrets.go b/cli/packages/util/secrets.go index 5b4cd2480c..72f703b463 100644 --- a/cli/packages/util/secrets.go +++ b/cli/packages/util/secrets.go @@ -62,7 +62,7 @@ func GetPlainTextSecretsViaServiceToken(fullServiceToken string) ([]models.Singl return plainTextSecrets, nil } -func GetPlainTextSecretsViaJTW(JTWToken string, receiversPrivateKey string, workspaceId string, environmentName string) ([]models.SingleEnvironmentVariable, error) { +func GetPlainTextSecretsViaJTW(JTWToken string, receiversPrivateKey string, workspaceId string, environmentName string, tagSlugs string) ([]models.SingleEnvironmentVariable, error) { httpClient := resty.New() httpClient.SetAuthToken(JTWToken). SetHeader("Accept", "application/json") @@ -85,6 +85,7 @@ func GetPlainTextSecretsViaJTW(JTWToken string, receiversPrivateKey string, work encryptedSecrets, err := api.CallGetSecretsV2(httpClient, api.GetEncryptedSecretsV2Request{ WorkspaceId: workspaceId, Environment: environmentName, + TagSlugs: tagSlugs, }) if err != nil { @@ -136,7 +137,7 @@ func GetAllEnvironmentVariables(params models.GetAllSecretsParameters) ([]models return nil, fmt.Errorf("unable to validate environment name because [err=%s]", err) } - secretsToReturn, errorToReturn = GetPlainTextSecretsViaJTW(loggedInUserDetails.UserCredentials.JTWToken, loggedInUserDetails.UserCredentials.PrivateKey, workspaceFile.WorkspaceId, params.Environment) + secretsToReturn, errorToReturn = GetPlainTextSecretsViaJTW(loggedInUserDetails.UserCredentials.JTWToken, loggedInUserDetails.UserCredentials.PrivateKey, workspaceFile.WorkspaceId, params.Environment, params.TagSlugs) log.Debugf("GetAllEnvironmentVariables: Trying to fetch secrets JTW token [err=%s]", errorToReturn) backupSecretsEncryptionKey := []byte(loggedInUserDetails.UserCredentials.PrivateKey)[0:32]