diff --git a/pom.xml b/pom.xml
index a46b87c1..62e0aade 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,8 +51,7 @@
org.springframework.cloud
- spring-cloud-commons
- test-jar
+ spring-cloud-test-support
test
${spring-cloud-commons.version}
diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml
index 114a7423..8fd108c4 100644
--- a/spring-cloud-config-client/pom.xml
+++ b/spring-cloud-config-client/pom.xml
@@ -78,8 +78,7 @@
org.springframework.cloud
- spring-cloud-commons
- test-jar
+ spring-cloud-test-support
test
diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/DiscoveryClientConfigServiceBootstrapConfigurationNoSpringRetryTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/DiscoveryClientConfigServiceBootstrapConfigurationNoSpringRetryTests.java
index f57831e3..0c31cac2 100644
--- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/DiscoveryClientConfigServiceBootstrapConfigurationNoSpringRetryTests.java
+++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/DiscoveryClientConfigServiceBootstrapConfigurationNoSpringRetryTests.java
@@ -2,10 +2,11 @@ package org.springframework.cloud.config.client;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.springframework.cloud.ClassPathExclusions;
-import org.springframework.cloud.FilteredClassPathRunner;
-@RunWith(FilteredClassPathRunner.class)
+import org.springframework.cloud.test.ClassPathExclusions;
+import org.springframework.cloud.test.ModifiedClassPathRunner;
+
+@RunWith(ModifiedClassPathRunner.class)
@ClassPathExclusions({ "spring-retry-*.jar", "spring-boot-starter-aop-*.jar" })
public class DiscoveryClientConfigServiceBootstrapConfigurationNoSpringRetryTests
extends BaseDiscoveryClientConfigServiceBootstrapConfigurationTests {
diff --git a/spring-cloud-config-monitor/src/test/java/org/springframework/cloud/config/monitor/EnvironmentMonitorAutoConfigurationTests.java b/spring-cloud-config-monitor/src/test/java/org/springframework/cloud/config/monitor/EnvironmentMonitorAutoConfigurationTests.java
index dc9dba3a..58a54f2e 100644
--- a/spring-cloud-config-monitor/src/test/java/org/springframework/cloud/config/monitor/EnvironmentMonitorAutoConfigurationTests.java
+++ b/spring-cloud-config-monitor/src/test/java/org/springframework/cloud/config/monitor/EnvironmentMonitorAutoConfigurationTests.java
@@ -22,6 +22,8 @@ import java.util.Map;
import org.junit.Test;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -41,8 +43,7 @@ public class EnvironmentMonitorAutoConfigurationTests {
public void test() {
ConfigurableApplicationContext context = new SpringApplicationBuilder(
EnvironmentMonitorAutoConfiguration.class,
- // FIXME EmbeddedServletContainerAutoConfiguration.class,
- // ServerPropertiesAutoConfiguration.class,
+ ServletWebServerFactoryAutoConfiguration.class, ServerProperties.class,
PropertyPlaceholderAutoConfiguration.class).properties("server.port=-1")
.run();
PropertyPathEndpoint endpoint = context.getBean(PropertyPathEndpoint.class);
@@ -58,8 +59,7 @@ public class EnvironmentMonitorAutoConfigurationTests {
ConfigurableApplicationContext context = new SpringApplicationBuilder(
CustomPropertyPathNotificationExtractorConfig.class,
EnvironmentMonitorAutoConfiguration.class,
- // FIXME EmbeddedServletContainerAutoConfiguration.class,
- // ServerPropertiesAutoConfiguration.class,
+ ServletWebServerFactoryAutoConfiguration.class, ServerProperties.class,
PropertyPlaceholderAutoConfiguration.class).properties("server.port=-1")
.run();
PropertyPathEndpoint endpoint = context.getBean(PropertyPathEndpoint.class);
diff --git a/spring-cloud-config-sample/src/test/java/sample/ApplicationTests.java b/spring-cloud-config-sample/src/test/java/sample/ApplicationTests.java
index 1f186542..28c056c0 100644
--- a/spring-cloud-config-sample/src/test/java/sample/ApplicationTests.java
+++ b/spring-cloud-config-sample/src/test/java/sample/ApplicationTests.java
@@ -13,6 +13,7 @@ import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.cloud.config.server.test.ConfigServerTestUtils;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.SocketUtils;
import static org.junit.Assert.assertEquals;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
@@ -25,7 +26,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
"management.security.enabled=false" }, webEnvironment = RANDOM_PORT)
public class ApplicationTests {
- private static int configPort = 0;
+ private static int configPort = SocketUtils.findAvailableTcpPort();
@LocalServerPort
private int port;
@@ -58,7 +59,7 @@ public class ApplicationTests {
@Test
public void contextLoads() {
String foo = new TestRestTemplate()
- .getForObject("http://localhost:" + port + "/env/info.foo", String.class);
+ .getForObject("http://localhost:" + port + "/application/env/info.foo", String.class);
assertEquals("{\"info.foo\":\"bar\"}", foo);
}
diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml
index 3091d13a..6e00ee44 100644
--- a/spring-cloud-config-server/pom.xml
+++ b/spring-cloud-config-server/pom.xml
@@ -72,7 +72,6 @@
UTF-8
${project.version}
org.springframework.cloud.config.server.ConfigServerApplication
- 1.7
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 6714c352..4733911e 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
@@ -29,6 +29,7 @@ import org.springframework.cloud.config.server.environment.SvnKitEnvironmentRepo
import org.springframework.cloud.config.server.environment.VaultEnvironmentRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.web.client.RestTemplate;
@@ -39,79 +40,18 @@ import org.springframework.web.client.RestTemplate;
*
*/
@Configuration
+@Import({ VaultRepositoryConfiguration.class, SvnRepositoryConfiguration.class,
+ NativeRepositoryConfiguration.class, GitRepositoryConfiguration.class,
+ DefaultRepositoryConfiguration.class })
public class EnvironmentRepositoryConfiguration {
@Bean
@ConditionalOnProperty(value = "spring.cloud.config.server.health.enabled", matchIfMissing = true)
- public ConfigServerHealthIndicator configServerHealthIndicator(EnvironmentRepository repository) {
+ public ConfigServerHealthIndicator configServerHealthIndicator(
+ EnvironmentRepository repository) {
return new ConfigServerHealthIndicator(repository);
}
- @Configuration
- @ConditionalOnMissingBean(EnvironmentRepository.class)
- protected static class DefaultRepositoryConfiguration {
-
- @Autowired
- private ConfigurableEnvironment environment;
-
- @Autowired
- private ConfigServerProperties server;
-
- @Bean
- public MultipleJGitEnvironmentRepository defaultEnvironmentRepository() {
- MultipleJGitEnvironmentRepository repository = new MultipleJGitEnvironmentRepository(this.environment);
- if (this.server.getDefaultLabel()!=null) {
- repository.setDefaultLabel(this.server.getDefaultLabel());
- }
- return repository;
- }
- }
-
- @Configuration
- @Profile("native")
- protected static class NativeRepositoryConfiguration {
-
- @Autowired
- private ConfigurableEnvironment environment;
-
- @Bean
- public NativeEnvironmentRepository nativeEnvironmentRepository() {
- return new NativeEnvironmentRepository(this.environment);
- }
- }
-
- @Configuration
- @Profile("git")
- protected static class GitRepositoryConfiguration extends DefaultRepositoryConfiguration {}
-
- @Configuration
- @Profile("subversion")
- protected static class SvnRepositoryConfiguration {
- @Autowired
- private ConfigurableEnvironment environment;
-
- @Autowired
- private ConfigServerProperties server;
-
- @Bean
- public SvnKitEnvironmentRepository svnKitEnvironmentRepository() {
- SvnKitEnvironmentRepository repository = new SvnKitEnvironmentRepository(this.environment);
- if (this.server.getDefaultLabel()!=null) {
- repository.setDefaultLabel(this.server.getDefaultLabel());
- }
- return repository;
- }
- }
-
- @Configuration
- @Profile("vault")
- protected static class VaultConfiguration {
- @Bean
- public VaultEnvironmentRepository vaultEnvironmentRepository(HttpServletRequest request, EnvironmentWatch watch) {
- return new VaultEnvironmentRepository(request, watch, new RestTemplate());
- }
- }
-
@Configuration
@ConditionalOnProperty(value = "spring.cloud.config.server.consul.watch.enabled")
protected static class ConsulEnvironmentWatchConfiguration {
@@ -132,3 +72,73 @@ public class EnvironmentRepositoryConfiguration {
}
}
}
+
+@Configuration
+@ConditionalOnMissingBean(EnvironmentRepository.class)
+class DefaultRepositoryConfiguration {
+
+ @Autowired
+ private ConfigurableEnvironment environment;
+
+ @Autowired
+ private ConfigServerProperties server;
+
+ @Bean
+ public MultipleJGitEnvironmentRepository defaultEnvironmentRepository() {
+ MultipleJGitEnvironmentRepository repository = new MultipleJGitEnvironmentRepository(
+ this.environment);
+ if (this.server.getDefaultLabel() != null) {
+ repository.setDefaultLabel(this.server.getDefaultLabel());
+ }
+ return repository;
+ }
+}
+
+@Configuration
+@ConditionalOnMissingBean(EnvironmentRepository.class)
+@Profile("native")
+class NativeRepositoryConfiguration {
+
+ @Autowired
+ private ConfigurableEnvironment environment;
+
+ @Bean
+ public NativeEnvironmentRepository nativeEnvironmentRepository() {
+ return new NativeEnvironmentRepository(this.environment);
+ }
+}
+
+@Configuration
+@Profile("git")
+class GitRepositoryConfiguration extends DefaultRepositoryConfiguration {
+}
+
+@Configuration
+@Profile("subversion")
+class SvnRepositoryConfiguration {
+ @Autowired
+ private ConfigurableEnvironment environment;
+
+ @Autowired
+ private ConfigServerProperties server;
+
+ @Bean
+ public SvnKitEnvironmentRepository svnKitEnvironmentRepository() {
+ SvnKitEnvironmentRepository repository = new SvnKitEnvironmentRepository(
+ this.environment);
+ if (this.server.getDefaultLabel() != null) {
+ repository.setDefaultLabel(this.server.getDefaultLabel());
+ }
+ return repository;
+ }
+}
+
+@Configuration
+@Profile("vault")
+class VaultRepositoryConfiguration {
+ @Bean
+ public VaultEnvironmentRepository vaultEnvironmentRepository(
+ HttpServletRequest request, EnvironmentWatch watch) {
+ return new VaultEnvironmentRepository(request, watch, new RestTemplate());
+ }
+}
diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EncryptionController.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EncryptionController.java
index fb057871..ce38f0c4 100644
--- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EncryptionController.java
+++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EncryptionController.java
@@ -31,6 +31,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.codec.Hex;
import org.springframework.security.crypto.encrypt.TextEncryptor;
import org.springframework.security.rsa.crypto.RsaKeyHolder;
+import org.springframework.util.Base64Utils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@@ -147,12 +148,11 @@ public class EncryptionController {
@RequestBody String data, @RequestHeader("Content-Type") MediaType type) {
checkEncryptorInstalled(name, profiles);
try {
- String input = stripFormData(data, type, true);
+ String input = stripFormData(this.helper.stripPrefix(data), type, true);
Map encryptorKeys = this.helper.getEncryptorKeys(name,
- profiles, input);
+ profiles, data);
TextEncryptor encryptor = this.encryptor.locate(encryptorKeys);
- String encryptedText = this.helper.stripPrefix(input);
- String decrypted = encryptor.decrypt(encryptedText);
+ String decrypted = encryptor.decrypt(input);
logger.info("Decrypted cipher data");
return decrypted;
}
@@ -191,6 +191,12 @@ public class EncryptionController {
return candidate;
}
catch (IllegalArgumentException e) {
+ try {
+ Base64Utils.decode(candidate.getBytes());
+ return candidate;
+ }
+ catch (IllegalArgumentException ex) {
+ }
}
}
}
diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/MultipleJGitEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/MultipleJGitEnvironmentRepository.java
index 83e335ae..eb0eb377 100644
--- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/MultipleJGitEnvironmentRepository.java
+++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/MultipleJGitEnvironmentRepository.java
@@ -236,11 +236,6 @@ public class MultipleJGitEnvironmentRepository extends JGitEnvironmentRepository
super(null);
}
- public PatternMatchingJGitEnvironmentRepository(String uri) {
- this();
- setUri(uri);
- }
-
public boolean matches(String application, String profile, String label) {
if (this.pattern == null || this.pattern.length == 0) {
return false;
diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java
index 15934e88..7b254b36 100644
--- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java
+++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java
@@ -26,6 +26,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.boot.Banner.Mode;
+import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.config.ConfigFileApplicationListener;
@@ -100,7 +101,7 @@ public class NativeEnvironmentRepository implements EnvironmentRepository, Searc
PropertyPlaceholderAutoConfiguration.class);
ConfigurableEnvironment environment = getEnvironment(profile);
builder.environment(environment);
- builder.web(false).bannerMode(Mode.OFF);
+ builder.web(WebApplicationType.NONE).bannerMode(Mode.OFF);
if (!logger.isDebugEnabled()) {
// Make the mini-application startup less verbose
builder.logStartupInfo(false);
diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/PassthruEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/PassthruEnvironmentRepository.java
index 7f688aa9..c10ff5f5 100644
--- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/PassthruEnvironmentRepository.java
+++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/PassthruEnvironmentRepository.java
@@ -18,6 +18,7 @@ package org.springframework.cloud.config.server.environment;
import java.util.Arrays;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
@@ -40,8 +41,7 @@ public class PassthruEnvironmentRepository implements EnvironmentRepository {
private static final String DEFAULT_LABEL = "master";
- private Set standardSources = new HashSet(Arrays.asList(
- "vcap",
+ private Set standardSources = new HashSet(Arrays.asList("vcap",
StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME,
StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME,
StandardServletEnvironment.JNDI_PROPERTY_SOURCE_NAME,
@@ -60,15 +60,29 @@ public class PassthruEnvironmentRepository implements EnvironmentRepository {
@Override
public Environment findOne(String application, String env, String label) {
- Environment result = new Environment(application, StringUtils.commaDelimitedListToStringArray(env), label, null, null);
- for (org.springframework.core.env.PropertySource> source : this.environment.getPropertySources()) {
+ Environment result = new Environment(application,
+ StringUtils.commaDelimitedListToStringArray(env), label, null, null);
+ for (org.springframework.core.env.PropertySource> source : this.environment
+ .getPropertySources()) {
String name = source.getName();
- if (!this.standardSources.contains(name) && source instanceof MapPropertySource) {
- result.add(new PropertySource(name, (Map, ?>) source.getSource()));
+ if (!this.standardSources.contains(name)
+ && source instanceof MapPropertySource) {
+ result.add(new PropertySource(name, getMap(source)));
}
}
return result;
}
+ private Map, ?> getMap(org.springframework.core.env.PropertySource> source) {
+ Map