From a7bd68cf934177547b9a9303c998cad322fb9020 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Thu, 19 Oct 2017 12:03:39 -0400 Subject: [PATCH 1/3] point to build snapshot. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 96124fe9..aca4a35f 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.3.5.RELEASE + 1.3.5.BUILD-SNAPSHOT From ac76f6e970fc450ead13ae8a2adeabbe2901cf53 Mon Sep 17 00:00:00 2001 From: Mihaly Nyeste Date: Fri, 20 Oct 2017 22:19:18 +0200 Subject: [PATCH 2/3] Fix encryption of string containing curly braces (#774) * Add test to reproduce curly brace problem * Fix stripping prefix if string contains curly brace --- .../server/encryption/EnvironmentPrefixHelper.java | 2 +- .../encryption/EncryptionControllerTests.java | 14 ++++++++++++++ .../encryption/EnvironmentPrefixHelperTests.java | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelper.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelper.java index 05a621b5..dca6c40c 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelper.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelper.java @@ -117,7 +117,7 @@ class EnvironmentPrefixHelper { if (value.contains(ESCAPE)) { return value.substring(value.indexOf(ESCAPE) + ESCAPE.length()); } - return value.substring(value.lastIndexOf("}") + 1); + return value.replaceFirst("^(\\{.*?:.*?\\})+", ""); } private String removeEnvironmentPrefix(String input) { diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerTests.java index 2ff4e23c..84a08821 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerTests.java @@ -135,6 +135,20 @@ public class EncryptionControllerTests { assertThat("Prefix must be stripped prior to encrypt", captor.getValue(), not(containsString("{key:test}"))); } + @Test + public void encryptDecyptTextWithCurlyBrace() { + this.controller = new EncryptionController( + new SingleTextEncryptorLocator(new RsaSecretEncryptor())); + + String plain = "textwith}brace"; + + String cipher = this.controller.encrypt(plain, + MediaType.APPLICATION_FORM_URLENCODED); + String decrypt = this.controller.decrypt(cipher, + MediaType.APPLICATION_FORM_URLENCODED); + assertEquals(plain, decrypt); + } + @Test public void addEnvironment() { TextEncryptorLocator locator = new TextEncryptorLocator() { diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelperTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelperTests.java index c9b810aa..b1b997e9 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelperTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelperTests.java @@ -81,4 +81,14 @@ public class EnvironmentPrefixHelperTests { assertEquals("mykey", keys.get("key")); } + @Test + public void testTextWithCurlyBracesNoPrefix() { + assertEquals("textwith}brac{es", this.helper.stripPrefix("textwith}brac{es")); + } + + @Test + public void testTextWithCurlyBracesPrefix() { + assertEquals("textwith}brac{es{and}prefix", this.helper + .stripPrefix("{key:foo}{name:bar}textwith}brac{es{and}prefix")); + } } From b333bd4ff9f98db2a4b92f7776b467ea761f1aa2 Mon Sep 17 00:00:00 2001 From: Sean Dukehart Date: Fri, 20 Oct 2017 16:22:26 -0400 Subject: [PATCH 3/3] Feature/organization project level enablement (#814) * Changes to provide partial functionality for Issue #779 * Corrected formatting * Additional tests to ensure backwards compatibility * Corrected test * Further testing to try to address code coverage concerns * Additional tests to hopefully aid in code coverage diff * Expect exceptions for null name (handle branch coverage) --- .../server/resource/ResourceController.java | 10 ++ .../resource/ResourceControllerTests.java | 93 +++++++++++++++++++ 2 files changed, 103 insertions(+) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java index feea79ae..38065a5b 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java @@ -87,6 +87,11 @@ public class ResourceController { synchronized String retrieve(String name, String profile, String label, String path, boolean resolvePlaceholders) throws IOException { + if (name != null && name.contains("(_)")) { + // "(_)" is uncommon in a git repo name, but "/" cannot be matched + // by Spring MVC + name = name.replace("(_)", "/"); + } if (label != null && label.contains("(_)")) { // "(_)" is uncommon in a git branch name, but "/" cannot be matched // by Spring MVC @@ -116,6 +121,11 @@ public class ResourceController { synchronized byte[] binary(String name, String profile, String label, String path) throws IOException { + if (name != null && name.contains("(_)")) { + // "(_)" is uncommon in a git repo name, but "/" cannot be matched + // by Spring MVC + name = name.replace("(_)", "/"); + } if (label != null && label.contains("(_)")) { // "(_)" is uncommon in a git branch name, but "/" cannot be matched // by Spring MVC diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java index d09fa5d9..9548b014 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java @@ -17,6 +17,7 @@ package org.springframework.cloud.config.server.resource; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.junit.After; @@ -87,6 +88,52 @@ public class ResourceControllerTests { assertEquals("foo: ${foo}", resource); } + @Test + public void applicationAndLabelPlaceholdersWithoutSlash() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{application}/{label}"); + String resource = this.controller.retrieve("dev", "bar", "spam", "foo.txt", true); + assertEquals("foo: dev_bar/spam", resource); + } + + @Test + public void applicationPlaceholderWithSlash() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{application}"); + String resource = this.controller.retrieve("dev(_)spam", "bar", "", "foo.txt", true); + assertEquals("foo: dev_bar/spam", resource); + } + + @Test + public void applicationPlaceholderWithSlashNullLabel() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{application}"); + String resource = this.controller.retrieve("dev(_)spam", "bar", null, "foo.txt", true); + assertEquals("foo: dev_bar/spam", resource); + } + + @Test + public void labelPlaceholderWithSlash() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{label}"); + String resource = this.controller.retrieve("dev", "bar", "dev(_)spam", "foo.txt", true); + assertEquals("foo: dev_bar/spam", resource); + } + + @Test + public void profilePlaceholderNullLabel() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{profile}"); + String resource = this.controller.retrieve("bar", "dev", null, "spam/foo.txt", true); + assertEquals("foo: dev_bar/spam", resource); + } + + @Test + public void nullNameAndLabel() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test"); + try { + this.controller.retrieve(null, "foo", "bar", "spam/foo.txt", true); + } + catch (Exception e) { + assertNotNull(e); + } + } + @Test public void labelWithSlash() throws Exception { this.environmentRepository.setSearchLocations("classpath:/test"); @@ -143,6 +190,52 @@ public class ResourceControllerTests { assertEquals("foo: dev_bar/spam", resource); } + @Test + public void applicationAndLabelPlaceholdersWithoutSlashForBinary() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{application}/{label}"); + byte[] resource = this.controller.binary("dev", "bar", "spam", "foo.txt"); + assertEquals("foo: dev_bar/spam", new String(resource)); + } + + @Test + public void applicationPlaceholderWithSlashForBinary() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{application}"); + byte[] resource = this.controller.binary("dev(_)spam", "bar", "", "foo.txt"); + assertEquals("foo: dev_bar/spam", new String(resource)); + } + + @Test + public void applicationPlaceholderWithSlashForBinaryNullLabel() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{application}"); + byte[] resource = this.controller.binary("dev(_)spam", "bar", null, "foo.txt"); + assertEquals("foo: dev_bar/spam", new String(resource)); + } + + @Test + public void labelPlaceholderWithSlashForBinary() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{label}"); + byte[] resource = this.controller.binary("dev", "bar", "dev(_)spam", "foo.txt"); + assertEquals("foo: dev_bar/spam", new String(resource)); + } + + @Test + public void profilePlaceholderForBinaryNullLabel() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test/{profile}"); + byte[] resource = this.controller.binary("bar", "dev", null, "spam/foo.txt"); + assertEquals("foo: dev_bar/spam", new String(resource)); + } + + @Test + public void forBinaryNullName() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test"); + try { + this.controller.binary(null, "foo", "bar", "spam/foo.txt"); + } + catch (Exception e) { + assertNotNull(e); + } + } + @Test public void labelWithSlashForBinary() throws Exception { this.environmentRepository.setSearchLocations("classpath:/test");