From 087cb334db242639569f7854fa5ae4a91bf80a13 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Mon, 21 Oct 2019 11:49:52 -0400 Subject: [PATCH] Updates PropertyValueDescirptor with toString(). toString returns value.toString() if not null. This allows decryption to occur properly. Fixes gh-1490 --- .../environment/PropertyValueDescriptor.java | 9 ++++++ .../CipherEnvironmentEncryptorTests.java | 28 +++++++++++++------ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/environment/PropertyValueDescriptor.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/environment/PropertyValueDescriptor.java index bac06a91..c1d75a3b 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/environment/PropertyValueDescriptor.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/environment/PropertyValueDescriptor.java @@ -49,4 +49,13 @@ public final class PropertyValueDescriptor { this.origin = origin; } + /** + * Places in config server call to string expecting to get the value. + * @return the value toString if not null. + */ + @Override + public String toString() { + return this.value == null ? null : this.value.toString(); + } + } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptorTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptorTests.java index d6332114..3d3b5828 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptorTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/CipherEnvironmentEncryptorTests.java @@ -19,7 +19,6 @@ package org.springframework.cloud.config.server.encryption; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; @@ -28,6 +27,7 @@ import org.junit.runners.Parameterized.Parameters; import org.springframework.cloud.config.environment.Environment; import org.springframework.cloud.config.environment.PropertySource; +import org.springframework.cloud.config.environment.PropertyValueDescriptor; import org.springframework.cloud.context.encrypt.EncryptorFactory; import org.springframework.security.crypto.encrypt.TextEncryptor; @@ -43,13 +43,8 @@ public class CipherEnvironmentEncryptorTests { public CipherEnvironmentEncryptorTests(String salt, String key) { this.textEncryptor = new EncryptorFactory(salt).create(key); - this.encryptor = new CipherEnvironmentEncryptor(new TextEncryptorLocator() { - - @Override - public TextEncryptor locate(Map keys) { - return CipherEnvironmentEncryptorTests.this.textEncryptor; - } - }); + this.encryptor = new CipherEnvironmentEncryptor( + keys -> CipherEnvironmentEncryptorTests.this.textEncryptor); } @Parameters @@ -104,4 +99,21 @@ public class CipherEnvironmentEncryptorTests { .getSource().get(environment.getName())).isEqualTo(null); } + @Test + public void shouldDecryptEnvironmentIncludeOrigin() { + // given + String secret = randomUUID().toString(); + + // when + Environment environment = new Environment("name", "profile", "label"); + String encrypted = "{cipher}" + this.textEncryptor.encrypt(secret); + environment.add(new PropertySource("a", + Collections.singletonMap(environment.getName(), + new PropertyValueDescriptor(encrypted, "encrypted value")))); + + // then + assertThat(this.encryptor.decrypt(environment).getPropertySources().get(0) + .getSource().get(environment.getName())).isEqualTo(secret); + } + }