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
The following commit(s) were added to refs/heads/main by this push:
new 091995db281 CAMEL-21476 - Camel-Azure-Key-Vault: Add Update Secret
operation to Producer (#16419)
091995db281 is described below
commit 091995db2816d73623f8d1d6000b0134bbad9c8b
Author: Andrea Cosentino <[email protected]>
AuthorDate: Mon Dec 2 11:56:10 2024 +0100
CAMEL-21476 - Camel-Azure-Key-Vault: Add Update Secret operation to
Producer (#16419)
Signed-off-by: Andrea Cosentino <[email protected]>
---
.../apache/camel/catalog/components/azure-key-vault.json | 5 +++--
.../camel/component/azure/key/vault/azure-key-vault.json | 5 +++--
.../component/azure/key/vault/KeyVaultConstants.java | 3 +++
.../component/azure/key/vault/KeyVaultOperation.java | 1 +
.../component/azure/key/vault/KeyVaultProducer.java | 16 ++++++++++++++++
.../endpoint/dsl/KeyVaultEndpointBuilderFactory.java | 12 ++++++++++++
6 files changed, 38 insertions(+), 4 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-key-vault.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-key-vault.json
index 52a5ccd883b..846fa4af6f8 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-key-vault.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-key-vault.json
@@ -30,12 +30,13 @@
},
"headers": {
"CamelAzureKeyVaultProducerOperation": { "index": 0, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType":
"org.apache.camel.component.azure.key.vault.KeyVaultOperationDefinition",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Overrides the desired operation to be used in the
producer.", "constantName":
"org.apache.camel.component.azure.key.vault.KeyVaultConstants#OPERATION" },
- "CamelAzureKeyVaultSecretName": { "index": 1, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The secret name to be used in Key
Vault", "constantName":
"org.apache.camel.component.azure.key.vault.KeyVaultConstants#SECRET_NAME" }
+ "CamelAzureKeyVaultSecretName": { "index": 1, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The secret name to be used in Key
Vault", "constantName":
"org.apache.camel.component.azure.key.vault.KeyVaultConstants#SECRET_NAME" },
+ "CamelAzureKeyVaultSecretProperties": { "index": 2, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The secret properties to be used in Key
Vault for updating a secret", "constantName":
"org.apache.camel.component.azure.key.vault.KeyVaultConstants#SECRET_PROPERTIES"
}
},
"properties": {
"vaultName": { "index": 0, "kind": "path", "displayName": "Vault Name",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "configuration", "description": "Vault Name to be used" },
"credentialType": { "index": 1, "kind": "parameter", "displayName":
"Credential Type", "group": "common", "label": "common", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.azure.key.vault.CredentialType", "enum": [
"CLIENT_SECRET", "AZURE_IDENTITY" ], "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "CLIENT_SECRET", "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "co [...]
- "operation": { "index": 2, "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", "purgeDeletedSecret" ],
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "configu [...]
+ "operation": { "index": 2, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "producer", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.azure.key.vault.KeyVaultOperation", "enum": [
"createSecret", "getSecret", "updateSecretProperties", "deleteSecret",
"purgeDeletedSecret" ], "deprecated": false, "autowired": false, "secret":
false, "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration", "con [...]
"secretClient": { "index": 3, "kind": "parameter", "displayName": "Secret
Client", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "com.azure.security.keyvault.secrets.SecretClient", "deprecated":
false, "deprecationNote": "", "autowired": true, "secret": false,
"configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "configuration", "description": "Instance of Secret
client" },
"lazyStartProducer": { "index": 4, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "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 produc [...]
"clientId": { "index": 5, "kind": "parameter", "displayName": "Client Id",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "configuration", "description": "Client Id to be used" },
diff --git
a/components/camel-azure/camel-azure-key-vault/src/generated/resources/META-INF/org/apache/camel/component/azure/key/vault/azure-key-vault.json
b/components/camel-azure/camel-azure-key-vault/src/generated/resources/META-INF/org/apache/camel/component/azure/key/vault/azure-key-vault.json
index 52a5ccd883b..846fa4af6f8 100644
---
a/components/camel-azure/camel-azure-key-vault/src/generated/resources/META-INF/org/apache/camel/component/azure/key/vault/azure-key-vault.json
+++
b/components/camel-azure/camel-azure-key-vault/src/generated/resources/META-INF/org/apache/camel/component/azure/key/vault/azure-key-vault.json
@@ -30,12 +30,13 @@
},
"headers": {
"CamelAzureKeyVaultProducerOperation": { "index": 0, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType":
"org.apache.camel.component.azure.key.vault.KeyVaultOperationDefinition",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Overrides the desired operation to be used in the
producer.", "constantName":
"org.apache.camel.component.azure.key.vault.KeyVaultConstants#OPERATION" },
- "CamelAzureKeyVaultSecretName": { "index": 1, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The secret name to be used in Key
Vault", "constantName":
"org.apache.camel.component.azure.key.vault.KeyVaultConstants#SECRET_NAME" }
+ "CamelAzureKeyVaultSecretName": { "index": 1, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The secret name to be used in Key
Vault", "constantName":
"org.apache.camel.component.azure.key.vault.KeyVaultConstants#SECRET_NAME" },
+ "CamelAzureKeyVaultSecretProperties": { "index": 2, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The secret properties to be used in Key
Vault for updating a secret", "constantName":
"org.apache.camel.component.azure.key.vault.KeyVaultConstants#SECRET_PROPERTIES"
}
},
"properties": {
"vaultName": { "index": 0, "kind": "path", "displayName": "Vault Name",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "configuration", "description": "Vault Name to be used" },
"credentialType": { "index": 1, "kind": "parameter", "displayName":
"Credential Type", "group": "common", "label": "common", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.azure.key.vault.CredentialType", "enum": [
"CLIENT_SECRET", "AZURE_IDENTITY" ], "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "CLIENT_SECRET", "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "co [...]
- "operation": { "index": 2, "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", "purgeDeletedSecret" ],
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "configu [...]
+ "operation": { "index": 2, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "producer", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.azure.key.vault.KeyVaultOperation", "enum": [
"createSecret", "getSecret", "updateSecretProperties", "deleteSecret",
"purgeDeletedSecret" ], "deprecated": false, "autowired": false, "secret":
false, "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration", "con [...]
"secretClient": { "index": 3, "kind": "parameter", "displayName": "Secret
Client", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "com.azure.security.keyvault.secrets.SecretClient", "deprecated":
false, "deprecationNote": "", "autowired": true, "secret": false,
"configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "configuration", "description": "Instance of Secret
client" },
"lazyStartProducer": { "index": 4, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "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 produc [...]
"clientId": { "index": 5, "kind": "parameter", "displayName": "Client Id",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "configurationClass":
"org.apache.camel.component.azure.key.vault.KeyVaultConfiguration",
"configurationField": "configuration", "description": "Client Id to be used" },
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 becb5034184..5cccf1f0271 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
@@ -29,6 +29,9 @@ public final class KeyVaultConstants {
@Metadata(label = "producer", description = "The secret name to be used in
Key Vault",
javaType = "String")
public static final String SECRET_NAME = HEADER_PREFIX + "SecretName";
+ @Metadata(label = "producer", description = "The secret properties to be
used in Key Vault for updating a secret",
+ javaType = "String")
+ public static final String SECRET_PROPERTIES = HEADER_PREFIX +
"SecretProperties";
private KeyVaultConstants() {
}
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 e04d05ca647..4d66bee016f 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
@@ -19,6 +19,7 @@ package org.apache.camel.component.azure.key.vault;
public enum KeyVaultOperation {
createSecret,
getSecret,
+ updateSecretProperties,
deleteSecret,
purgeDeletedSecret
}
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 6a2ee15b536..c2bc029ef33 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
@@ -19,6 +19,7 @@ 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 com.azure.security.keyvault.secrets.models.SecretProperties;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.InvalidPayloadException;
@@ -47,6 +48,9 @@ public class KeyVaultProducer extends DefaultProducer {
case deleteSecret:
deleteSecret(exchange);
break;
+ case updateSecretProperties:
+ updateSecretProperties(exchange);
+ break;
case purgeDeletedSecret:
purgeDeletedSecret(exchange);
break;
@@ -77,6 +81,18 @@ public class KeyVaultProducer extends DefaultProducer {
message.setBody(p.getValue());
}
+ private void updateSecretProperties(Exchange exchange) {
+ final SecretProperties secretProperties
+ =
exchange.getMessage().getHeader(KeyVaultConstants.SECRET_PROPERTIES,
SecretProperties.class);
+ if (ObjectHelper.isEmpty(secretProperties)) {
+ throw new IllegalArgumentException(MISSING_SECRET_NAME);
+ }
+ SecretProperties p = getEndpoint().getSecretClient()
+ .updateSecretProperties(secretProperties);
+ Message message = getMessageForResponse(exchange);
+ message.setBody(p);
+ }
+
private void deleteSecret(Exchange exchange) {
final String secretName =
exchange.getMessage().getHeader(KeyVaultConstants.SECRET_NAME, String.class);
if (ObjectHelper.isEmpty(secretName)) {
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KeyVaultEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KeyVaultEndpointBuilderFactory.java
index 7346a6a1551..ee6f9f8d76c 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KeyVaultEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KeyVaultEndpointBuilderFactory.java
@@ -330,6 +330,18 @@ public interface KeyVaultEndpointBuilderFactory {
public String azureKeyVaultSecretName() {
return "CamelAzureKeyVaultSecretName";
}
+ /**
+ * The secret properties to be used in Key Vault for updating a secret.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code
AzureKeyVaultSecretProperties}.
+ */
+ public String azureKeyVaultSecretProperties() {
+ return "CamelAzureKeyVaultSecretProperties";
+ }
}
static KeyVaultEndpointBuilder endpointBuilder(String componentName,
String path) {
class KeyVaultEndpointBuilderImpl extends AbstractEndpointBuilder
implements KeyVaultEndpointBuilder, AdvancedKeyVaultEndpointBuilder {