mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 21:27:31 +00:00
patch secret override for run/export command
This commit is contained in:
@@ -51,11 +51,22 @@ var exportCmd = &cobra.Command{
|
|||||||
util.HandleError(err)
|
util.HandleError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
secretOverriding, err := cmd.Flags().GetBool("secret-overriding")
|
||||||
|
if err != nil {
|
||||||
|
util.HandleError(err, "Unable to parse flag")
|
||||||
|
}
|
||||||
|
|
||||||
secrets, err := util.GetAllEnvironmentVariables(envName)
|
secrets, err := util.GetAllEnvironmentVariables(envName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to fetch secrets")
|
util.HandleError(err, "Unable to fetch secrets")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if secretOverriding {
|
||||||
|
secrets = util.OverrideSecrets(secrets, util.SECRET_TYPE_PERSONAL)
|
||||||
|
} else {
|
||||||
|
secrets = util.OverrideSecrets(secrets, util.SECRET_TYPE_SHARED)
|
||||||
|
}
|
||||||
|
|
||||||
var output string
|
var output string
|
||||||
if shouldExpandSecrets {
|
if shouldExpandSecrets {
|
||||||
substitutions := util.SubstituteSecrets(secrets)
|
substitutions := util.SubstituteSecrets(secrets)
|
||||||
@@ -79,6 +90,7 @@ func init() {
|
|||||||
exportCmd.Flags().StringP("env", "e", "dev", "Set the environment (dev, prod, etc.) from which your secrets should be pulled from")
|
exportCmd.Flags().StringP("env", "e", "dev", "Set the environment (dev, prod, etc.) from which your secrets should be pulled from")
|
||||||
exportCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets")
|
exportCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets")
|
||||||
exportCmd.Flags().StringP("format", "f", "dotenv", "Set the format of the output file (dotenv, json, csv)")
|
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")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Format according to the format flag
|
// Format according to the format flag
|
||||||
|
|||||||
@@ -77,12 +77,14 @@ var runCmd = &cobra.Command{
|
|||||||
util.HandleError(err, "Could not fetch secrets", "If you are using a service token to fetch secrets, please ensure it is valid")
|
util.HandleError(err, "Could not fetch secrets", "If you are using a service token to fetch secrets, please ensure it is valid")
|
||||||
}
|
}
|
||||||
|
|
||||||
if shouldExpandSecrets {
|
if secretOverriding {
|
||||||
secrets = util.SubstituteSecrets(secrets)
|
secrets = util.OverrideSecrets(secrets, util.SECRET_TYPE_PERSONAL)
|
||||||
|
} else {
|
||||||
|
secrets = util.OverrideSecrets(secrets, util.SECRET_TYPE_SHARED)
|
||||||
}
|
}
|
||||||
|
|
||||||
if secretOverriding {
|
if shouldExpandSecrets {
|
||||||
secrets = util.OverrideWithPersonalSecrets(secrets)
|
secrets = util.SubstituteSecrets(secrets)
|
||||||
}
|
}
|
||||||
|
|
||||||
secretsByKey := getSecretsByKeys(secrets)
|
secretsByKey := getSecretsByKeys(secrets)
|
||||||
|
|||||||
@@ -195,33 +195,46 @@ func SubstituteSecrets(secrets []models.SingleEnvironmentVariable) []models.Sing
|
|||||||
return expandedSecrets
|
return expandedSecrets
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
func OverrideSecrets(secrets []models.SingleEnvironmentVariable, secretType string) []models.SingleEnvironmentVariable {
|
||||||
|
personalSecrets := make(map[string]models.SingleEnvironmentVariable)
|
||||||
// if two secrets with the same name are found, the one that has type `personal` will be in the returned list
|
sharedSecrets := make(map[string]models.SingleEnvironmentVariable)
|
||||||
func OverrideWithPersonalSecrets(secrets []models.SingleEnvironmentVariable) []models.SingleEnvironmentVariable {
|
|
||||||
personalSecret := make(map[string]models.SingleEnvironmentVariable)
|
|
||||||
sharedSecret := make(map[string]models.SingleEnvironmentVariable)
|
|
||||||
secretsToReturn := []models.SingleEnvironmentVariable{}
|
secretsToReturn := []models.SingleEnvironmentVariable{}
|
||||||
|
secretsToReturnMap := make(map[string]models.SingleEnvironmentVariable)
|
||||||
|
|
||||||
for _, secret := range secrets {
|
for _, secret := range secrets {
|
||||||
if secret.Type == PERSONAL_SECRET_TYPE_NAME {
|
if secret.Type == PERSONAL_SECRET_TYPE_NAME {
|
||||||
personalSecret[secret.Key] = secret
|
personalSecrets[secret.Key] = secret
|
||||||
}
|
}
|
||||||
|
|
||||||
if secret.Type == SHARED_SECRET_TYPE_NAME {
|
if secret.Type == SHARED_SECRET_TYPE_NAME {
|
||||||
sharedSecret[secret.Key] = secret
|
sharedSecrets[secret.Key] = secret
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, secret := range sharedSecret {
|
if secretType == PERSONAL_SECRET_TYPE_NAME {
|
||||||
personalValue, personalExists := personalSecret[secret.Key]
|
for _, secret := range secrets {
|
||||||
if personalExists {
|
if personalSecret, exists := personalSecrets[secret.Key]; exists {
|
||||||
secretsToReturn = append(secretsToReturn, personalValue)
|
secretsToReturnMap[secret.Key] = personalSecret
|
||||||
} else {
|
} else {
|
||||||
secretsToReturn = append(secretsToReturn, secret)
|
if _, exists = secretsToReturnMap[secret.Key]; !exists {
|
||||||
|
secretsToReturnMap[secret.Key] = secret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if secretType == SHARED_SECRET_TYPE_NAME {
|
||||||
|
for _, secret := range secrets {
|
||||||
|
if sharedSecret, exists := sharedSecrets[secret.Key]; exists {
|
||||||
|
secretsToReturnMap[secret.Key] = sharedSecret
|
||||||
|
} else {
|
||||||
|
if _, exists := secretsToReturnMap[secret.Key]; !exists {
|
||||||
|
secretsToReturnMap[secret.Key] = secret
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, secret := range secretsToReturnMap {
|
||||||
|
secretsToReturn = append(secretsToReturn, secret)
|
||||||
|
}
|
||||||
return secretsToReturn
|
return secretsToReturn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user