diff --git a/pkg/cmd/secrets.go b/pkg/cmd/secrets.go index 8bf32ab5..91992a8f 100644 --- a/pkg/cmd/secrets.go +++ b/pkg/cmd/secrets.go @@ -240,6 +240,8 @@ func setSecrets(cmd *cobra.Command, args []string) { localConfig := configuration.LocalConfig(cmd) visibility := cmd.Flag("visibility").Value.String() visibilityModified := visibility != "" + valueType := cmd.Flag("value-type").Value.String() + valueTypeModified := valueType != "" utils.RequireValue("token", localConfig.Token.Value) @@ -320,6 +322,11 @@ func setSecrets(cmd *cobra.Command, args []string) { if visibilityModified { changeRequest.Visibility = &visibility } + if valueTypeModified { + changeRequest.ValueType = &models.SecretValueType{ + Type: valueType, + } + } changeRequests = append(changeRequests, changeRequest) } else if len(args) == 2 && !strings.Contains(args[0], "=") { // format: 'doppler secrets set KEY value' @@ -333,6 +340,11 @@ func setSecrets(cmd *cobra.Command, args []string) { if visibilityModified { changeRequest.Visibility = &visibility } + if valueTypeModified { + changeRequest.ValueType = &models.SecretValueType{ + Type: valueType, + } + } changeRequests = append(changeRequests, changeRequest) } else { // format: 'doppler secrets set KEY=value' @@ -353,6 +365,11 @@ func setSecrets(cmd *cobra.Command, args []string) { if visibilityModified { changeRequest.Visibility = &visibility } + if valueTypeModified { + changeRequest.ValueType = &models.SecretValueType{ + Type: valueType, + } + } changeRequests = append(changeRequests, changeRequest) } } @@ -363,7 +380,7 @@ func setSecrets(cmd *cobra.Command, args []string) { } if !utils.Silent { - printer.Secrets(response, keys, jsonFlag, false, raw, false, visibilityModified, false) + printer.Secrets(response, keys, jsonFlag, false, raw, false, visibilityModified, valueTypeModified) } } @@ -659,6 +676,7 @@ func init() { secretsSetCmd.Flags().Bool("raw", false, "print the raw secret value without processing variables") secretsSetCmd.Flags().Bool("no-interactive", false, "do not allow entering secret value via interactive mode") secretsSetCmd.Flags().String("visibility", "", "visibility (e.g. masked, unmasked, or restricted)") + secretsSetCmd.Flags().String("value-type", "", "value type (e.g. string, decimal, etc)") secretsCmd.AddCommand(secretsSetCmd) secretsUploadCmd.Flags().StringP("project", "p", "", "project (e.g. backend)") diff --git a/pkg/models/api.go b/pkg/models/api.go index 211a0053..bcc6898c 100644 --- a/pkg/models/api.go +++ b/pkg/models/api.go @@ -33,15 +33,17 @@ type ComputedSecret struct { // ChangeRequest can be used to smartly update secrets type ChangeRequest struct { - Name string `json:"name"` - OriginalName interface{} `json:"originalName"` - Value interface{} `json:"value"` - OriginalValue interface{} `json:"originalValue,omitempty"` - Visibility *string `json:"visibility,omitempty"` - OriginalVisibility *string `json:"originalVisibility,omitempty"` - ShouldPromote *bool `json:"shouldPromote,omitempty"` - ShouldDelete *bool `json:"shouldDelete,omitempty"` - ShouldConverge *bool `json:"shouldConverge,omitempty"` + Name string `json:"name"` + OriginalName interface{} `json:"originalName"` + Value interface{} `json:"value"` + OriginalValue interface{} `json:"originalValue,omitempty"` + Visibility *string `json:"visibility,omitempty"` + OriginalVisibility *string `json:"originalVisibility,omitempty"` + ValueType *SecretValueType `json:"valueType,omitempty"` + OriginalValueType *SecretValueType `json:"originalValueType,omitempty"` + ShouldPromote *bool `json:"shouldPromote,omitempty"` + ShouldDelete *bool `json:"shouldDelete,omitempty"` + ShouldConverge *bool `json:"shouldConverge,omitempty"` } // SecretNote contains a secret and its note