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 <anco...@gmail.com>
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 <anco...@gmail.com>
---
 .../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 {

Reply via email to