diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java index e73b3d60..dcdfcb49 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java @@ -75,6 +75,7 @@ import org.springframework.cloud.config.server.environment.VaultEnvironmentRepos import org.springframework.cloud.config.server.environment.vault.SpringVaultClientConfiguration; import org.springframework.cloud.config.server.environment.vault.SpringVaultEnvironmentRepository; import org.springframework.cloud.config.server.environment.vault.SpringVaultEnvironmentRepositoryFactory; +import org.springframework.cloud.config.server.support.GitCredentialsProviderFactory; import org.springframework.cloud.config.server.support.GoogleCloudSourceSupport; import org.springframework.cloud.config.server.support.TransportConfigCallbackFactory; import org.springframework.context.annotation.Bean; @@ -163,11 +164,18 @@ public class EnvironmentRepositoryConfiguration { ConfigurableEnvironment environment, ConfigServerProperties server, Optional jgitHttpConnectionFactory, Optional customTransportConfigCallback, - Optional googleCloudSourceSupport) { + Optional googleCloudSourceSupport, + GitCredentialsProviderFactory gitCredentialsProviderFactory) { final TransportConfigCallbackFactory transportConfigCallbackFactory = new TransportConfigCallbackFactory( customTransportConfigCallback.orElse(null), googleCloudSourceSupport.orElse(null)); return new MultipleJGitEnvironmentRepositoryFactory(environment, server, jgitHttpConnectionFactory, - transportConfigCallbackFactory); + transportConfigCallbackFactory, gitCredentialsProviderFactory); + } + + @Bean + @ConditionalOnMissingBean + public GitCredentialsProviderFactory gitCredentialsProviderFactory() { + return new GitCredentialsProviderFactory(); } } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/MultipleJGitEnvironmentRepositoryFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/MultipleJGitEnvironmentRepositoryFactory.java index f63a8203..d99cd404 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/MultipleJGitEnvironmentRepositoryFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/MultipleJGitEnvironmentRepositoryFactory.java @@ -21,6 +21,7 @@ import java.util.Optional; import org.eclipse.jgit.transport.HttpTransport; import org.springframework.cloud.config.server.config.ConfigServerProperties; +import org.springframework.cloud.config.server.support.GitCredentialsProviderFactory; import org.springframework.cloud.config.server.support.TransportConfigCallbackFactory; import org.springframework.core.env.ConfigurableEnvironment; @@ -38,19 +39,32 @@ public class MultipleJGitEnvironmentRepositoryFactory private final TransportConfigCallbackFactory transportConfigCallbackFactory; + private final GitCredentialsProviderFactory gitCredentialsProviderFactory; + @Deprecated public MultipleJGitEnvironmentRepositoryFactory(ConfigurableEnvironment environment, ConfigServerProperties server, TransportConfigCallbackFactory transportConfigCallbackFactory) { - this(environment, server, Optional.empty(), transportConfigCallbackFactory); + this(environment, server, Optional.empty(), transportConfigCallbackFactory, + new GitCredentialsProviderFactory()); + } + + @Deprecated + public MultipleJGitEnvironmentRepositoryFactory(ConfigurableEnvironment environment, ConfigServerProperties server, + Optional connectionFactory, + TransportConfigCallbackFactory transportConfigCallbackFactory) { + this(environment, server, connectionFactory, transportConfigCallbackFactory, + new GitCredentialsProviderFactory()); } public MultipleJGitEnvironmentRepositoryFactory(ConfigurableEnvironment environment, ConfigServerProperties server, Optional connectionFactory, - TransportConfigCallbackFactory transportConfigCallbackFactory) { + TransportConfigCallbackFactory transportConfigCallbackFactory, + GitCredentialsProviderFactory gitCredentialsProviderFactory) { this.environment = environment; this.server = server; this.connectionFactory = connectionFactory; this.transportConfigCallbackFactory = transportConfigCallbackFactory; + this.gitCredentialsProviderFactory = gitCredentialsProviderFactory; } @Override @@ -67,6 +81,7 @@ public class MultipleJGitEnvironmentRepositoryFactory if (this.server.getDefaultLabel() != null) { repository.setDefaultLabel(this.server.getDefaultLabel()); } + repository.setGitCredentialsProviderFactory(gitCredentialsProviderFactory); return repository; } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfigurationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfigurationTests.java index 94e68c26..ae59cf8b 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfigurationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfigurationTests.java @@ -19,10 +19,12 @@ package org.springframework.cloud.config.server.config; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.cloud.config.server.environment.ConfigTokenProvider; import org.springframework.cloud.config.server.environment.EnvironmentConfigTokenProvider; +import org.springframework.cloud.config.server.support.GitCredentialsProviderFactory; import org.springframework.context.annotation.Bean; import static org.assertj.core.api.Assertions.assertThat; @@ -49,6 +51,19 @@ public class EnvironmentRepositoryConfigurationTests { }); } + @Test + public void customGitCredentialsProvider() { + new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(GitTestBeans.class, TestBeans.class, + EnvironmentRepositoryConfiguration.class)) + .withPropertyValues("spring.profiles.active=git", + "spring.cloud.config.server.git.uri=http://github.com/user/test") + .run((context) -> { + assertThat(context.getBean(GitCredentialsProviderFactory.class)) + .isInstanceOf(GitTestBeans.CustomGitCredentialsProviderFactory.class); + }); + } + @TestConfiguration public static class TestBeans { @@ -60,4 +75,19 @@ public class EnvironmentRepositoryConfigurationTests { } + @TestConfiguration + @AutoConfigureBefore(EnvironmentRepositoryConfiguration.class) + public static class GitTestBeans { + + @Bean + public GitCredentialsProviderFactory customGitCredentialsProviderFactory() { + return new CustomGitCredentialsProviderFactory(); + } + + public static class CustomGitCredentialsProviderFactory extends GitCredentialsProviderFactory { + + } + + } + }