diff --git a/sdk/keyvault/azure-security-keyvault-secrets/inc/azure/keyvault/secrets/secret_client.hpp b/sdk/keyvault/azure-security-keyvault-secrets/inc/azure/keyvault/secrets/secret_client.hpp index 0a083753e..37e75d21f 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/inc/azure/keyvault/secrets/secret_client.hpp +++ b/sdk/keyvault/azure-security-keyvault-secrets/inc/azure/keyvault/secrets/secret_client.hpp @@ -101,6 +101,15 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Secrets { */ std::string Version; }; + + /** + * @brief Define a model for a purged key. + * + */ + struct PurgedSecret final + { + }; + /** * @brief The SecretClient provides synchronous methods to manage a secret in the Azure Key * Vault. The client supports creating, retrieving, updating, deleting, purging, backing up, @@ -265,6 +274,21 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Secrets { Azure::Response RestoreSecretBackup( std::vector const& backup, Azure::Core::Context const& context = Azure::Core::Context()) const; + + /** + * @brief Permanently deletes the specified secret. + * The purge deleted secret operation removes the secret permanently, without the possibility of + * recovery. This operation can only be enabled on a soft-delete enabled vault. This operation + * requires the secrets/purge permission. + * + * @param name The name of the secret. + * @param context The context for the operation can be used for request cancellation. + * + * @return Response is success. + */ + Azure::Response PurgeDeletedSecret( + std::string const& name, + Azure::Core::Context const& context = Azure::Core::Context()) const; }; }}}} // namespace Azure::Security::KeyVault::Secrets diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/secret_client.cpp b/sdk/keyvault/azure-security-keyvault-secrets/src/secret_client.cpp index 777ce2838..952f60b5b 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/secret_client.cpp +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/secret_client.cpp @@ -164,3 +164,14 @@ Azure::Response SecretClient::RestoreSecretBackup( }, {_detail::SecretPath, _detail::RestoreSecretPath}); } + +Azure::Response SecretClient::PurgeDeletedSecret( + std::string const& name, + Azure::Core::Context const& context) const +{ + return m_protocolClient->SendRequest( + context, + Azure::Core::Http::HttpMethod::Delete, + [](Azure::Core::Http::RawResponse const&) { return PurgedSecret(); }, + {_detail::DeletedSecretPath, name}); +} diff --git a/sdk/keyvault/azure-security-keyvault-secrets/test/sample/test_app.cpp b/sdk/keyvault/azure-security-keyvault-secrets/test/sample/test_app.cpp index 2028d9037..9ab212c92 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/test/sample/test_app.cpp +++ b/sdk/keyvault/azure-security-keyvault-secrets/test/sample/test_app.cpp @@ -29,7 +29,10 @@ int main() // just a response, with a secret // auto response3 = secretClient.GetDeletedSecret("someSecret"); - auto response4 = secretClient.BackupSecret("someSecret2"); - auto response5 = secretClient.RestoreSecretBackup(response4.Value.Secret); + // auto response4 = secretClient.BackupSecret("someSecret2"); + // auto response5 = secretClient.RestoreSecretBackup(response4.Value.Secret); + + auto response = secretClient.PurgeDeletedSecret("someSecret3"); + return 0; }