This is an automated email from the ASF dual-hosted git repository.
tdiesler 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 19358623a3d2 CAMEL-24236: camel-cyberark-vault - add support for
cyberark policies
19358623a3d2 is described below
commit 19358623a3d2a8bfe3f3012e4afaaa5c61a642b3
Author: Thomas Diesler <[email protected]>
AuthorDate: Wed Jul 22 10:47:34 2026 +0200
CAMEL-24236: camel-cyberark-vault - add support for cyberark policies
Closes #24236
Signed-off-by: Thomas Diesler <[email protected]>
* Update method on how to setup Conjur and obtain an API key (i.e. file not
server logs)
* Update tests to install their respective policy
---
.../catalog/docs/cyberark-vault-component.adoc | 16 ++-
components/camel-cyberark-vault/pom.xml | 16 +++
.../src/main/docs/cyberark-vault-component.adoc | 16 ++-
.../vault/integration/CyberArkTestSupport.java | 121 +++++++++++++++++++++
.../CyberArkVaultMultipleSecretsIT.java | 70 ++----------
.../vault/integration/CyberArkVaultProducerIT.java | 69 ++----------
.../CyberArkVaultPropertiesSourceIT.java | 112 +++++--------------
.../component/cyberark/vault/integration/README.md | 36 +++---
8 files changed, 225 insertions(+), 231 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/cyberark-vault-component.adoc
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/cyberark-vault-component.adoc
index 1c334378e889..7f806962a634 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/cyberark-vault-component.adoc
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/cyberark-vault-component.adoc
@@ -597,21 +597,27 @@ The easiest way to get started is using the official
https://github.com/cyberark
git clone https://github.com/cyberark/conjur-quickstart.git
cd conjur-quickstart
+# Generate the master key
+docker compose run --no-deps --rm conjur data-key generate > data_key
+
+# Load master key as an environment variable
+export CONJUR_DATA_KEY="$(< data_key)"
+
# Start Conjur and database
docker-compose up -d
-# Wait for services to be ready
-sleep 15
+# Create an admin account (in another terminal)
+docker compose exec conjur conjurctl account create myConjurAccount >
admin_data
-# The admin API key will be displayed in the logs
-docker-compose logs conjur_server | grep "admin API key"
+# The admin API key will be in the admin_data file
+cat admin_data | grep "API key"
----
Default connection details:
- **URL**: `http://localhost:8080`
- **Account**: `myConjurAccount`
- **Username**: `admin`
-- **API Key**: Check the container logs (see command above)
+- **API Key**: See admin_data
==== Step 2: Load Conjur Policy
diff --git a/components/camel-cyberark-vault/pom.xml
b/components/camel-cyberark-vault/pom.xml
index f500069073ba..7d8d4399b6b2 100644
--- a/components/camel-cyberark-vault/pom.xml
+++ b/components/camel-cyberark-vault/pom.xml
@@ -65,4 +65,20 @@
<version>${mockito-version}</version>
</dependency>
</dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+
<camel.cyberark.url>http://localhost:8080</camel.cyberark.url>
+
<camel.cyberark.account>myConjurAccount</camel.cyberark.account>
+
<camel.cyberark.username>admin</camel.cyberark.username>
+
<!--camel.cyberark.apiKey>your-api-key</camel.cyberark.apiKey-->
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
diff --git
a/components/camel-cyberark-vault/src/main/docs/cyberark-vault-component.adoc
b/components/camel-cyberark-vault/src/main/docs/cyberark-vault-component.adoc
index 1c334378e889..7f806962a634 100644
---
a/components/camel-cyberark-vault/src/main/docs/cyberark-vault-component.adoc
+++
b/components/camel-cyberark-vault/src/main/docs/cyberark-vault-component.adoc
@@ -597,21 +597,27 @@ The easiest way to get started is using the official
https://github.com/cyberark
git clone https://github.com/cyberark/conjur-quickstart.git
cd conjur-quickstart
+# Generate the master key
+docker compose run --no-deps --rm conjur data-key generate > data_key
+
+# Load master key as an environment variable
+export CONJUR_DATA_KEY="$(< data_key)"
+
# Start Conjur and database
docker-compose up -d
-# Wait for services to be ready
-sleep 15
+# Create an admin account (in another terminal)
+docker compose exec conjur conjurctl account create myConjurAccount >
admin_data
-# The admin API key will be displayed in the logs
-docker-compose logs conjur_server | grep "admin API key"
+# The admin API key will be in the admin_data file
+cat admin_data | grep "API key"
----
Default connection details:
- **URL**: `http://localhost:8080`
- **Account**: `myConjurAccount`
- **Username**: `admin`
-- **API Key**: Check the container logs (see command above)
+- **API Key**: See admin_data
==== Step 2: Load Conjur Policy
diff --git
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkTestSupport.java
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkTestSupport.java
new file mode 100644
index 000000000000..99ef4f637057
--- /dev/null
+++
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkTestSupport.java
@@ -0,0 +1,121 @@
+/*
+ * 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.integration;
+
+import java.net.URI;
+import java.net.URLEncoder;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.nio.charset.StandardCharsets;
+import java.time.Duration;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit6.CamelTestSupport;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+abstract class CyberArkTestSupport extends CamelTestSupport {
+
+ static final Logger LOG =
LoggerFactory.getLogger(CyberArkTestSupport.class);
+
+ static HttpClient httpClient;
+ static String authToken;
+
+ @EndpointInject("mock:result")
+ MockEndpoint mockResult;
+
+ @BeforeAll
+ public static void beforeAll() throws Exception {
+ httpClient = HttpClient.newBuilder()
+ .connectTimeout(Duration.ofSeconds(10))
+ .build();
+
+ authToken = authenticate();
+ }
+
+ @AfterAll
+ public static void afterAll() throws Exception {
+ authToken = null;
+ httpClient = null;
+ }
+
+ private static String authenticate() throws Exception {
+ String url = String.format("%s/authn/%s/%s/authenticate",
+ System.getProperty("camel.cyberark.url"),
+ System.getProperty("camel.cyberark.account"),
+ System.getProperty("camel.cyberark.username"));
+
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(URI.create(url))
+ .header("Content-Type", "text/plain")
+ .header("Accept-Encoding", "base64")
+
.POST(HttpRequest.BodyPublishers.ofString(System.getProperty("camel.cyberark.apiKey")))
+ .build();
+
+ HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
+ requireSuccess("Authenticate", response);
+
+ return response.body();
+ }
+
+ static void loadPolicy(String policy) throws Exception {
+
+ String policyUrl = String.format("%s/policies/%s/policy/%s",
+ System.getProperty("camel.cyberark.url"),
+ System.getProperty("camel.cyberark.account"),
+ URLEncoder.encode("root", StandardCharsets.UTF_8));
+
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(URI.create(policyUrl))
+ .header("Authorization", "Token token=\"" + authToken + "\"")
+ .header("Content-Type", "text/plain")
+ .method("PATCH", HttpRequest.BodyPublishers.ofString(policy))
+ .build();
+
+ HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
+ requireSuccess("Load policy", response);
+ }
+
+ static void createSecret(String secretId, String secretValue) throws
Exception {
+ String url = String.format("%s/secrets/%s/variable/%s",
+ System.getProperty("camel.cyberark.url"),
+ System.getProperty("camel.cyberark.account"),
+ URLEncoder.encode(secretId, StandardCharsets.UTF_8));
+
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(URI.create(url))
+ .header("Authorization", "Token token=\"" + authToken + "\"")
+ .header("Content-Type", "application/octet-stream")
+ .POST(HttpRequest.BodyPublishers.ofString(secretValue))
+ .build();
+
+ HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
+ requireSuccess("Created secret", response);
+ }
+
+ static void requireSuccess(String op, HttpResponse<String> response) {
+ if (response.statusCode() < 200 || response.statusCode() >= 300) {
+ throw new IllegalStateException(
+ String.format("%s failed: HTTP %d: %s", op,
response.statusCode(), response.body()));
+ }
+ LOG.info("{} ok - HTTP {}", op, response.statusCode());
+ }
+}
diff --git
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultMultipleSecretsIT.java
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultMultipleSecretsIT.java
index 36ec414e344a..0840fa0251f8 100644
---
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultMultipleSecretsIT.java
+++
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultMultipleSecretsIT.java
@@ -16,30 +16,19 @@
*/
package org.apache.camel.component.cyberark.vault.integration;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.Base64;
-
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit6.CamelTestSupport;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfSystemProperties;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* Integration test demonstrating multiple secret retrieval in a single route
*/
// Must be manually tested. Provide CyberArk Conjur connection details using
system properties:
// -Dcamel.cyberark.url=http://localhost:8080
-// -Dcamel.cyberark.account=myAccount
+// -Dcamel.cyberark.account=myConjurAccount
// -Dcamel.cyberark.username=admin
// -Dcamel.cyberark.apiKey=your-api-key
@EnabledIfSystemProperties({
@@ -52,21 +41,18 @@ import org.slf4j.LoggerFactory;
@EnabledIfSystemProperty(named = "camel.cyberark.apiKey", matches =
".*",
disabledReason = "CyberArk Conjur API key not
provided")
})
-public class CyberArkVaultMultipleSecretsIT extends CamelTestSupport {
-
- private static final Logger LOG =
LoggerFactory.getLogger(CyberArkVaultMultipleSecretsIT.class);
-
- private static HttpClient httpClient;
- private static String authToken;
+public class CyberArkVaultMultipleSecretsIT extends CyberArkTestSupport {
@BeforeAll
public static void setupSecrets() throws Exception {
- httpClient = HttpClient.newBuilder()
- .connectTimeout(Duration.ofSeconds(10))
- .build();
- // Authenticate
- authToken = authenticate();
+ // Declare variables
+ loadPolicy("""
+ - !variable app/config
+ - !variable db/primary
+ - !variable db/replica
+ - !variable cache/redis
+ """);
// Create multiple secrets for testing
createSecret("app/config",
"{\"port\":\"8080\",\"host\":\"localhost\",\"protocol\":\"https\"}");
@@ -75,44 +61,6 @@ public class CyberArkVaultMultipleSecretsIT extends
CamelTestSupport {
createSecret("cache/redis",
"{\"host\":\"redis.example.com\",\"port\":\"6379\"}");
}
- private static String authenticate() throws Exception {
- String url = String.format("%s/authn/%s/%s/authenticate",
- System.getProperty("camel.cyberark.url"),
- System.getProperty("camel.cyberark.account"),
- System.getProperty("camel.cyberark.username"));
-
- HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create(url))
- .header("Content-Type", "text/plain")
-
.POST(HttpRequest.BodyPublishers.ofString(System.getProperty("camel.cyberark.apiKey")))
- .build();
-
- HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
- return response.body();
- }
-
- private static void createSecret(String secretId, String secretValue) {
- try {
- String url = String.format("%s/secrets/%s/variable/%s",
- System.getProperty("camel.cyberark.url"),
- System.getProperty("camel.cyberark.account"),
- secretId);
-
- HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create(url))
- .header("Authorization", "Token token=\"" +
Base64.getEncoder()
-
.encodeToString(authToken.getBytes(StandardCharsets.UTF_8)) + "\"")
- .header("Content-Type", "application/octet-stream")
- .POST(HttpRequest.BodyPublishers.ofString(secretValue))
- .build();
-
- HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
- LOG.info("Created secret '{}': HTTP {}", secretId,
response.statusCode());
- } catch (Exception e) {
- LOG.warn("Could not create secret '{}': {}", secretId,
e.getMessage());
- }
- }
-
@Test
public void testMultipleSecretsInSingleRoute() throws Exception {
context.getVaultConfiguration().cyberark().setUrl(System.getProperty("camel.cyberark.url"));
diff --git
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultProducerIT.java
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultProducerIT.java
index 0237c6c45b29..440167c20c6b 100644
---
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultProducerIT.java
+++
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultProducerIT.java
@@ -16,33 +16,20 @@
*/
package org.apache.camel.component.cyberark.vault.integration;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.Base64;
-
-import org.apache.camel.EndpointInject;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.cyberark.vault.CyberArkVaultConstants;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit6.CamelTestSupport;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfSystemProperties;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
// Must be manually tested. Provide CyberArk Conjur connection details using
system properties:
// -Dcamel.cyberark.url=http://localhost:8080
-// -Dcamel.cyberark.account=myAccount
+// -Dcamel.cyberark.account=myConjurAccount
// -Dcamel.cyberark.username=admin
// -Dcamel.cyberark.apiKey=your-api-key
@EnabledIfSystemProperties({
@@ -55,64 +42,22 @@ import static
org.junit.jupiter.api.Assertions.assertNotNull;
@EnabledIfSystemProperty(named = "camel.cyberark.apiKey", matches =
".*",
disabledReason = "CyberArk Conjur API key not
provided")
})
-public class CyberArkVaultProducerIT extends CamelTestSupport {
-
- private static final Logger LOG =
LoggerFactory.getLogger(CyberArkVaultProducerIT.class);
-
- @EndpointInject("mock:result")
- private MockEndpoint mockResult;
-
- private static HttpClient httpClient;
- private static String authToken;
+public class CyberArkVaultProducerIT extends CyberArkTestSupport {
@BeforeAll
public static void setupSecrets() throws Exception {
- httpClient = HttpClient.newBuilder()
- .connectTimeout(Duration.ofSeconds(10))
- .build();
-
- // Authenticate
- String url = String.format("%s/authn/%s/%s/authenticate",
- System.getProperty("camel.cyberark.url"),
- System.getProperty("camel.cyberark.account"),
- System.getProperty("camel.cyberark.username"));
- HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create(url))
- .header("Content-Type", "text/plain")
-
.POST(HttpRequest.BodyPublishers.ofString(System.getProperty("camel.cyberark.apiKey")))
- .build();
-
- HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
- authToken = response.body();
+ // Declare variables
+ loadPolicy("""
+ - !variable test/secret
+ - !variable production/database
+ """);
// Create test secrets
createSecret("test/secret", "mySecretValue");
createSecret("production/database",
"{\"username\":\"prod-user\",\"password\":\"prod-pass\"}");
}
- private static void createSecret(String secretId, String secretValue) {
- try {
- String url = String.format("%s/secrets/%s/variable/%s",
- System.getProperty("camel.cyberark.url"),
- System.getProperty("camel.cyberark.account"),
- secretId);
-
- HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create(url))
- .header("Authorization", "Token token=\"" +
Base64.getEncoder()
-
.encodeToString(authToken.getBytes(StandardCharsets.UTF_8)) + "\"")
- .header("Content-Type", "application/octet-stream")
- .POST(HttpRequest.BodyPublishers.ofString(secretValue))
- .build();
-
- HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
- LOG.info("Created secret '{}': HTTP {}", secretId,
response.statusCode());
- } catch (Exception e) {
- LOG.warn("Could not create secret '{}': {}", secretId,
e.getMessage());
- }
- }
-
@Test
public void testRetrieveSecret() throws Exception {
mockResult.expectedMessageCount(1);
diff --git
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultPropertiesSourceIT.java
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultPropertiesSourceIT.java
index 856fb6b74611..ebde130085ff 100644
---
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultPropertiesSourceIT.java
+++
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/CyberArkVaultPropertiesSourceIT.java
@@ -16,31 +16,20 @@
*/
package org.apache.camel.component.cyberark.vault.integration;
-import java.io.IOException;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.Base64;
-
import org.apache.camel.FailedToCreateRouteException;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit6.CamelTestSupport;
+import org.apache.camel.vault.CyberArkVaultConfiguration;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfSystemProperties;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import static org.junit.jupiter.api.Assertions.assertThrows;
// Must be manually tested. Provide CyberArk Conjur connection details using
system properties:
// -Dcamel.cyberark.url=http://localhost:8080
-// -Dcamel.cyberark.account=myAccount
+// -Dcamel.cyberark.account=myConjurAccount
// -Dcamel.cyberark.username=admin
// -Dcamel.cyberark.apiKey=your-api-key
@EnabledIfSystemProperties({
@@ -53,21 +42,17 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
@EnabledIfSystemProperty(named = "camel.cyberark.apiKey", matches =
".*",
disabledReason = "CyberArk Conjur API key not
provided")
})
-public class CyberArkVaultPropertiesSourceIT extends CamelTestSupport {
-
- private static final Logger LOG =
LoggerFactory.getLogger(CyberArkVaultPropertiesSourceIT.class);
-
- private static HttpClient httpClient;
- private static String authToken;
+public class CyberArkVaultPropertiesSourceIT extends CyberArkTestSupport {
@BeforeAll
public static void init() throws Exception {
- httpClient = HttpClient.newBuilder()
- .connectTimeout(Duration.ofSeconds(10))
- .build();
- // Authenticate and get token
- authToken = authenticate();
+ // Declare variables
+ loadPolicy("""
+ - !variable database
+ - !variable api/credentials
+ - !variable simple-secret
+ """);
// Create test secrets in Conjur
createSecret("database",
"{\"username\":\"dbuser\",\"password\":\"dbpass\",\"host\":\"localhost\"}");
@@ -75,55 +60,13 @@ public class CyberArkVaultPropertiesSourceIT extends
CamelTestSupport {
createSecret("simple-secret", "my-simple-value");
}
- private static String authenticate() throws IOException,
InterruptedException {
- String url = String.format("%s/authn/%s/%s/authenticate",
- System.getProperty("camel.cyberark.url"),
- System.getProperty("camel.cyberark.account"),
- System.getProperty("camel.cyberark.username"));
-
- HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create(url))
- .header("Content-Type", "text/plain")
-
.POST(HttpRequest.BodyPublishers.ofString(System.getProperty("camel.cyberark.apiKey")))
- .build();
-
- HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
-
- if (response.statusCode() == 200) {
- return response.body();
- }
- throw new IOException("Failed to authenticate: " +
response.statusCode());
- }
-
- private static void createSecret(String secretId, String secretValue) {
- try {
- String url = String.format("%s/secrets/%s/variable/%s",
- System.getProperty("camel.cyberark.url"),
- System.getProperty("camel.cyberark.account"),
- secretId);
-
- HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create(url))
- .header("Authorization", "Token token=\"" +
Base64.getEncoder()
-
.encodeToString(authToken.getBytes(StandardCharsets.UTF_8)) + "\"")
- .header("Content-Type", "application/octet-stream")
- .POST(HttpRequest.BodyPublishers.ofString(secretValue))
- .build();
-
- HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
- LOG.info("Created secret '{}': HTTP {}", secretId,
response.statusCode());
- } catch (Exception e) {
- LOG.warn("Could not create secret '{}': {}", secretId,
e.getMessage());
- // Continue anyway - some tests expect missing secrets
- }
- }
-
@Test
public void testSimpleSecretRetrieval() throws Exception {
-
context.getVaultConfiguration().cyberark().setUrl(System.getProperty("camel.cyberark.url"));
-
context.getVaultConfiguration().cyberark().setAccount(System.getProperty("camel.cyberark.account"));
-
context.getVaultConfiguration().cyberark().setUsername(System.getProperty("camel.cyberark.username"));
-
context.getVaultConfiguration().cyberark().setApiKey(System.getProperty("camel.cyberark.apiKey"));
+ CyberArkVaultConfiguration cyberark =
context.getVaultConfiguration().cyberark();
+ cyberark.setUrl(System.getProperty("camel.cyberark.url"));
+ cyberark.setAccount(System.getProperty("camel.cyberark.account"));
+ cyberark.setUsername(System.getProperty("camel.cyberark.username"));
+ cyberark.setApiKey(System.getProperty("camel.cyberark.apiKey"));
context.addRoutes(new RouteBuilder() {
@Override
@@ -142,10 +85,11 @@ public class CyberArkVaultPropertiesSourceIT extends
CamelTestSupport {
@Test
public void testJsonFieldExtraction() throws Exception {
-
context.getVaultConfiguration().cyberark().setUrl(System.getProperty("camel.cyberark.url"));
-
context.getVaultConfiguration().cyberark().setAccount(System.getProperty("camel.cyberark.account"));
-
context.getVaultConfiguration().cyberark().setUsername(System.getProperty("camel.cyberark.username"));
-
context.getVaultConfiguration().cyberark().setApiKey(System.getProperty("camel.cyberark.apiKey"));
+ CyberArkVaultConfiguration cyberark =
context.getVaultConfiguration().cyberark();
+ cyberark.setUrl(System.getProperty("camel.cyberark.url"));
+ cyberark.setAccount(System.getProperty("camel.cyberark.account"));
+ cyberark.setUsername(System.getProperty("camel.cyberark.username"));
+ cyberark.setApiKey(System.getProperty("camel.cyberark.apiKey"));
context.addRoutes(new RouteBuilder() {
@Override
@@ -168,10 +112,11 @@ public class CyberArkVaultPropertiesSourceIT extends
CamelTestSupport {
@Test
public void testDefaultValue() throws Exception {
-
context.getVaultConfiguration().cyberark().setUrl(System.getProperty("camel.cyberark.url"));
-
context.getVaultConfiguration().cyberark().setAccount(System.getProperty("camel.cyberark.account"));
-
context.getVaultConfiguration().cyberark().setUsername(System.getProperty("camel.cyberark.username"));
-
context.getVaultConfiguration().cyberark().setApiKey(System.getProperty("camel.cyberark.apiKey"));
+ CyberArkVaultConfiguration cyberark =
context.getVaultConfiguration().cyberark();
+ cyberark.setUrl(System.getProperty("camel.cyberark.url"));
+ cyberark.setAccount(System.getProperty("camel.cyberark.account"));
+ cyberark.setUsername(System.getProperty("camel.cyberark.username"));
+ cyberark.setApiKey(System.getProperty("camel.cyberark.apiKey"));
context.addRoutes(new RouteBuilder() {
@Override
@@ -190,10 +135,11 @@ public class CyberArkVaultPropertiesSourceIT extends
CamelTestSupport {
@Test
public void testFieldWithDefaultValue() throws Exception {
-
context.getVaultConfiguration().cyberark().setUrl(System.getProperty("camel.cyberark.url"));
-
context.getVaultConfiguration().cyberark().setAccount(System.getProperty("camel.cyberark.account"));
-
context.getVaultConfiguration().cyberark().setUsername(System.getProperty("camel.cyberark.username"));
-
context.getVaultConfiguration().cyberark().setApiKey(System.getProperty("camel.cyberark.apiKey"));
+ CyberArkVaultConfiguration cyberark =
context.getVaultConfiguration().cyberark();
+ cyberark.setUrl(System.getProperty("camel.cyberark.url"));
+ cyberark.setAccount(System.getProperty("camel.cyberark.account"));
+ cyberark.setUsername(System.getProperty("camel.cyberark.username"));
+ cyberark.setApiKey(System.getProperty("camel.cyberark.apiKey"));
context.addRoutes(new RouteBuilder() {
@Override
diff --git
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/README.md
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/README.md
index eb004ebc56dc..cc21a3a0c770 100644
---
a/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/README.md
+++
b/components/camel-cyberark-vault/src/test/java/org/apache/camel/component/cyberark/vault/integration/README.md
@@ -44,7 +44,7 @@ Tests for complex scenarios with multiple secrets:
The tests require the following system properties:
- `camel.cyberark.url` - CyberArk Conjur URL (e.g., `http://localhost:8080`)
-- `camel.cyberark.account` - Conjur account name (e.g., `myAccount`)
+- `camel.cyberark.account` - Conjur account name (e.g., `myConjurAccount`)
- `camel.cyberark.username` - Admin username (e.g., `admin`)
- `camel.cyberark.apiKey` - Admin API key
@@ -54,7 +54,7 @@ The tests require the following system properties:
cd components/camel-cyberark-vault
mvn clean verify \
-Dcamel.cyberark.url=http://localhost:8080 \
- -Dcamel.cyberark.account=myAccount \
+ -Dcamel.cyberark.account=myConjurAccount \
-Dcamel.cyberark.username=admin \
-Dcamel.cyberark.apiKey=your-api-key
```
@@ -64,7 +64,7 @@ mvn clean verify \
```bash
mvn clean verify -Dit.test=CyberArkVaultPropertiesSourceIT \
-Dcamel.cyberark.url=http://localhost:8080 \
- -Dcamel.cyberark.account=myAccount \
+ -Dcamel.cyberark.account=myConjurAccount \
-Dcamel.cyberark.username=admin \
-Dcamel.cyberark.apiKey=your-api-key
```
@@ -74,7 +74,7 @@ mvn clean verify -Dit.test=CyberArkVaultPropertiesSourceIT \
```bash
mvn clean verify
-Dit.test=CyberArkVaultPropertiesSourceIT#testSimpleSecretRetrieval \
-Dcamel.cyberark.url=http://localhost:8080 \
- -Dcamel.cyberark.account=myAccount \
+ -Dcamel.cyberark.account=myConjurAccount \
-Dcamel.cyberark.username=admin \
-Dcamel.cyberark.apiKey=your-api-key
```
@@ -98,21 +98,27 @@ Use the official CyberArk Conjur quickstart setup:
git clone https://github.com/cyberark/conjur-quickstart.git
cd conjur-quickstart
+# Generate the master key
+docker compose run --no-deps --rm conjur data-key generate > data_key
+
+# Load master key as an environment variable
+export CONJUR_DATA_KEY="$(< data_key)"
+
# Start Conjur and database
-docker-compose up -d
+docker compose up -d
-# Wait for services to be ready
-sleep 10
+# Create an admin account (in another terminal)
+docker compose exec conjur conjurctl account create myConjurAccount >
admin_data
-# The admin API key will be displayed in the logs
-docker-compose logs conjur | grep "admin API key"
+# The admin API key will be in the admin_data file
+cat admin_data | grep "API key"
```
Default connection details:
- **URL**: `http://localhost:8080`
- **Account**: `myConjurAccount`
- **Username**: `admin`
-- **API Key**: Check container logs
+- **API Key**: See admin_data
### Option 2: Using Existing Conjur Instance
@@ -219,7 +225,7 @@ If you see messages like `CyberArk Conjur URL not
provided`, ensure you're passi
```bash
mvn verify \
-Dcamel.cyberark.url=http://localhost:8080 \
- -Dcamel.cyberark.account=myAccount \
+ -Dcamel.cyberark.account=myConjurAccount \
-Dcamel.cyberark.username=admin \
-Dcamel.cyberark.apiKey=your-api-key
```
@@ -287,14 +293,14 @@ jobs:
# Wait for Conjur to start
sleep 10
# Create account and extract API key
- API_KEY=$(docker exec conjur conjurctl account create myAccount |
grep "API key" | awk '{print $NF}')
+ API_KEY=$(docker exec conjur conjurctl account create
myConjurAccount | grep "API key" | awk '{print $NF}')
echo "CONJUR_API_KEY=$API_KEY" >> $GITHUB_ENV
- name: Run Integration Tests
run: |
mvn clean verify \
-Dcamel.cyberark.url=http://localhost:8080 \
- -Dcamel.cyberark.account=myAccount \
+ -Dcamel.cyberark.account=myConjurAccount \
-Dcamel.cyberark.username=admin \
-Dcamel.cyberark.apiKey=${{ env.CONJUR_API_KEY }}
```
@@ -318,10 +324,10 @@ pipeline {
stage('Run Integration Tests') {
steps {
sh '''
- API_KEY=$(docker exec conjur conjurctl account create
myAccount | grep "API key" | awk '{print $NF}')
+ API_KEY=$(docker exec conjur conjurctl account create
myConjurAccount | grep "API key" | awk '{print $NF}')
mvn clean verify \
-Dcamel.cyberark.url=http://localhost:8080 \
- -Dcamel.cyberark.account=myAccount \
+ -Dcamel.cyberark.account=myConjurAccount \
-Dcamel.cyberark.username=admin \
-Dcamel.cyberark.apiKey=$API_KEY
'''