From d4125443a3203e455e3a80fb5e9d9fb9610a0236 Mon Sep 17 00:00:00 2001 From: carlosmonastyrski Date: Wed, 26 Mar 2025 18:48:37 -0300 Subject: [PATCH 1/3] Add file support to secrets set key=value command --- cli/packages/cmd/secrets.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go index 8e9f5d63b..ad0fdf055 100644 --- a/cli/packages/cmd/secrets.go +++ b/cli/packages/cmd/secrets.go @@ -5,6 +5,7 @@ package cmd import ( "fmt" + "os" "regexp" "sort" "strings" @@ -139,7 +140,7 @@ var secretsGenerateExampleEnvCmd = &cobra.Command{ } var secretsSetCmd = &cobra.Command{ - Example: `secrets set ..."`, + Example: `secrets set ..."`, Short: "Used set secrets", Use: "set [secrets]", DisableFlagsInUseLine: true, @@ -185,6 +186,30 @@ var secretsSetCmd = &cobra.Command{ util.HandleError(err, "Unable to parse secret type") } + processedArgs := []string{} + for _, arg := range args { + splitKeyValue := strings.SplitN(arg, "=", 2) + if len(splitKeyValue) != 2 { + util.HandleError(fmt.Errorf("invalid argument format: %s. Expected format: key=value or key=@filepath", arg), "") + } + + key := splitKeyValue[0] + value := splitKeyValue[1] + + if strings.HasPrefix(value, "\\@") { + value = "@" + value[2:] + } else if strings.HasPrefix(value, "@") { + filePath := strings.TrimPrefix(value, "@") + content, err := os.ReadFile(filePath) + if err != nil { + util.HandleError(err, fmt.Sprintf("Unable to read file %s", filePath)) + } + value = string(content) + } + + processedArgs = append(processedArgs, fmt.Sprintf("%s=%s", key, value)) + } + file, err := cmd.Flags().GetString("file") if err != nil { util.HandleError(err, "Unable to parse flag") @@ -216,7 +241,7 @@ var secretsSetCmd = &cobra.Command{ util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again") } - secretOperations, err = util.SetRawSecrets(args, secretType, environmentName, secretsPath, projectId, &models.TokenDetails{ + secretOperations, err = util.SetRawSecrets(processedArgs, secretType, environmentName, secretsPath, projectId, &models.TokenDetails{ Type: "", Token: loggedInUserDetails.UserCredentials.JTWToken, }, file) From 977c02357b5fdf39fd07e36817448a26adebb3c6 Mon Sep 17 00:00:00 2001 From: carlosmonastyrski Date: Wed, 26 Mar 2025 19:04:07 -0300 Subject: [PATCH 2/3] Update docs of secrets set command --- docs/cli/commands/secrets.mdx | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx index d1f4baa9f..bab988850 100644 --- a/docs/cli/commands/secrets.mdx +++ b/docs/cli/commands/secrets.mdx @@ -186,12 +186,28 @@ This command allows you to set or update secrets in your environment. If the sec If the secret key does not exist, a new secret will be created using both the key and value provided. ```bash -$ infisical secrets set ... +$ infisical secrets set ... ## Example -$ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jebhfbwe +$ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jebhfbwe SECRET_PEM_KEY=@secret.pem ``` + + When setting secret values: + - Use `secretName=@path/to/file` to load the secret value from a file + - Use `secretName=\@value` if you need the literal '@' character at the beginning of your value + + Example: + + ```bash + # Set a secret with the value loaded from a certificate file + $ secrets set CERTIFICATE=@/path/to/certificate.pem + + # Set a secret with the literal value "@example.com" + $ secrets set email=\@example.com + ``` + + ### Flags From a4a162ab65feff9d1495cf94ec9b3c5f80ad5273 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Thu, 27 Mar 2025 17:33:38 +0000 Subject: [PATCH 3/3] docs: small docs fix --- docs/cli/commands/secrets.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx index bab988850..1bb575ebd 100644 --- a/docs/cli/commands/secrets.mdx +++ b/docs/cli/commands/secrets.mdx @@ -204,7 +204,7 @@ $ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jeb $ secrets set CERTIFICATE=@/path/to/certificate.pem # Set a secret with the literal value "@example.com" - $ secrets set email=\@example.com + $ secrets set email="\@example.com" ```