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:27 UTC
[camel] 07/13: CAMEL-17687 - Create a Camel Azure Key Vault component
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 1dfe2ff432fd0cb6d94c49daf975ea0f066d516e
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Mar 30 11:51:02 2022 +0200
CAMEL-17687 - Create a Camel Azure Key Vault component
---
.../azure/key/vault/KeyVaultConstants.java | 4 +++
.../azure/key/vault/KeyVaultEndpoint.java | 38 ++++++++++++++++++++++
.../azure/key/vault/KeyVaultProducer.java | 28 +++++-----------
.../operations/KeyVaultOperationsTest.java | 8 ++---
4 files changed, 54 insertions(+), 24 deletions(-)
diff --git a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultConstants.java b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultConstants.java
index fad06dd..d5696eb 100644
--- a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultConstants.java
+++ b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultConstants.java
@@ -25,6 +25,10 @@ public final class KeyVaultConstants {
@Metadata(label = "producer", description = "Overrides the desired operation to be used in the producer.",
javaType = "org.apache.camel.component.azure.key.vault.KeyVaultOperationDefinition")
public static final String OPERATION = HEADER_PREFIX + "ProducerOperation";
+ // headers set by the producer only
+ @Metadata(label = "producer", description = "The secret name to be used in Key Vault",
+ javaType = "String")
+ public static final String SECRET_NAME = HEADER_PREFIX + "SecretName";
private KeyVaultConstants() {
}
diff --git a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultEndpoint.java b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultEndpoint.java
index 1af5e11..a3219b0 100644
--- a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultEndpoint.java
+++ b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/KeyVaultEndpoint.java
@@ -16,6 +16,10 @@
*/
package org.apache.camel.component.azure.key.vault;
+import com.azure.identity.ClientSecretCredential;
+import com.azure.identity.ClientSecretCredentialBuilder;
+import com.azure.security.keyvault.secrets.SecretClient;
+import com.azure.security.keyvault.secrets.SecretClientBuilder;
import org.apache.camel.Category;
import org.apache.camel.Component;
import org.apache.camel.Consumer;
@@ -34,6 +38,8 @@ import org.apache.camel.support.DefaultEndpoint;
headersClass = KeyVaultConstants.class)
public class KeyVaultEndpoint extends DefaultEndpoint {
+ private SecretClient secretClient;
+
@UriParam
private KeyVaultConfiguration configuration;
@@ -43,6 +49,27 @@ public class KeyVaultEndpoint extends DefaultEndpoint {
}
@Override
+ public void doInit() throws Exception {
+ super.doInit();
+
+ // Build key vault URI
+ String keyVaultUri = "https://" + getConfiguration().getVaultName() + ".vault.azure.net";
+
+ // Credential
+ ClientSecretCredential credential = new ClientSecretCredentialBuilder()
+ .tenantId(getConfiguration().getTenantId())
+ .clientId(getConfiguration().getClientId())
+ .clientSecret(getConfiguration().getClientSecret())
+ .build();
+
+ // Build Client
+ secretClient = new SecretClientBuilder()
+ .vaultUrl(keyVaultUri)
+ .credential(credential)
+ .buildClient();
+ }
+
+ @Override
public Producer createProducer() throws Exception {
return new KeyVaultProducer(this);
}
@@ -62,4 +89,15 @@ public class KeyVaultEndpoint extends DefaultEndpoint {
public void setConfiguration(KeyVaultConfiguration configuration) {
this.configuration = configuration;
}
+
+ /**
+ * The secret Client
+ */
+ public SecretClient getSecretClient() {
+ return secretClient;
+ }
+
+ public void setSecretClient(SecretClient secretClient) {
+ this.secretClient = secretClient;
+ }
}
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 f760d8b..b9c1e52 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
@@ -23,8 +23,10 @@ import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadException;
import org.apache.camel.Message;
import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,8 +34,6 @@ public class KeyVaultProducer extends DefaultProducer {
private static final Logger LOG = LoggerFactory.getLogger(KeyVaultProducer.class);
- protected SecretClient secretClient;
-
public KeyVaultProducer(final Endpoint endpoint) {
super(endpoint);
}
@@ -46,22 +46,6 @@ public class KeyVaultProducer extends DefaultProducer {
@Override
protected void doStart() throws Exception {
super.doStart();
-
- // Build key vault URI
- String keyVaultUri = "https://" + getConfiguration().getVaultName() + ".vault.azure.net";
-
- // Credential
- ClientSecretCredential credential = new ClientSecretCredentialBuilder()
- .tenantId(getConfiguration().getTenantId())
- .clientId(getConfiguration().getClientId())
- .clientSecret(getConfiguration().getClientSecret())
- .build();
-
- // Build Client
- secretClient = new SecretClientBuilder()
- .vaultUrl(keyVaultUri)
- .credential(credential)
- .buildClient();
}
@Override
@@ -76,8 +60,12 @@ public class KeyVaultProducer extends DefaultProducer {
}
}
- private void createSecret(Exchange exchange) {
- KeyVaultSecret p = secretClient.setSecret(new KeyVaultSecret("pippo", "peppe"));
+ private void createSecret(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");
+ }
+ KeyVaultSecret p = getEndpoint().getSecretClient().setSecret(new KeyVaultSecret(secretName, exchange.getMessage().getMandatoryBody(String.class)));
Message message = getMessageForResponse(exchange);
message.setBody(p);
}
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 9c1832a..73de7a5 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
@@ -29,13 +29,13 @@ import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
@EnabledIfSystemProperty(named = "vaultName", matches = ".*",
- disabledReason = "Make sure to supply azure key vault Vault Name, e.g: mvn verify -DvaultName=string")
+ disabledReason = "Make sure to supply azure key vault Vault Name, e.g: mvn verify -DvaultName=string")
@EnabledIfSystemProperty(named = "clientId", matches = ".*",
- disabledReason = "Make sure to supply azure key vault Client Id, e.g: mvn verify -DclientId=string")
+ disabledReason = "Make sure to supply azure key vault Client Id, e.g: mvn verify -DclientId=string")
@EnabledIfSystemProperty(named = "clientSecret", matches = ".*",
- disabledReason = "Make sure to supply azure key vault Client Secret, e.g: mvn verify -DclientSecret=string")
+ disabledReason = "Make sure to supply azure key vault Client Secret, e.g: mvn verify -DclientSecret=string")
@EnabledIfSystemProperty(named = "tenantId", matches = ".*",
- disabledReason = "Make sure to supply azure key vault Tenant Id, e.g: mvn verify -DtenantId=string")
+ disabledReason = "Make sure to supply azure key vault Tenant Id, e.g: mvn verify -DtenantId=string")
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class KeyVaultOperationsTest extends CamelTestSupport {