You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2022/03/30 12:57:32 UTC

[camel] 12/13: CAMEL-17687 - Create a Camel Azure Key Vault component - Delete Secret Operation

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4b4697446e9b3bd89b78708117651b7477c12d93
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Mar 30 13:29:25 2022 +0200

    CAMEL-17687 - Create a Camel Azure Key Vault component - Delete Secret Operation
---
 .../component/azure/key/vault/azure-key-vault.json  |  2 +-
 .../azure/key/vault/KeyVaultOperation.java          |  3 ++-
 .../component/azure/key/vault/KeyVaultProducer.java | 17 +++++++++++++++++
 .../operations/KeyVaultOperationsTest.java          | 21 +++++++++++++++++++--
 4 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/components/camel-azure/camel-azure-key-vault/src/generated/resources/org/apache/camel/component/azure/key/vault/azure-key-vault.json b/components/camel-azure/camel-azure-key-vault/src/generated/resources/org/apache/camel/component/azure/key/vault/azure-key-vault.json
index 6560c92..4b78c18 100644
--- a/components/camel-azure/camel-azure-key-vault/src/generated/resources/org/apache/camel/component/azure/key/vault/azure-key-vault.json
+++ b/components/camel-azure/camel-azure-key-vault/src/generated/resources/org/apache/camel/component/azure/key/vault/azure-key-vault.json
@@ -36,7 +36,7 @@
     "exceptionHandler": { "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the con [...]
     "exchangePattern": { "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut", "InOptionalOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." },
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during sta [...]
-    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.azure.key.vault.KeyVaultOperation", "enum": [ "createSecret", "getSecret" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.key.vault.KeyVaultConfiguration", "configurationField": "configuration", "description": "Operation to be performed" },
+    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.azure.key.vault.KeyVaultOperation", "enum": [ "createSecret", "getSecret", "deleteSecret" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.key.vault.KeyVaultConfiguration", "configurationField": "configuration", "description": "Operation [...]
     "clientId": { "kind": "parameter", "displayName": "Client Id", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.key.vault.KeyVaultConfiguration", "configurationField": "configuration", "description": "Client Id to be used" },
     "clientSecret": { "kind": "parameter", "displayName": "Client Secret", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.key.vault.KeyVaultConfiguration", "configurationField": "configuration", "description": "Client Secret to be used" },
     "tenantId": { "kind": "parameter", "displayName": "Tenant Id", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.key.vault.KeyVaultConfiguration", "configurationField": "configuration", "description": "Tenant Id to be used" }
diff --git a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultOperation.java b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultOperation.java
index 71bc7a5..d6fa441 100644
--- a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultOperation.java
+++ b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultOperation.java
@@ -18,5 +18,6 @@ package org.apache.camel.component.azure.key.vault;
 
 public enum KeyVaultOperation {
     createSecret,
-    getSecret
+    getSecret,
+    deleteSecret
 }
diff --git a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultProducer.java b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultProducer.java
index dc1fe4f..5b55f16 100644
--- a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultProducer.java
+++ b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultProducer.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.azure.key.vault;
 
+import com.azure.core.util.polling.SyncPoller;
+import com.azure.security.keyvault.secrets.models.DeletedSecret;
 import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
@@ -54,6 +56,9 @@ public class KeyVaultProducer extends DefaultProducer {
             case getSecret:
                 getSecret(exchange);
                 break;
+            case deleteSecret:
+                deleteSecret(exchange);
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported operation");
         }
@@ -81,6 +86,18 @@ public class KeyVaultProducer extends DefaultProducer {
         message.setBody(p.getValue());
     }
 
+    private void deleteSecret(Exchange exchange) throws InvalidPayloadException {
+        final String secretName = exchange.getMessage().getHeader(KeyVaultConstants.SECRET_NAME, String.class);
+        if (ObjectHelper.isEmpty(secretName)) {
+            throw new IllegalArgumentException("Secret Name must be specified for createSecret Operation");
+        }
+        SyncPoller<DeletedSecret, Void> p = getEndpoint().getSecretClient()
+                .beginDeleteSecret(secretName);
+        p.waitForCompletion();
+        Message message = getMessageForResponse(exchange);
+        message.setBody(p.getFinalResult());
+    }
+
     @Override
     public KeyVaultEndpoint getEndpoint() {
         return (KeyVaultEndpoint) super.getEndpoint();
diff --git a/components/camel-azure/camel-azure-key-vault/src/test/java/org/apache/camel/component/azure/key/vault/integration/operations/KeyVaultOperationsTest.java b/components/camel-azure/camel-azure-key-vault/src/test/java/org/apache/camel/component/azure/key/vault/integration/operations/KeyVaultOperationsTest.java
index e67b0e5..8477352a 100644
--- a/components/camel-azure/camel-azure-key-vault/src/test/java/org/apache/camel/component/azure/key/vault/integration/operations/KeyVaultOperationsTest.java
+++ b/components/camel-azure/camel-azure-key-vault/src/test/java/org/apache/camel/component/azure/key/vault/integration/operations/KeyVaultOperationsTest.java
@@ -46,28 +46,41 @@ public class KeyVaultOperationsTest extends CamelTestSupport {
     @EndpointInject("direct:getSecret")
     private ProducerTemplate getTemplate;
 
+    @EndpointInject("direct:deleteSecret")
+    private ProducerTemplate deleteTemplate;
+
     @EndpointInject("mock:createSecret")
     private MockEndpoint createResult;
 
     @EndpointInject("mock:getSecret")
     private MockEndpoint getResult;
 
+    @EndpointInject("mock:deleteSecret")
+    private MockEndpoint deleteResult;
+
     @Test
     public void sendInOnly() throws Exception {
         createResult.expectedMessageCount(1);
         getResult.expectedMessageCount(1);
         getResult.expectedBodiesReceived("TestValue");
+        deleteResult.expectedMessageCount(1);
 
         template.send("direct:createSecret", ExchangePattern.InOnly, new Processor() {
             public void process(Exchange exchange) {
-                exchange.getMessage().setHeader(KeyVaultConstants.SECRET_NAME, "Test");
+                exchange.getMessage().setHeader(KeyVaultConstants.SECRET_NAME, "Test1");
                 exchange.getIn().setBody("TestValue");
             }
         });
 
         template.send("direct:getSecret", ExchangePattern.InOnly, new Processor() {
             public void process(Exchange exchange) {
-                exchange.getMessage().setHeader(KeyVaultConstants.SECRET_NAME, "Test");
+                exchange.getMessage().setHeader(KeyVaultConstants.SECRET_NAME, "Test1");
+            }
+        });
+
+        template.send("direct:deleteSecret", ExchangePattern.InOnly, new Processor() {
+            public void process(Exchange exchange) {
+                exchange.getMessage().setHeader(KeyVaultConstants.SECRET_NAME, "Test1");
             }
         });
 
@@ -87,6 +100,10 @@ public class KeyVaultOperationsTest extends CamelTestSupport {
                 from("direct:getSecret")
                         .to("azure-key-vault://{{vaultName}}?clientId=RAW({{clientId}})&clientSecret=RAW({{clientSecret}})&tenantId=RAW({{tenantId}})&operation=getSecret")
                         .to("mock:getSecret");
+
+                from("direct:deleteSecret")
+                        .to("azure-key-vault://{{vaultName}}?clientId=RAW({{clientId}})&clientSecret=RAW({{clientSecret}})&tenantId=RAW({{tenantId}})&operation=deleteSecret")
+                        .to("mock:deleteSecret");
             }
         };
     }