diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go
index 305a1f0fd..649d9fa3d 100644
--- a/cli/packages/cmd/secrets.go
+++ b/cli/packages/cmd/secrets.go
@@ -170,6 +170,11 @@ var secretsSetCmd = &cobra.Command{
util.HandleError(err, "Unable to get your local config details")
}
+ secretType, err := cmd.Flags().GetString("type")
+ if err != nil || (secretType != util.SECRET_TYPE_SHARED && secretType != util.SECRET_TYPE_PERSONAL) {
+ util.HandleError(err, "Unable to parse secret type")
+ }
+
loggedInUserDetails, err := util.GetCurrentLoggedInUserDetails()
if err != nil {
util.HandleError(err, "Unable to authenticate")
@@ -179,6 +184,7 @@ var secretsSetCmd = &cobra.Command{
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
}
+
httpClient := resty.New().
SetAuthToken(loggedInUserDetails.UserCredentials.JTWToken).
SetHeader("Accept", "application/json")
@@ -224,6 +230,7 @@ var secretsSetCmd = &cobra.Command{
secretOperations := []SecretSetOperation{}
secretByKey := getSecretsByKeys(secrets)
+ personalSecretByKey := getPersonalSecretsByKeys(secrets)
for _, arg := range args {
splitKeyValueFromArg := strings.SplitN(arg, "=", 2)
@@ -251,7 +258,16 @@ var secretsSetCmd = &cobra.Command{
util.HandleError(err, "unable to encrypt your secrets")
}
- if existingSecret, ok := secretByKey[key]; ok {
+ var existingSecret models.SingleEnvironmentVariable
+ var doesSecretExist bool
+
+ if secretType == util.SECRET_TYPE_SHARED {
+ existingSecret, doesSecretExist = secretByKey[key]
+ } else {
+ existingSecret, doesSecretExist = personalSecretByKey[key]
+ }
+
+ if doesSecretExist {
// case: secret exists in project so it needs to be modified
encryptedSecretDetails := api.Secret{
ID: existingSecret.ID,
@@ -291,7 +307,7 @@ var secretsSetCmd = &cobra.Command{
SecretValueIV: base64.StdEncoding.EncodeToString(encryptedValue.Nonce),
SecretValueTag: base64.StdEncoding.EncodeToString(encryptedValue.AuthTag),
SecretValueHash: hashedValue,
- Type: util.SECRET_TYPE_SHARED,
+ Type: secretType,
PlainTextKey: key,
}
secretsToCreate = append(secretsToCreate, encryptedSecretDetails)
@@ -764,6 +780,19 @@ func getSecretsByKeys(secrets []models.SingleEnvironmentVariable) map[string]mod
return secretMapByName
}
+func getPersonalSecretsByKeys(secrets []models.SingleEnvironmentVariable) map[string]models.SingleEnvironmentVariable {
+ secretMapByName := make(map[string]models.SingleEnvironmentVariable, len(secrets))
+
+ for _, secret := range secrets {
+ if secret.Type == util.SECRET_TYPE_PERSONAL {
+ secretMapByName[secret.Key] = secret
+
+ }
+ }
+
+ return secretMapByName
+}
+
func init() {
secretsGenerateExampleEnvCmd.Flags().String("token", "", "Fetch secrets using the Infisical Token")
secretsGenerateExampleEnvCmd.Flags().String("projectId", "", "manually set the projectId to fetch folders from for machine identity")
@@ -781,6 +810,7 @@ func init() {
secretsCmd.Flags().Bool("secret-overriding", true, "Prioritizes personal secrets, if any, with the same name over shared secrets")
secretsCmd.AddCommand(secretsSetCmd)
secretsSetCmd.Flags().String("path", "/", "set secrets within a folder path")
+ secretsSetCmd.Flags().String("type", util.SECRET_TYPE_SHARED, "the type of secret to create: personal or shared")
// Only supports logged in users (JWT auth)
secretsSetCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx
index b9adf6f20..c279b1a15 100644
--- a/docs/cli/commands/secrets.mdx
+++ b/docs/cli/commands/secrets.mdx
@@ -153,6 +153,16 @@ $ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jeb
```
+
+
+ Used to select the type of secret to create. This could be either personal or shared (defaults to shared)
+
+ ```bash
+ # Example
+ infisical secrets set DOMAIN=example.com --type=personal
+ ```
+
+