From cd71db416df85d8ad03ef1254138c208ccf97b4f Mon Sep 17 00:00:00 2001 From: x032205 Date: Fri, 9 May 2025 02:34:50 -0400 Subject: [PATCH] cancel deletion + update on creation for scheduled for deletion secrets --- .../oci-vault/oci-vault-sync-fns.ts | 31 +++++++++++++++++++ .../oci-vault/oci-vault-sync-types.ts | 4 +++ 2 files changed, 35 insertions(+) diff --git a/backend/src/services/secret-sync/oci-vault/oci-vault-sync-fns.ts b/backend/src/services/secret-sync/oci-vault/oci-vault-sync-fns.ts index 52e36232c..a352a23c8 100644 --- a/backend/src/services/secret-sync/oci-vault/oci-vault-sync-fns.ts +++ b/backend/src/services/secret-sync/oci-vault/oci-vault-sync-fns.ts @@ -6,6 +6,7 @@ import { TDeleteOCIVaultVariable, TOCIVaultListVariables, TOCIVaultSyncWithCredentials, + TUnmarkOCIVaultVariableFromDeletion, TUpdateOCIVaultVariable } from "@app/services/secret-sync/oci-vault/oci-vault-sync-types"; import { SecretSyncError } from "@app/services/secret-sync/secret-sync-errors"; @@ -102,6 +103,14 @@ const deleteOCIVaultVariable = async ({ provider, secretId }: TDeleteOCIVaultVar }); }; +const unmarkOCIVaultVariableFromDeletion = async ({ provider, secretId }: TUnmarkOCIVaultVariableFromDeletion) => { + const vaultsClient = new vault.VaultsClient({ authenticationDetailsProvider: provider }); + + return vaultsClient.cancelSecretDeletion({ + secretId + }); +}; + export const OCIVaultSyncFns = { syncSecrets: async (secretSync: TOCIVaultSyncWithCredentials, secretMap: TSecretMap) => { const { @@ -132,6 +141,28 @@ export const OCIVaultSyncFns = { secretKey: key }); } + } else { + // If a secret exists but is pending deletion, cancel the deletion and update the secret + const secretPendingDeletion = Object.values(variables).find( + (s) => s.secretName === key && s.lifecycleState === vault.models.SecretSummary.LifecycleState.PendingDeletion + ); + + if (secretPendingDeletion) { + await unmarkOCIVaultVariableFromDeletion({ + provider, + compartmentId: compartmentOcid, + vaultId: vaultOcid, + secretId: secretPendingDeletion.id + }); + + await updateOCIVaultVariable({ + provider, + compartmentId: compartmentOcid, + vaultId: vaultOcid, + secretId: secretPendingDeletion.id, + value + }); + } } } diff --git a/backend/src/services/secret-sync/oci-vault/oci-vault-sync-types.ts b/backend/src/services/secret-sync/oci-vault/oci-vault-sync-types.ts index 08c4a498f..c040cd0c0 100644 --- a/backend/src/services/secret-sync/oci-vault/oci-vault-sync-types.ts +++ b/backend/src/services/secret-sync/oci-vault/oci-vault-sync-types.ts @@ -42,3 +42,7 @@ export type TUpdateOCIVaultVariable = TOCIVaultListVariables & { export type TDeleteOCIVaultVariable = TOCIVaultListVariables & { secretId: string; }; + +export type TUnmarkOCIVaultVariableFromDeletion = TOCIVaultListVariables & { + secretId: string; +};