This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 9355d2d8fc04aee28a59925f2769ae9ba39ae191 Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Mon Jul 11 15:38:12 2022 +0200 CAMEL-18208 - vault: allow to retrieve a specific secret version/revision - AWS Secret Manager --- .../SecretsManagerPropertiesFunction.java | 19 +++++- .../SecretsManagerPropertiesSourceTestIT.java | 76 ++++++++++++++++++++++ 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerPropertiesFunction.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerPropertiesFunction.java index 2c03c17c4b1..12af442e1b6 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerPropertiesFunction.java +++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerPropertiesFunction.java @@ -136,6 +136,7 @@ public class SecretsManagerPropertiesFunction extends ServiceSupport implements String subkey = null; String returnValue = null; String defaultValue = null; + String version = null; if (remainder.contains("/")) { key = StringHelper.before(remainder, "/"); subkey = StringHelper.after(remainder, "/"); @@ -143,14 +144,25 @@ public class SecretsManagerPropertiesFunction extends ServiceSupport implements if (subkey.contains(":")) { subkey = StringHelper.before(subkey, ":"); } + if (subkey.contains("@")) { + version = StringHelper.after(subkey, "@"); + subkey = StringHelper.before(subkey, "@"); + } } else if (remainder.contains(":")) { key = StringHelper.before(remainder, ":"); defaultValue = StringHelper.after(remainder, ":"); + if (remainder.contains("@")) { + version = StringHelper.after(remainder, "@"); + defaultValue = StringHelper.before(defaultValue, "@"); + } + } else { + key = StringHelper.before(remainder, "@"); + version = StringHelper.after(remainder, "@"); } if (key != null) { try { - returnValue = getSecretFromSource(key, subkey, defaultValue); + returnValue = getSecretFromSource(key, subkey, defaultValue, version); } catch (JsonProcessingException e) { throw new RuntimeCamelException("Something went wrong while recovering " + key + " from vault"); } @@ -160,12 +172,15 @@ public class SecretsManagerPropertiesFunction extends ServiceSupport implements } private String getSecretFromSource( - String key, String subkey, String defaultValue) + String key, String subkey, String defaultValue, String version) throws JsonProcessingException { String returnValue; GetSecretValueRequest request; GetSecretValueRequest.Builder builder = GetSecretValueRequest.builder(); builder.secretId(key); + if (ObjectHelper.isNotEmpty(version)) { + builder.versionId(version); + } request = builder.build(); try { GetSecretValueResponse secret = client.getSecretValue(request); diff --git a/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerPropertiesSourceTestIT.java b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerPropertiesSourceTestIT.java index d6ff0ff0831..099b0233166 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerPropertiesSourceTestIT.java +++ b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerPropertiesSourceTestIT.java @@ -339,4 +339,80 @@ public class SecretsManagerPropertiesSourceTestIT extends CamelTestSupport { template.sendBody("direct:password", "Hello World"); assertMockEndpointsSatisfied(); } + + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_ACCESS_KEY", matches = ".*") + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_SECRET_KEY", matches = ".*") + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_REGION", matches = ".*") + @Test + public void testPropertiesWithVersionFunction() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:version").setBody(simple("{{aws:test/id@e8d0e680-a504-4b70-a9b2-acf5efe0ba23}}")).to("mock:bar"); + } + }); + context.start(); + + getMockEndpoint("mock:bar").expectedBodiesReceived("27"); + + template.sendBody("direct:version", "Hello World"); + assertMockEndpointsSatisfied(); + } + + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_ACCESS_KEY", matches = ".*") + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_SECRET_KEY", matches = ".*") + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_REGION", matches = ".*") + @Test + public void testPropertiesWithVersionAndNoFieldFunction() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:version").setBody(simple("{{aws:test@e8d0e680-a504-4b70-a9b2-acf5efe0ba23}}")).to("mock:bar"); + } + }); + context.start(); + + getMockEndpoint("mock:bar").expectedBodiesReceived("{\"id\":\"27\"}"); + + template.sendBody("direct:version", "Hello World"); + assertMockEndpointsSatisfied(); + } + + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_ACCESS_KEY", matches = ".*") + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_SECRET_KEY", matches = ".*") + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_REGION", matches = ".*") + @Test + public void testPropertiesWithVersionNoFieldAndDefaultValueFunction() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:version").setBody(simple("{{aws:test:pippo@e8d0e680-a504-4b70-a9b2-acf5efe0ba23}}")).to("mock:bar"); + } + }); + context.start(); + + getMockEndpoint("mock:bar").expectedBodiesReceived("{\"id\":\"27\"}"); + + template.sendBody("direct:version", "Hello World"); + assertMockEndpointsSatisfied(); + } + + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_ACCESS_KEY", matches = ".*") + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_SECRET_KEY", matches = ".*") + @EnabledIfEnvironmentVariable(named = "CAMEL_VAULT_AWS_REGION", matches = ".*") + @Test + public void testPropertiesWithVersionNoFieldDefaultValueNotExistentSecretFunction() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:version").setBody(simple("{{aws:test1:pippo@e8d0e680-a504-4b70-a9b2-acf5efe0ba23}}")).to("mock:bar"); + } + }); + context.start(); + + getMockEndpoint("mock:bar").expectedBodiesReceived("pippo"); + + template.sendBody("direct:version", "Hello World"); + assertMockEndpointsSatisfied(); + } }