This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch ops-cyberark in repository https://gitbox.apache.org/repos/asf/camel.git
commit 438252d5a9ab049a3bcc63a33515b854f4730511 Author: Andrea Cosentino <[email protected]> AuthorDate: Wed Nov 5 18:55:11 2025 +0100 CAMEL-22665 - Camel-Cyberark-Vault: Support more producer operation Signed-off-by: Andrea Cosentino <[email protected]> --- .../camel/catalog/components/cyberark-vault.json | 34 ++++++++-------- .../vault/CyberArkVaultComponentConfigurer.java | 3 ++ .../vault/CyberArkVaultEndpointConfigurer.java | 3 ++ .../vault/CyberArkVaultEndpointUriFactory.java | 3 +- .../component/cyberark/vault/cyberark-vault.json | 34 ++++++++-------- .../cyberark/vault/CyberArkVaultConfiguration.java | 14 +++++++ .../cyberark/vault/CyberArkVaultOperations.java | 33 ++++++++++++++++ .../cyberark/vault/CyberArkVaultProducer.java | 45 +++++++++++++++++----- .../cyberark/vault/client/ConjurClient.java | 8 ++++ .../vault/client/impl/ConjurClientImpl.java | 41 ++++++++++++++++++++ .../camel/main/DefaultConfigurationConfigurer.java | 5 +++ .../dsl/CyberarkVaultComponentBuilderFactory.java | 19 +++++++++ .../dsl/CyberArkVaultEndpointBuilderFactory.java | 32 +++++++++++++++ 13 files changed, 231 insertions(+), 43 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cyberark-vault.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cyberark-vault.json index 35d20a8facf5..86e62ebf0c16 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cyberark-vault.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cyberark-vault.json @@ -29,27 +29,29 @@ "configuration": { "index": 2, "kind": "property", "displayName": "Configuration", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "Component configuration" }, "conjurClient": { "index": 3, "kind": "property", "displayName": "Conjur Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.cyberark.vault.client.ConjurClient", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Reference to a ConjurClient instance in the registry" }, "lazyStartProducer": { "index": 4, "kind": "property", "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 [...] - "secretId": { "index": 5, "kind": "property", "displayName": "Secret Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The secret ID to retrieve from CyberArk Conjur" }, - "url": { "index": 6, "kind": "property", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur instance URL" }, - "verifySsl": { "index": 7, "kind": "property", "displayName": "Verify Ssl", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Whether to verify SSL certificates when connecting to CyberArk Conjur" }, - "autowiredEnabled": { "index": 8, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching t [...] - "apiKey": { "index": 9, "kind": "property", "displayName": "Api Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The API key for authentication with CyberArk Conjur" }, - "authToken": { "index": 10, "kind": "property", "displayName": "Auth Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Pre-authenticated token to use for CyberArk Conjur" }, - "password": { "index": 11, "kind": "property", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The password for authentication with CyberArk Conjur" }, - "username": { "index": 12, "kind": "property", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The username for authentication with CyberArk Conjur" } + "operation": { "index": 5, "kind": "property", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "enum", "javaType": "org.apache.camel.component.cyberark.vault.CyberArkVaultOperations", "enum": [ "getSecret", "createSecret" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "getSecret", "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "d [...] + "secretId": { "index": 6, "kind": "property", "displayName": "Secret Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The secret ID to retrieve from CyberArk Conjur" }, + "url": { "index": 7, "kind": "property", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur instance URL" }, + "verifySsl": { "index": 8, "kind": "property", "displayName": "Verify Ssl", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Whether to verify SSL certificates when connecting to CyberArk Conjur" }, + "autowiredEnabled": { "index": 9, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching t [...] + "apiKey": { "index": 10, "kind": "property", "displayName": "Api Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The API key for authentication with CyberArk Conjur" }, + "authToken": { "index": 11, "kind": "property", "displayName": "Auth Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Pre-authenticated token to use for CyberArk Conjur" }, + "password": { "index": 12, "kind": "property", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The password for authentication with CyberArk Conjur" }, + "username": { "index": 13, "kind": "property", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The username for authentication with CyberArk Conjur" } }, "properties": { "label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Logical name" }, "account": { "index": 1, "kind": "parameter", "displayName": "Account", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur account name" }, "certificatePath": { "index": 2, "kind": "parameter", "displayName": "Certificate Path", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Path to the SSL certificate for verification" }, "conjurClient": { "index": 3, "kind": "parameter", "displayName": "Conjur Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.cyberark.vault.client.ConjurClient", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Reference to a ConjurClient instance in the registry" }, - "secretId": { "index": 4, "kind": "parameter", "displayName": "Secret Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The secret ID to retrieve from CyberArk Conjur" }, - "url": { "index": 5, "kind": "parameter", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur instance URL" }, - "verifySsl": { "index": 6, "kind": "parameter", "displayName": "Verify Ssl", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Whether to verify SSL certificates when connecting to CyberArk Conjur" }, - "lazyStartProducer": { "index": 7, "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 [...] - "apiKey": { "index": 8, "kind": "parameter", "displayName": "Api Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The API key for authentication with CyberArk Conjur" }, - "authToken": { "index": 9, "kind": "parameter", "displayName": "Auth Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Pre-authenticated token to use for CyberArk Conjur" }, - "password": { "index": 10, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The password for authentication with CyberArk Conjur" }, - "username": { "index": 11, "kind": "parameter", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The username for authentication with CyberArk Conjur" } + "operation": { "index": 4, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "enum", "javaType": "org.apache.camel.component.cyberark.vault.CyberArkVaultOperations", "enum": [ "getSecret", "createSecret" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "getSecret", "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", " [...] + "secretId": { "index": 5, "kind": "parameter", "displayName": "Secret Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The secret ID to retrieve from CyberArk Conjur" }, + "url": { "index": 6, "kind": "parameter", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur instance URL" }, + "verifySsl": { "index": 7, "kind": "parameter", "displayName": "Verify Ssl", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Whether to verify SSL certificates when connecting to CyberArk Conjur" }, + "lazyStartProducer": { "index": 8, "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 [...] + "apiKey": { "index": 9, "kind": "parameter", "displayName": "Api Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The API key for authentication with CyberArk Conjur" }, + "authToken": { "index": 10, "kind": "parameter", "displayName": "Auth Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Pre-authenticated token to use for CyberArk Conjur" }, + "password": { "index": 11, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The password for authentication with CyberArk Conjur" }, + "username": { "index": 12, "kind": "parameter", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The username for authentication with CyberArk Conjur" } } } diff --git a/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultComponentConfigurer.java b/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultComponentConfigurer.java index 2152522a502b..de7072cdf68e 100644 --- a/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultComponentConfigurer.java +++ b/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultComponentConfigurer.java @@ -44,6 +44,7 @@ public class CyberArkVaultComponentConfigurer extends PropertyConfigurerSupport case "conjurClient": getOrCreateConfiguration(target).setConjurClient(property(camelContext, org.apache.camel.component.cyberark.vault.client.ConjurClient.class, value)); return true; case "lazystartproducer": case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true; + case "operation": getOrCreateConfiguration(target).setOperation(property(camelContext, org.apache.camel.component.cyberark.vault.CyberArkVaultOperations.class, value)); return true; case "password": getOrCreateConfiguration(target).setPassword(property(camelContext, java.lang.String.class, value)); return true; case "secretid": case "secretId": getOrCreateConfiguration(target).setSecretId(property(camelContext, java.lang.String.class, value)); return true; @@ -72,6 +73,7 @@ public class CyberArkVaultComponentConfigurer extends PropertyConfigurerSupport case "conjurClient": return org.apache.camel.component.cyberark.vault.client.ConjurClient.class; case "lazystartproducer": case "lazyStartProducer": return boolean.class; + case "operation": return org.apache.camel.component.cyberark.vault.CyberArkVaultOperations.class; case "password": return java.lang.String.class; case "secretid": case "secretId": return java.lang.String.class; @@ -101,6 +103,7 @@ public class CyberArkVaultComponentConfigurer extends PropertyConfigurerSupport case "conjurClient": return getOrCreateConfiguration(target).getConjurClient(); case "lazystartproducer": case "lazyStartProducer": return target.isLazyStartProducer(); + case "operation": return getOrCreateConfiguration(target).getOperation(); case "password": return getOrCreateConfiguration(target).getPassword(); case "secretid": case "secretId": return getOrCreateConfiguration(target).getSecretId(); diff --git a/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpointConfigurer.java b/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpointConfigurer.java index 4ac03c22b058..bb26aa512acd 100644 --- a/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpointConfigurer.java +++ b/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpointConfigurer.java @@ -34,6 +34,7 @@ public class CyberArkVaultEndpointConfigurer extends PropertyConfigurerSupport i case "conjurClient": target.getConfiguration().setConjurClient(property(camelContext, org.apache.camel.component.cyberark.vault.client.ConjurClient.class, value)); return true; case "lazystartproducer": case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true; + case "operation": target.getConfiguration().setOperation(property(camelContext, org.apache.camel.component.cyberark.vault.CyberArkVaultOperations.class, value)); return true; case "password": target.getConfiguration().setPassword(property(camelContext, java.lang.String.class, value)); return true; case "secretid": case "secretId": target.getConfiguration().setSecretId(property(camelContext, java.lang.String.class, value)); return true; @@ -59,6 +60,7 @@ public class CyberArkVaultEndpointConfigurer extends PropertyConfigurerSupport i case "conjurClient": return org.apache.camel.component.cyberark.vault.client.ConjurClient.class; case "lazystartproducer": case "lazyStartProducer": return boolean.class; + case "operation": return org.apache.camel.component.cyberark.vault.CyberArkVaultOperations.class; case "password": return java.lang.String.class; case "secretid": case "secretId": return java.lang.String.class; @@ -85,6 +87,7 @@ public class CyberArkVaultEndpointConfigurer extends PropertyConfigurerSupport i case "conjurClient": return target.getConfiguration().getConjurClient(); case "lazystartproducer": case "lazyStartProducer": return target.isLazyStartProducer(); + case "operation": return target.getConfiguration().getOperation(); case "password": return target.getConfiguration().getPassword(); case "secretid": case "secretId": return target.getConfiguration().getSecretId(); diff --git a/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpointUriFactory.java b/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpointUriFactory.java index 1f2ba8d12ff3..79ca1030626c 100644 --- a/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpointUriFactory.java +++ b/components/camel-cyberark-vault/src/generated/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpointUriFactory.java @@ -23,7 +23,7 @@ public class CyberArkVaultEndpointUriFactory extends org.apache.camel.support.co private static final Set<String> SECRET_PROPERTY_NAMES; private static final Map<String, String> MULTI_VALUE_PREFIXES; static { - Set<String> props = new HashSet<>(12); + Set<String> props = new HashSet<>(13); props.add("account"); props.add("apiKey"); props.add("authToken"); @@ -31,6 +31,7 @@ public class CyberArkVaultEndpointUriFactory extends org.apache.camel.support.co props.add("conjurClient"); props.add("label"); props.add("lazyStartProducer"); + props.add("operation"); props.add("password"); props.add("secretId"); props.add("url"); diff --git a/components/camel-cyberark-vault/src/generated/resources/META-INF/org/apache/camel/component/cyberark/vault/cyberark-vault.json b/components/camel-cyberark-vault/src/generated/resources/META-INF/org/apache/camel/component/cyberark/vault/cyberark-vault.json index 35d20a8facf5..86e62ebf0c16 100644 --- a/components/camel-cyberark-vault/src/generated/resources/META-INF/org/apache/camel/component/cyberark/vault/cyberark-vault.json +++ b/components/camel-cyberark-vault/src/generated/resources/META-INF/org/apache/camel/component/cyberark/vault/cyberark-vault.json @@ -29,27 +29,29 @@ "configuration": { "index": 2, "kind": "property", "displayName": "Configuration", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "Component configuration" }, "conjurClient": { "index": 3, "kind": "property", "displayName": "Conjur Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.cyberark.vault.client.ConjurClient", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Reference to a ConjurClient instance in the registry" }, "lazyStartProducer": { "index": 4, "kind": "property", "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 [...] - "secretId": { "index": 5, "kind": "property", "displayName": "Secret Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The secret ID to retrieve from CyberArk Conjur" }, - "url": { "index": 6, "kind": "property", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur instance URL" }, - "verifySsl": { "index": 7, "kind": "property", "displayName": "Verify Ssl", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Whether to verify SSL certificates when connecting to CyberArk Conjur" }, - "autowiredEnabled": { "index": 8, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching t [...] - "apiKey": { "index": 9, "kind": "property", "displayName": "Api Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The API key for authentication with CyberArk Conjur" }, - "authToken": { "index": 10, "kind": "property", "displayName": "Auth Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Pre-authenticated token to use for CyberArk Conjur" }, - "password": { "index": 11, "kind": "property", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The password for authentication with CyberArk Conjur" }, - "username": { "index": 12, "kind": "property", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The username for authentication with CyberArk Conjur" } + "operation": { "index": 5, "kind": "property", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "enum", "javaType": "org.apache.camel.component.cyberark.vault.CyberArkVaultOperations", "enum": [ "getSecret", "createSecret" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "getSecret", "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "d [...] + "secretId": { "index": 6, "kind": "property", "displayName": "Secret Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The secret ID to retrieve from CyberArk Conjur" }, + "url": { "index": 7, "kind": "property", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur instance URL" }, + "verifySsl": { "index": 8, "kind": "property", "displayName": "Verify Ssl", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Whether to verify SSL certificates when connecting to CyberArk Conjur" }, + "autowiredEnabled": { "index": 9, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching t [...] + "apiKey": { "index": 10, "kind": "property", "displayName": "Api Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The API key for authentication with CyberArk Conjur" }, + "authToken": { "index": 11, "kind": "property", "displayName": "Auth Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Pre-authenticated token to use for CyberArk Conjur" }, + "password": { "index": 12, "kind": "property", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The password for authentication with CyberArk Conjur" }, + "username": { "index": 13, "kind": "property", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The username for authentication with CyberArk Conjur" } }, "properties": { "label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Logical name" }, "account": { "index": 1, "kind": "parameter", "displayName": "Account", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur account name" }, "certificatePath": { "index": 2, "kind": "parameter", "displayName": "Certificate Path", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Path to the SSL certificate for verification" }, "conjurClient": { "index": 3, "kind": "parameter", "displayName": "Conjur Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.cyberark.vault.client.ConjurClient", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Reference to a ConjurClient instance in the registry" }, - "secretId": { "index": 4, "kind": "parameter", "displayName": "Secret Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The secret ID to retrieve from CyberArk Conjur" }, - "url": { "index": 5, "kind": "parameter", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur instance URL" }, - "verifySsl": { "index": 6, "kind": "parameter", "displayName": "Verify Ssl", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Whether to verify SSL certificates when connecting to CyberArk Conjur" }, - "lazyStartProducer": { "index": 7, "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 [...] - "apiKey": { "index": 8, "kind": "parameter", "displayName": "Api Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The API key for authentication with CyberArk Conjur" }, - "authToken": { "index": 9, "kind": "parameter", "displayName": "Auth Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Pre-authenticated token to use for CyberArk Conjur" }, - "password": { "index": 10, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The password for authentication with CyberArk Conjur" }, - "username": { "index": 11, "kind": "parameter", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The username for authentication with CyberArk Conjur" } + "operation": { "index": 4, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "enum", "javaType": "org.apache.camel.component.cyberark.vault.CyberArkVaultOperations", "enum": [ "getSecret", "createSecret" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "getSecret", "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", " [...] + "secretId": { "index": 5, "kind": "parameter", "displayName": "Secret Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The secret ID to retrieve from CyberArk Conjur" }, + "url": { "index": 6, "kind": "parameter", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The CyberArk Conjur instance URL" }, + "verifySsl": { "index": 7, "kind": "parameter", "displayName": "Verify Ssl", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Whether to verify SSL certificates when connecting to CyberArk Conjur" }, + "lazyStartProducer": { "index": 8, "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 [...] + "apiKey": { "index": 9, "kind": "parameter", "displayName": "Api Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The API key for authentication with CyberArk Conjur" }, + "authToken": { "index": 10, "kind": "parameter", "displayName": "Auth Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "Pre-authenticated token to use for CyberArk Conjur" }, + "password": { "index": 11, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The password for authentication with CyberArk Conjur" }, + "username": { "index": 12, "kind": "parameter", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", "configurationField": "configuration", "description": "The username for authentication with CyberArk Conjur" } } } diff --git a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultConfiguration.java b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultConfiguration.java index fc6583d455a4..d7b862b8cded 100644 --- a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultConfiguration.java +++ b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultConfiguration.java @@ -36,6 +36,9 @@ public class CyberArkVaultConfiguration implements Cloneable { @UriParam(description = "The secret ID to retrieve from CyberArk Conjur") private String secretId; + @UriParam(defaultValue = "getSecret") + private CyberArkVaultOperations operation = CyberArkVaultOperations.getSecret; + @UriParam @Metadata(required = true) private String url; @@ -87,6 +90,17 @@ public class CyberArkVaultConfiguration implements Cloneable { this.secretId = secretId; } + public CyberArkVaultOperations getOperation() { + return operation; + } + + /** + * The operation to perform. It can be getSecret or createSecret + */ + public void setOperation(CyberArkVaultOperations operation) { + this.operation = operation; + } + public String getUrl() { return url; } diff --git a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultOperations.java b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultOperations.java new file mode 100644 index 000000000000..16c3a1a55110 --- /dev/null +++ b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultOperations.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.cyberark.vault; + +/** + * CyberArk Conjur Vault operations + */ +public enum CyberArkVaultOperations { + + /** + * Retrieve a secret value from Conjur Vault + */ + getSecret, + + /** + * Create or update a secret in Conjur Vault + */ + createSecret +} diff --git a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultProducer.java b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultProducer.java index df090ab6fd42..badd6041711a 100644 --- a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultProducer.java +++ b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultProducer.java @@ -38,7 +38,12 @@ public class CyberArkVaultProducer extends DefaultProducer { @Override public void process(Exchange exchange) throws Exception { - String version = exchange.getMessage().getHeader(CyberArkVaultConstants.SECRET_VERSION, String.class); + // Determine operation: Header > URI parameter + CyberArkVaultOperations operation = exchange.getMessage().getHeader( + CyberArkVaultConstants.OPERATION, CyberArkVaultOperations.class); + if (operation == null) { + operation = getConfiguration().getOperation(); + } // Priority: Header > URI parameter String secretId = exchange.getMessage().getHeader(CyberArkVaultConstants.SECRET_ID, String.class); @@ -52,17 +57,37 @@ public class CyberArkVaultProducer extends DefaultProducer { + CyberArkVaultConstants.SECRET_ID + ")"); } - LOG.trace("Retrieving secret from CyberArk Conjur with id: {}", secretId); - ConjurClient client = getEndpoint().getConjurClient(); - String secretValue = client.retrieveSecret(secretId, version); - Message message = exchange.getMessage(); - message.setBody(secretValue); - message.setHeader(CyberArkVaultConstants.SECRET_ID, secretId); - message.setHeader(CyberArkVaultConstants.SECRET_VALUE, secretValue); - if (version != null) { - message.setHeader(CyberArkVaultConstants.SECRET_VERSION, version); + + switch (operation) { + case getSecret: + String version = message.getHeader(CyberArkVaultConstants.SECRET_VERSION, String.class); + LOG.trace("Retrieving secret from CyberArk Conjur with id: {}", secretId); + String secretValue = client.retrieveSecret(secretId, version); + message.setBody(secretValue); + message.setHeader(CyberArkVaultConstants.SECRET_ID, secretId); + message.setHeader(CyberArkVaultConstants.SECRET_VALUE, secretValue); + if (version != null) { + message.setHeader(CyberArkVaultConstants.SECRET_VERSION, version); + } + break; + case createSecret: + String secretValueToCreate = message.getHeader(CyberArkVaultConstants.SECRET_VALUE, String.class); + if (ObjectHelper.isEmpty(secretValueToCreate)) { + secretValueToCreate = message.getBody(String.class); + } + if (ObjectHelper.isEmpty(secretValueToCreate)) { + throw new IllegalArgumentException( + "Secret value must be specified either as message body or as a message header (" + + CyberArkVaultConstants.SECRET_VALUE + ")"); + } + LOG.trace("Creating/updating secret in CyberArk Conjur with id: {}", secretId); + client.createSecret(secretId, secretValueToCreate); + message.setHeader(CyberArkVaultConstants.SECRET_ID, secretId); + break; + default: + throw new IllegalArgumentException("Unsupported operation: " + operation); } } diff --git a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/client/ConjurClient.java b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/client/ConjurClient.java index ccf2c36f1aac..f82222465b8c 100644 --- a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/client/ConjurClient.java +++ b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/client/ConjurClient.java @@ -38,6 +38,14 @@ public interface ConjurClient extends AutoCloseable { */ String retrieveSecret(String secretId, String version); + /** + * Create or update a secret in Conjur + * + * @param secretId the ID of the secret to create/update + * @param secretValue the value to store + */ + void createSecret(String secretId, String secretValue); + /** * Authenticate with Conjur and obtain an access token * diff --git a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/client/impl/ConjurClientImpl.java b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/client/impl/ConjurClientImpl.java index 34d5b4b99b0d..339f3154e367 100644 --- a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/client/impl/ConjurClientImpl.java +++ b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/client/impl/ConjurClientImpl.java @@ -155,6 +155,47 @@ public class ConjurClientImpl implements ConjurClient { } } + @Override + public void createSecret(String secretId, String secretValue) { + try { + // Ensure we have a valid token + if (authToken == null) { + authToken = authenticate(); + } + + // URL encode the secret ID + String encodedSecretId = URLEncoder.encode(secretId, StandardCharsets.UTF_8); + + // Build the secrets endpoint URL for creating/updating + String secretsUrl = String.format("%s/secrets/%s/variable/%s", + url, account, encodedSecretId); + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(secretsUrl)) + .header("Authorization", "Token token=\"" + Base64.getEncoder() + .encodeToString(authToken.getBytes(StandardCharsets.UTF_8)) + "\"") + .header("Content-Type", "text/plain") + .POST(HttpRequest.BodyPublishers.ofString(secretValue)) + .build(); + + HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + + if (response.statusCode() == 201 || response.statusCode() == 200) { + LOG.debug("Successfully created/updated secret: {}", secretId); + } else if (response.statusCode() == 401) { + // Token expired, re-authenticate and retry + LOG.debug("Token expired, re-authenticating"); + authToken = authenticate(); + createSecret(secretId, secretValue); + } else { + throw new IOException( + "Failed to create/update secret: HTTP " + response.statusCode() + " - " + response.body()); + } + } catch (IOException | InterruptedException e) { + throw new RuntimeException("Error creating/updating secret in Conjur: " + secretId, e); + } + } + @Override public void close() throws Exception { authToken = null; diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java index 92420d4d765a..63bb32b3f063 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java @@ -659,6 +659,11 @@ public final class DefaultConfigurationConfigurer { VaultConfiguration vault = camelContext.getVaultConfiguration(); vault.setIBMSecretsManagerVaultConfiguration(ibmSecretsManager); } + CyberArkVaultConfiguration cyberark = getSingleBeanOfType(registry, CyberArkVaultConfiguration.class); + if (cyberark != null) { + VaultConfiguration vault = camelContext.getVaultConfiguration(); + vault.setCyberArkVaultConfiguration(cyberark); + } configureVaultRefresh(camelContext); // apply custom configurations if any diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/CyberarkVaultComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/CyberarkVaultComponentBuilderFactory.java index 2fd7298616db..9b956fec3ab2 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/CyberarkVaultComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/CyberarkVaultComponentBuilderFactory.java @@ -137,6 +137,24 @@ public interface CyberarkVaultComponentBuilderFactory { return this; } + + /** + * The operation to perform. It can be getSecret or createSecret. + * + * The option is a: + * <code>org.apache.camel.component.cyberark.vault.CyberArkVaultOperations</code> type. + * + * Default: getSecret + * Group: producer + * + * @param operation the value to set + * @return the dsl builder + */ + default CyberarkVaultComponentBuilder operation(org.apache.camel.component.cyberark.vault.CyberArkVaultOperations operation) { + doSetProperty("operation", operation); + return this; + } + /** * The secret ID to retrieve from CyberArk Conjur. * @@ -292,6 +310,7 @@ public interface CyberarkVaultComponentBuilderFactory { case "configuration": ((CyberArkVaultComponent) component).setConfiguration((org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration) value); return true; case "conjurClient": getOrCreateConfiguration((CyberArkVaultComponent) component).setConjurClient((org.apache.camel.component.cyberark.vault.client.ConjurClient) value); return true; case "lazyStartProducer": ((CyberArkVaultComponent) component).setLazyStartProducer((boolean) value); return true; + case "operation": getOrCreateConfiguration((CyberArkVaultComponent) component).setOperation((org.apache.camel.component.cyberark.vault.CyberArkVaultOperations) value); return true; case "secretId": getOrCreateConfiguration((CyberArkVaultComponent) component).setSecretId((java.lang.String) value); return true; case "url": getOrCreateConfiguration((CyberArkVaultComponent) component).setUrl((java.lang.String) value); return true; case "verifySsl": getOrCreateConfiguration((CyberArkVaultComponent) component).setVerifySsl((boolean) value); return true; diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CyberArkVaultEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CyberArkVaultEndpointBuilderFactory.java index 01866351a578..b9a35f973e9f 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CyberArkVaultEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CyberArkVaultEndpointBuilderFactory.java @@ -103,6 +103,38 @@ public interface CyberArkVaultEndpointBuilderFactory { doSetProperty("conjurClient", conjurClient); return this; } + /** + * The operation to perform. It can be getSecret or createSecret. + * + * The option is a: + * <code>org.apache.camel.component.cyberark.vault.CyberArkVaultOperations</code> type. + * + * Default: getSecret + * Group: producer + * + * @param operation the value to set + * @return the dsl builder + */ + default CyberArkVaultEndpointBuilder operation(org.apache.camel.component.cyberark.vault.CyberArkVaultOperations operation) { + doSetProperty("operation", operation); + return this; + } + /** + * The operation to perform. It can be getSecret or createSecret. + * + * The option will be converted to a + * <code>org.apache.camel.component.cyberark.vault.CyberArkVaultOperations</code> type. + * + * Default: getSecret + * Group: producer + * + * @param operation the value to set + * @return the dsl builder + */ + default CyberArkVaultEndpointBuilder operation(String operation) { + doSetProperty("operation", operation); + return this; + } /** * The secret ID to retrieve from CyberArk Conjur. *
