mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 06:28:11 +00:00
add set command for crud cli
This commit is contained in:
+70
-27
@@ -35,7 +35,6 @@ var secretsCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
visualize.PrintAllSecretDetails(secrets)
|
visualize.PrintAllSecretDetails(secrets)
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +93,19 @@ var secretsSetCmd = &cobra.Command{
|
|||||||
|
|
||||||
// decrypt workspace key
|
// decrypt workspace key
|
||||||
plainTextEncryptionKey := util.DecryptAsymmetric(encryptedWorkspaceKey, encryptedWorkspaceKeyNonce, encryptedWorkspaceKeySenderPublicKey, currentUsersPrivateKey)
|
plainTextEncryptionKey := util.DecryptAsymmetric(encryptedWorkspaceKey, encryptedWorkspaceKeyNonce, encryptedWorkspaceKeySenderPublicKey, currentUsersPrivateKey)
|
||||||
secretsToUpload := []models.Secret{}
|
|
||||||
|
// pull current secrets
|
||||||
|
secrets, err := util.GetAllEnvironmentVariables("", "dev")
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Unable to retrieve secrets. Run with -d to see full logs")
|
||||||
|
log.Debug(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
secretsToCreate := []models.Secret{}
|
||||||
|
secretsToModify := []models.Secret{}
|
||||||
|
|
||||||
|
secretByKey := getSecretsByKeys(secrets)
|
||||||
|
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
splitKeyValueFromArg := strings.SplitN(arg, "=", 2)
|
splitKeyValueFromArg := strings.SplitN(arg, "=", 2)
|
||||||
if len(splitKeyValueFromArg) < 2 {
|
if len(splitKeyValueFromArg) < 2 {
|
||||||
@@ -104,46 +115,78 @@ var secretsSetCmd = &cobra.Command{
|
|||||||
key := splitKeyValueFromArg[0]
|
key := splitKeyValueFromArg[0]
|
||||||
value := splitKeyValueFromArg[1]
|
value := splitKeyValueFromArg[1]
|
||||||
|
|
||||||
|
fmt.Println("key", key, "value", value)
|
||||||
|
|
||||||
|
hashedKey := fmt.Sprintf("%x", sha256.Sum256([]byte(key)))
|
||||||
encryptedKey, err := util.EncryptSymmetric([]byte(key), []byte(plainTextEncryptionKey))
|
encryptedKey, err := util.EncryptSymmetric([]byte(key), []byte(plainTextEncryptionKey))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("unable to encrypt your secrets [err=%v]", err)
|
log.Errorf("unable to encrypt your secrets [err=%v]", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
hashedKey := fmt.Sprintf("%x", sha256.Sum256([]byte(key)))
|
hashedValue := fmt.Sprintf("%x", sha256.Sum256([]byte(value)))
|
||||||
|
|
||||||
encryptedValue, err := util.EncryptSymmetric([]byte(value), []byte(plainTextEncryptionKey))
|
encryptedValue, err := util.EncryptSymmetric([]byte(value), []byte(plainTextEncryptionKey))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("unable to encrypt your secrets [err=%v]", err)
|
log.Errorf("unable to encrypt your secrets [err=%v]", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
hashedValue := fmt.Sprintf("%x", sha256.Sum256([]byte(value)))
|
if value, ok := secretByKey[key]; ok {
|
||||||
|
// case: secret exists in project so it needs to be modified
|
||||||
fullEncryptedSecret := models.Secret{
|
encryptedSecretDetails := models.Secret{
|
||||||
SecretKeyCiphertext: base64.StdEncoding.EncodeToString(encryptedKey.CipherText),
|
ID: value.ID,
|
||||||
SecretKeyIV: base64.StdEncoding.EncodeToString(encryptedKey.Nonce),
|
SecretValueCiphertext: base64.StdEncoding.EncodeToString(encryptedValue.CipherText),
|
||||||
SecretKeyTag: base64.StdEncoding.EncodeToString(encryptedKey.AuthTag),
|
SecretValueIV: base64.StdEncoding.EncodeToString(encryptedValue.Nonce),
|
||||||
SecretKeyHash: hashedKey,
|
SecretValueTag: base64.StdEncoding.EncodeToString(encryptedValue.AuthTag),
|
||||||
SecretValueCiphertext: base64.StdEncoding.EncodeToString(encryptedValue.CipherText),
|
SecretValueHash: hashedValue,
|
||||||
SecretValueIV: base64.StdEncoding.EncodeToString(encryptedValue.Nonce),
|
}
|
||||||
SecretValueTag: base64.StdEncoding.EncodeToString(encryptedValue.AuthTag),
|
secretsToModify = append(secretsToModify, encryptedSecretDetails)
|
||||||
SecretValueHash: hashedValue,
|
} else {
|
||||||
Type: "shared",
|
// case: secret doesn't exist in project so it needs to be created
|
||||||
|
encryptedSecretDetails := models.Secret{
|
||||||
|
SecretKeyCiphertext: base64.StdEncoding.EncodeToString(encryptedKey.CipherText),
|
||||||
|
SecretKeyIV: base64.StdEncoding.EncodeToString(encryptedKey.Nonce),
|
||||||
|
SecretKeyTag: base64.StdEncoding.EncodeToString(encryptedKey.AuthTag),
|
||||||
|
SecretKeyHash: hashedKey,
|
||||||
|
SecretValueCiphertext: base64.StdEncoding.EncodeToString(encryptedValue.CipherText),
|
||||||
|
SecretValueIV: base64.StdEncoding.EncodeToString(encryptedValue.Nonce),
|
||||||
|
SecretValueTag: base64.StdEncoding.EncodeToString(encryptedValue.AuthTag),
|
||||||
|
SecretValueHash: hashedValue,
|
||||||
|
Type: "shared",
|
||||||
|
}
|
||||||
|
secretsToCreate = append(secretsToCreate, encryptedSecretDetails)
|
||||||
}
|
}
|
||||||
secretsToUpload = append(secretsToUpload, fullEncryptedSecret)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
batchCreateRequest := models.BatchCreateSecretsByWorkspaceAndEnvRequest{
|
if len(secretsToCreate) > 0 {
|
||||||
WorkspaceId: "63b0c1dbf2a30bdfddcfe1ac",
|
fmt.Println("create")
|
||||||
EnvironmentName: "dev",
|
batchCreateRequest := models.BatchCreateSecretsByWorkspaceAndEnvRequest{
|
||||||
Secrets: secretsToUpload,
|
WorkspaceId: "63b0c1dbf2a30bdfddcfe1ac",
|
||||||
}
|
EnvironmentName: "dev",
|
||||||
err = http.CallBatchCreateSecretsByWorkspaceAndEnv(httpClient, batchCreateRequest)
|
Secrets: secretsToCreate,
|
||||||
if err != nil {
|
}
|
||||||
log.Errorf("Unable to complete your request because %v", err)
|
|
||||||
return
|
err = http.CallBatchCreateSecretsByWorkspaceAndEnv(httpClient, batchCreateRequest)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Unable to process new secret creations because %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("secret name(s) [%v] have been created", strings.Join(args, ", "))
|
if len(secretsToModify) > 0 {
|
||||||
|
fmt.Println("modify")
|
||||||
|
batchModifyRequest := models.BatchModifySecretsByWorkspaceAndEnvRequest{
|
||||||
|
WorkspaceId: "63b0c1dbf2a30bdfddcfe1ac",
|
||||||
|
EnvironmentName: "dev",
|
||||||
|
Secrets: secretsToModify,
|
||||||
|
}
|
||||||
|
|
||||||
|
err = http.CallBatchModifySecretsByWorkspaceAndEnv(httpClient, batchModifyRequest)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Unable to process the modifications to your secrets because %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("secret name(s) [%v] have been set", strings.Join(args, ", "))
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user