This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new c53bbd085f Make Jasypt SmallRye Config integration operate only on runtime properties c53bbd085f is described below commit c53bbd085f94f7405cf9312e74b81ef4589eab11 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Mon Apr 22 11:30:07 2024 +0100 Make Jasypt SmallRye Config integration operate only on runtime properties Fixes #5946 --- .../jasypt/deployment/JasyptProcessor.java | 32 ++++++++++++++++------ .../quarkus/component/jasypt/JasyptDevUITest.java | 2 -- .../CamelJasyptConfigSourceInterceptorFactory.java | 9 +----- .../component/jasypt/CamelJasyptRecorder.java | 17 +++++------- .../jasypt/CamelJasyptRuntimeConfigBuilder.java | 28 +++++++++++++++++++ .../CamelJasyptSecretKeysHandlerFactory.java | 14 ++-------- ....smallrye.config.ConfigSourceInterceptorFactory | 1 - .../io.smallrye.config.SecretKeysHandlerFactory | 1 - integration-tests/jasypt/pom.xml | 9 ------ .../jasypt/it/JasyptSecureExtensionConfigTest.java | 9 ------ .../it/JasyptSecureExtensionConfigTestProfile.java | 8 ------ 11 files changed, 61 insertions(+), 69 deletions(-) diff --git a/extensions/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java b/extensions/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java index ee9595c1d6..bd87b43d00 100644 --- a/extensions/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java +++ b/extensions/jasypt/deployment/src/main/java/org/apache/camel/quarkus/component/jasypt/deployment/JasyptProcessor.java @@ -16,16 +16,19 @@ */ package org.apache.camel.quarkus.component.jasypt.deployment; +import java.util.function.BooleanSupplier; + import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.annotations.ExecutionTime; import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.deployment.builditem.RunTimeConfigBuilderBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; import org.apache.camel.quarkus.component.jasypt.CamelJasyptBuildTimeConfig; -import org.apache.camel.quarkus.component.jasypt.CamelJasyptConfig; import org.apache.camel.quarkus.component.jasypt.CamelJasyptRecorder; +import org.apache.camel.quarkus.component.jasypt.CamelJasyptRuntimeConfigBuilder; import org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer; import org.apache.camel.quarkus.core.deployment.main.spi.CamelMainBuildItem; import org.apache.camel.quarkus.core.deployment.spi.RuntimeCamelContextCustomizerBuildItem; @@ -53,21 +56,32 @@ class JasyptProcessor { } @Record(ExecutionTime.RUNTIME_INIT) - @BuildStep + @BuildStep(onlyIf = CamelJasyptEnabled.class) void disableCamelMainAutoConfigFromSysEnv( CamelMainBuildItem camelMain, - CamelJasyptConfig config, CamelJasyptRecorder recorder) { // Avoid camel-main overriding system / environment config values that were already resolved by SmallRye config. // Else there's the potential for encrypted property values to be overridden with their raw ENC(..) form - recorder.disableCamelMainAutoConfigFromSysEnv(camelMain.getInstance(), config); + recorder.disableCamelMainAutoConfigFromSysEnv(camelMain.getInstance()); } @Record(ExecutionTime.RUNTIME_INIT) - @BuildStep - RuntimeCamelContextCustomizerBuildItem propertiesComponentRuntimeCamelContextCustomizer( - CamelJasyptBuildTimeConfig config, - CamelJasyptRecorder recorder) { - return new RuntimeCamelContextCustomizerBuildItem(recorder.createPropertiesComponentCamelContextCustomizer(config)); + @BuildStep(onlyIf = CamelJasyptEnabled.class) + RuntimeCamelContextCustomizerBuildItem propertiesComponentRuntimeCamelContextCustomizer(CamelJasyptRecorder recorder) { + return new RuntimeCamelContextCustomizerBuildItem(recorder.createPropertiesComponentCamelContextCustomizer()); + } + + @BuildStep(onlyIf = CamelJasyptEnabled.class) + RunTimeConfigBuilderBuildItem jasyptRuntimeConfigBuilder() { + return new RunTimeConfigBuilderBuildItem(CamelJasyptRuntimeConfigBuilder.class.getName()); + } + + static final class CamelJasyptEnabled implements BooleanSupplier { + CamelJasyptBuildTimeConfig config; + + @Override + public boolean getAsBoolean() { + return config.enabled; + } } } diff --git a/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptDevUITest.java b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptDevUITest.java index 17445d072d..cd770f4d77 100644 --- a/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptDevUITest.java +++ b/extensions/jasypt/deployment/src/test/java/org/apache/camel/quarkus/component/jasypt/JasyptDevUITest.java @@ -23,14 +23,12 @@ import io.quarkus.test.QuarkusDevModeTest; import org.apache.camel.util.ObjectHelper; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@Disabled("https://github.com/apache/camel-quarkus/issues/5946") public class JasyptDevUITest extends DevUIJsonRPCTest { @RegisterExtension static final QuarkusDevModeTest CONFIG = new QuarkusDevModeTest().withEmptyApplication(); diff --git a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfigSourceInterceptorFactory.java b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfigSourceInterceptorFactory.java index b6210f813f..8e04ad57ff 100644 --- a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfigSourceInterceptorFactory.java +++ b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptConfigSourceInterceptorFactory.java @@ -32,20 +32,13 @@ import org.jasypt.properties.PropertyValueEncryptionUtils; * requirement for the user automatically. */ public class CamelJasyptConfigSourceInterceptorFactory implements ConfigSourceInterceptorFactory { - private boolean enabled = true; - @Override public ConfigSourceInterceptor getInterceptor(ConfigSourceInterceptorContext context) { - ConfigValue enabledConfigValue = context.proceed("quarkus.camel.jasypt.enabled"); - if (enabledConfigValue != null) { - enabled = Boolean.parseBoolean(enabledConfigValue.getValue()); - } - return new ConfigSourceInterceptor() { @Override public ConfigValue getValue(ConfigSourceInterceptorContext context, String name) { ConfigValue configValue = context.proceed(name); - if (enabled && configValue != null) { + if (configValue != null) { String value = configValue.getValue(); if (PropertyValueEncryptionUtils.isEncryptedValue(value)) { return configValue.withValue("${camel-jasypt::%s}".formatted(value)); diff --git a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRecorder.java b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRecorder.java index b917307f73..9e8df12d55 100644 --- a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRecorder.java +++ b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRecorder.java @@ -27,25 +27,22 @@ import org.apache.camel.spi.CamelContextCustomizer; @Recorder public class CamelJasyptRecorder { - public void disableCamelMainAutoConfigFromSysEnv(RuntimeValue<CamelMain> camelMainRuntimeValue, CamelJasyptConfig config) { + public void disableCamelMainAutoConfigFromSysEnv(RuntimeValue<CamelMain> camelMainRuntimeValue) { CamelMain main = camelMainRuntimeValue.getValue(); MainConfigurationProperties configurationProperties = main.getMainConfigurationProperties(); configurationProperties.setAutoConfigurationSystemPropertiesEnabled(false); configurationProperties.setAutoConfigurationEnvironmentVariablesEnabled(false); } - public RuntimeValue<CamelContextCustomizer> createPropertiesComponentCamelContextCustomizer( - CamelJasyptBuildTimeConfig config) { + public RuntimeValue<CamelContextCustomizer> createPropertiesComponentCamelContextCustomizer() { return new RuntimeValue<>(new CamelContextCustomizer() { @Override public void configure(CamelContext camelContext) { - if (config.enabled) { - PropertiesComponent component = (PropertiesComponent) camelContext.getPropertiesComponent(); - JasyptPropertiesParser jasyptPropertiesParser = CamelJasyptPropertiesParserHolder - .getJasyptPropertiesParser(); - jasyptPropertiesParser.setPropertiesComponent(component); - component.setPropertiesParser(jasyptPropertiesParser); - } + PropertiesComponent component = (PropertiesComponent) camelContext.getPropertiesComponent(); + JasyptPropertiesParser jasyptPropertiesParser = CamelJasyptPropertiesParserHolder + .getJasyptPropertiesParser(); + jasyptPropertiesParser.setPropertiesComponent(component); + component.setPropertiesParser(jasyptPropertiesParser); } }); } diff --git a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRuntimeConfigBuilder.java b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRuntimeConfigBuilder.java new file mode 100644 index 0000000000..31e13f8afa --- /dev/null +++ b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptRuntimeConfigBuilder.java @@ -0,0 +1,28 @@ +/* + * 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.quarkus.component.jasypt; + +import io.quarkus.runtime.configuration.ConfigBuilder; +import io.smallrye.config.SmallRyeConfigBuilder; + +public class CamelJasyptRuntimeConfigBuilder implements ConfigBuilder { + @Override + public SmallRyeConfigBuilder configBuilder(SmallRyeConfigBuilder builder) { + return builder.withInterceptorFactories(new CamelJasyptConfigSourceInterceptorFactory()) + .withSecretKeyHandlerFactories(new CamelJasyptSecretKeysHandlerFactory()); + } +} diff --git a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptSecretKeysHandlerFactory.java b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptSecretKeysHandlerFactory.java index 9be3557c04..163baecfce 100644 --- a/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptSecretKeysHandlerFactory.java +++ b/extensions/jasypt/runtime/src/main/java/org/apache/camel/quarkus/component/jasypt/CamelJasyptSecretKeysHandlerFactory.java @@ -58,22 +58,12 @@ public class CamelJasyptSecretKeysHandlerFactory implements SecretKeysHandlerFac @Override public SecretKeysHandler getSecretKeysHandler(ConfigSourceContext context) { - String enabledValue = getConfigValue(context, "enabled", "true"); - if (enabledValue != null) { - enabled = Boolean.parseBoolean(enabledValue); - } - - if (enabled) { - configureJasypt(context); - } + configureJasypt(context); return new SecretKeysHandler() { @Override public String decode(String secret) { - if (enabled) { - return parser.parseProperty("", secret, null); - } - return secret; + return parser.parseProperty("", secret, null); } @Override diff --git a/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.ConfigSourceInterceptorFactory b/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.ConfigSourceInterceptorFactory deleted file mode 100644 index c3222d1ab9..0000000000 --- a/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.ConfigSourceInterceptorFactory +++ /dev/null @@ -1 +0,0 @@ -org.apache.camel.quarkus.component.jasypt.CamelJasyptConfigSourceInterceptorFactory \ No newline at end of file diff --git a/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.SecretKeysHandlerFactory b/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.SecretKeysHandlerFactory deleted file mode 100644 index 95200099fe..0000000000 --- a/extensions/jasypt/runtime/src/main/resources/META-INF/services/io.smallrye.config.SecretKeysHandlerFactory +++ /dev/null @@ -1 +0,0 @@ -org.apache.camel.quarkus.component.jasypt.CamelJasyptSecretKeysHandlerFactory \ No newline at end of file diff --git a/integration-tests/jasypt/pom.xml b/integration-tests/jasypt/pom.xml index b0643f3510..01e2bb650d 100644 --- a/integration-tests/jasypt/pom.xml +++ b/integration-tests/jasypt/pom.xml @@ -63,10 +63,6 @@ <groupId>io.quarkus</groupId> <artifactId>quarkus-agroal</artifactId> </dependency> - <dependency> - <groupId>io.quarkus</groupId> - <artifactId>quarkus-jdbc-h2</artifactId> - </dependency> <!-- test dependencies --> <dependency> @@ -79,11 +75,6 @@ <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> - <dependency> - <groupId>io.quarkus</groupId> - <artifactId>quarkus-test-h2</artifactId> - <scope>test</scope> - </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-integration-test-support</artifactId> diff --git a/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTest.java b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTest.java index b460754309..40a33f2de4 100644 --- a/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTest.java +++ b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTest.java @@ -27,15 +27,6 @@ import static org.hamcrest.Matchers.is; @QuarkusTest @TestProfile(JasyptSecureExtensionConfigTestProfile.class) class JasyptSecureExtensionConfigTest { - @Test - void secureDatabaseCredentials() throws InterruptedException { - RestAssured.given() - .get("/jasypt/secure/database") - .then() - .statusCode(200) - .body(is("camel")); - } - @DisabledIfEnvironmentVariable(named = "CI", matches = "true", disabledReason = "https://github.com/apache/camel-quarkus/issues/5675") @Test void secureDirectComponentTimeout() throws InterruptedException { diff --git a/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTestProfile.java b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTestProfile.java index 38172767bb..bdf7093f9a 100644 --- a/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTestProfile.java +++ b/integration-tests/jasypt/src/test/java/org/apache/camel/quarkus/component/jasypt/it/JasyptSecureExtensionConfigTestProfile.java @@ -26,14 +26,6 @@ public class JasyptSecureExtensionConfigTestProfile implements QuarkusTestProfil @Override public Map<String, String> getConfigOverrides() { return Map.of( - // camel - "quarkus.datasource.devservices.username", - "ENC(ehEx3VxgoFVuReSFsgyUrw==)", - "quarkus.datasource.username", "${camel-jasypt::${quarkus.datasource.devservices.username}}", - // c4m31s3cr3t - "quarkus.datasource.devservices.password", - "ENC(ySRd4rq2bAuKEDe7wvcS37xERpu5+DgK)", - "quarkus.datasource.password", "${camel-jasypt::${quarkus.datasource.devservices.password}}", "camel.component.direct.timeout", "ENC(FGlWjTf42zBT4vCRCztncA==)"); } }