diff --git a/cli/packages/cmd/export.go b/cli/packages/cmd/export.go index 41e170f70..089c407b0 100644 --- a/cli/packages/cmd/export.go +++ b/cli/packages/cmd/export.go @@ -56,7 +56,12 @@ var exportCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(envName) + infisicalToken, err := cmd.Flags().GetString("token") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: envName, InfisicalToken: infisicalToken}) if err != nil { util.HandleError(err, "Unable to fetch secrets") } diff --git a/cli/packages/cmd/run.go b/cli/packages/cmd/run.go index d31981b02..bd1be4300 100644 --- a/cli/packages/cmd/run.go +++ b/cli/packages/cmd/run.go @@ -12,6 +12,7 @@ import ( "strings" "syscall" + "github.com/Infisical/infisical-merge/packages/models" "github.com/Infisical/infisical-merge/packages/util" "github.com/fatih/color" log "github.com/sirupsen/logrus" @@ -58,6 +59,11 @@ var runCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } + infisicalToken, err := cmd.Flags().GetString("token") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + // if !util.IsSecretEnvironmentValid(envName) { // util.PrintMessageAndExit("Invalid environment name passed. Environment names can only be prod, dev, test or staging") // } @@ -72,7 +78,8 @@ var runCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(envName) + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: envName, InfisicalToken: infisicalToken}) + 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") } @@ -140,6 +147,7 @@ var runCmd = &cobra.Command{ func init() { rootCmd.AddCommand(runCmd) + runCmd.Flags().String("token", "", "Fetch secrets using the Infisical Token") runCmd.Flags().StringP("env", "e", "dev", "Set the environment (dev, prod, etc.) from which your secrets should be pulled from") 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") diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go index 060a69a45..c5fb11c1e 100644 --- a/cli/packages/cmd/secrets.go +++ b/cli/packages/cmd/secrets.go @@ -34,12 +34,17 @@ var secretsCmd = &cobra.Command{ util.HandleError(err) } + infisicalToken, err := cmd.Flags().GetString("token") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + shouldExpandSecrets, err := cmd.Flags().GetBool("expand") if err != nil { util.HandleError(err) } - secrets, err := util.GetAllEnvironmentVariables(environmentName) + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken}) if err != nil { util.HandleError(err) } @@ -111,7 +116,7 @@ var secretsSetCmd = &cobra.Command{ plainTextEncryptionKey := crypto.DecryptAsymmetric(encryptedWorkspaceKey, encryptedWorkspaceKeyNonce, encryptedWorkspaceKeySenderPublicKey, currentUsersPrivateKey) // pull current secrets - secrets, err := util.GetAllEnvironmentVariables(environmentName) + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName}) if err != nil { util.HandleError(err, "unable to retrieve secrets") } @@ -267,7 +272,7 @@ var secretsDeleteCmd = &cobra.Command{ util.HandleError(err, "Unable to get local project details") } - secrets, err := util.GetAllEnvironmentVariables(environmentName) + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName}) if err != nil { util.HandleError(err, "Unable to fetch secrets") } @@ -309,30 +314,6 @@ var secretsDeleteCmd = &cobra.Command{ }, } -func init() { - secretsCmd.AddCommand(secretsGetCmd) - secretsGetCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { - util.RequireLogin() - util.RequireLocalWorkspaceFile() - } - - secretsCmd.AddCommand(secretsSetCmd) - secretsSetCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { - util.RequireLogin() - util.RequireLocalWorkspaceFile() - } - - secretsCmd.AddCommand(secretsDeleteCmd) - secretsDeleteCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { - util.RequireLogin() - util.RequireLocalWorkspaceFile() - } - - 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") - rootCmd.AddCommand(secretsCmd) -} - func getSecretsByNames(cmd *cobra.Command, args []string) { environmentName, err := cmd.Flags().GetString("env") if err != nil { @@ -344,7 +325,12 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(environmentName) + infisicalToken, err := cmd.Flags().GetString("token") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken}) if err != nil { util.HandleError(err, "To fetch all secrets") } @@ -380,3 +366,25 @@ func getSecretsByKeys(secrets []models.SingleEnvironmentVariable) map[string]mod return secretMapByName } + +func init() { + secretsGetCmd.Flags().String("token", "", "Fetch secrets using the Infisical Token") + secretsCmd.AddCommand(secretsGetCmd) + + secretsCmd.AddCommand(secretsSetCmd) + secretsSetCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + util.RequireLogin() + util.RequireLocalWorkspaceFile() + } + + secretsCmd.AddCommand(secretsDeleteCmd) + secretsDeleteCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + util.RequireLogin() + util.RequireLocalWorkspaceFile() + } + + 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") + rootCmd.AddCommand(secretsCmd) +} diff --git a/cli/packages/models/cli.go b/cli/packages/models/cli.go index 7bc31cab2..5c40e23f1 100644 --- a/cli/packages/models/cli.go +++ b/cli/packages/models/cli.go @@ -38,3 +38,8 @@ type SymmetricEncryptionResult struct { Nonce []byte AuthTag []byte } + +type GetAllSecretsParameters struct { + Environment string + InfisicalToken string +} diff --git a/cli/packages/util/secrets.go b/cli/packages/util/secrets.go index 1cf8a7ab5..c20bd94e7 100644 --- a/cli/packages/util/secrets.go +++ b/cli/packages/util/secrets.go @@ -97,8 +97,13 @@ func GetPlainTextSecretsViaJTW(JTWToken string, receiversPrivateKey string, work return plainTextSecrets, nil } -func GetAllEnvironmentVariables(envName string) ([]models.SingleEnvironmentVariable, error) { - infisicalToken := os.Getenv(INFISICAL_TOKEN_NAME) +func GetAllEnvironmentVariables(params models.GetAllSecretsParameters) ([]models.SingleEnvironmentVariable, error) { + var infisicalToken string + if params.InfisicalToken == "" { + infisicalToken = os.Getenv(INFISICAL_TOKEN_NAME) + } else { + infisicalToken = params.InfisicalToken + } if infisicalToken == "" { RequireLocalWorkspaceFile() @@ -115,7 +120,7 @@ func GetAllEnvironmentVariables(envName string) ([]models.SingleEnvironmentVaria return nil, err } - secrets, err := GetPlainTextSecretsViaJTW(loggedInUserDetails.UserCredentials.JTWToken, loggedInUserDetails.UserCredentials.PrivateKey, workspaceFile.WorkspaceId, envName) + secrets, err := GetPlainTextSecretsViaJTW(loggedInUserDetails.UserCredentials.JTWToken, loggedInUserDetails.UserCredentials.PrivateKey, workspaceFile.WorkspaceId, params.Environment) return secrets, err } else {