From 183e63115aeccdd4565f34593fea9a270efb74d8 Mon Sep 17 00:00:00 2001 From: Benoit Bordigoni Date: Thu, 21 Mar 2024 10:17:28 +0100 Subject: [PATCH] fix: use a more generic way to convert a Secret into a property --- .../impl/IdentityProviderManagerImpl.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-idp/gravitee-apim-rest-api-idp-core/src/main/java/io/gravitee/rest/api/idp/core/plugin/impl/IdentityProviderManagerImpl.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-idp/gravitee-apim-rest-api-idp-core/src/main/java/io/gravitee/rest/api/idp/core/plugin/impl/IdentityProviderManagerImpl.java index eff3b619142..3c3177d1eeb 100644 --- a/gravitee-apim-rest-api/gravitee-apim-rest-api-idp/gravitee-apim-rest-api-idp-core/src/main/java/io/gravitee/rest/api/idp/core/plugin/impl/IdentityProviderManagerImpl.java +++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-idp/gravitee-apim-rest-api-idp-core/src/main/java/io/gravitee/rest/api/idp/core/plugin/impl/IdentityProviderManagerImpl.java @@ -27,12 +27,17 @@ import io.gravitee.rest.api.idp.core.plugin.IdentityProviderDefinition; import io.gravitee.rest.api.idp.core.plugin.IdentityProviderManager; import java.util.*; +import javax.annotation.Nonnull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Import; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.converter.ConverterFactory; +import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MutablePropertySources; import org.springframework.core.env.StandardEnvironment; @@ -130,7 +135,21 @@ public ConfigurableEnvironment environment() { protected void customizePropertySources(MutablePropertySources propertySources) { propertySources.addFirst(new RelaxedPropertySource(plugin.id(), properties)); super.customizePropertySources(propertySources); - this.getConversionService().addConverter(Secret.class, byte[].class, Secret::asBytes); + + // add missing converters in this newly created environment + // this syntax allows a property of any kind to be converted from a secret. eg. Secret +> String -> Double + this.getConversionService() + .addConverterFactory( + new ConverterFactory() { + final ConversionService conversionService = DefaultConversionService.getSharedInstance(); + + @Nonnull + public Converter getConverter(@Nonnull Class targetType) { + return source -> conversionService.convert(source.asString(), targetType); + } + } + ); + // byte[] has to be created separately this.getConversionService().addConverter(Secret.class, String.class, Secret::asString); } };