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");
}
};
}