From d202f53c69b61f18d3377b04f3f56d592a3b3411 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Mon, 16 Nov 2015 10:05:06 -0700 Subject: [PATCH 1/2] Bumped to 1.0.4.BUILD-SNAPSHOT --- docs/pom.xml | 4 ++-- pom.xml | 10 +++++----- spring-cloud-config-client/pom.xml | 2 +- spring-cloud-config-sample/pom.xml | 2 +- spring-cloud-config-server/pom.xml | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 6b4b4340..2b6b6739 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -3,11 +3,11 @@ 4.0.0 org.springframework.cloud spring-cloud-config-docs - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT org.springframework.cloud spring-cloud-build - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT pom diff --git a/pom.xml b/pom.xml index d89f82d7..6af336d2 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-config - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT pom Spring Cloud Config Spring Cloud Config @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT @@ -22,7 +22,7 @@ config - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT spring-cloud-config-client @@ -47,12 +47,12 @@ org.springframework.cloud spring-cloud-config-client - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT org.springframework.cloud spring-cloud-config-server - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT org.springframework.retry diff --git a/spring-cloud-config-client/pom.xml b/spring-cloud-config-client/pom.xml index fff5afa3..ee5fe4a0 100644 --- a/spring-cloud-config-client/pom.xml +++ b/spring-cloud-config-client/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-config - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-sample/pom.xml b/spring-cloud-config-sample/pom.xml index be933873..a74f04c7 100644 --- a/spring-cloud-config-sample/pom.xml +++ b/spring-cloud-config-sample/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-config - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT .. diff --git a/spring-cloud-config-server/pom.xml b/spring-cloud-config-server/pom.xml index 6ea8e661..92f22dcf 100644 --- a/spring-cloud-config-server/pom.xml +++ b/spring-cloud-config-server/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-config - 1.0.3.BUILD-SNAPSHOT + 1.0.4.BUILD-SNAPSHOT .. From a0e8338c38b7a2e11244435cf1d2466d8739db82 Mon Sep 17 00:00:00 2001 From: Steve West Date: Wed, 18 Nov 2015 17:13:58 -0700 Subject: [PATCH 2/2] Fix bug where prefix keys (e.g. {name: value}) are not stripped Also removing extraneous post-decrypt stripPrefix which was masking the encrypt bug. Fixes gh-272 --- .../encryption/EncryptionController.java | 17 ++++++++------ .../encryption/EncryptionControllerTests.java | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+), 7 deletions(-) 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 9a3965e4..19e1403c 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 @@ -121,10 +121,11 @@ public class EncryptionController { checkEncryptorInstalled(name, profiles); try { String input = stripFormData(data, type, false); - Map keys = this.helper - .getEncryptorKeys(name, profiles, input); - String encrypted = this.helper.addPrefix(keys, this.encryptor.locate(keys) - .encrypt(input)); + Map keys = this.helper.getEncryptorKeys(name, profiles, + input); + String textToEncrypt = this.helper.stripPrefix(input); + String encrypted = this.helper.addPrefix(keys, + this.encryptor.locate(keys).encrypt(textToEncrypt)); logger.info("Encrypted data"); return encrypted; } @@ -147,9 +148,11 @@ public class EncryptionController { checkEncryptorInstalled(name, profiles); try { String input = stripFormData(data, type, true); - String decrypted = this.helper.stripPrefix(this.encryptor.locate( - this.helper.getEncryptorKeys(name, profiles, input)).decrypt( - this.helper.stripPrefix(input))); + Map encryptorKeys = this.helper.getEncryptorKeys(name, + profiles, input); + TextEncryptor encryptor = this.encryptor.locate(encryptorKeys); + String encryptedText = this.helper.stripPrefix(input); + String decrypted = encryptor.decrypt(encryptedText); logger.info("Decrypted cipher data"); return decrypted; } 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 1e2f340a..9fe933ff 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 @@ -15,14 +15,23 @@ */ package org.springframework.cloud.config.server.encryption; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.util.Map; import org.junit.Test; import org.springframework.cloud.config.server.ConfigServerProperties; +import org.mockito.ArgumentCaptor; import org.springframework.http.MediaType; import org.springframework.security.crypto.encrypt.Encryptors; import org.springframework.security.crypto.encrypt.TextEncryptor; @@ -100,6 +109,19 @@ public class EncryptionControllerTests { assertEquals("Wrong decrypted plaintext: " + decrypt, "foo bar", decrypt); } + @Test + public void prefixStrippedBeforeEncrypt() { + TextEncryptor encryptor = mock(TextEncryptor.class); + when(encryptor.encrypt(anyString())).thenReturn("myEncryptedValue"); + + this.controller = new EncryptionController(new SingleTextEncryptorLocator(encryptor), this.properties); + this.controller.encrypt("{key:test}foo", MediaType.TEXT_PLAIN); + + ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + verify(encryptor, atLeastOnce()).encrypt(captor.capture()); + assertThat("Prefix must be stripped prior to encrypt", captor.getValue(), not(containsString("{key:test}"))); + } + @Test public void addEnvironment() { TextEncryptorLocator locator = new TextEncryptorLocator() {