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 ce38f0c4..9b5efb06 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 @@ -163,11 +163,13 @@ public class EncryptionController { } private void checkEncryptorInstalled(String name, String profiles) { - if (this.encryptor == null - || this.encryptor.locate(this.helper.getEncryptorKeys(name, profiles, "")) - .encrypt("FOO").equals("FOO")) { + if (this.encryptor == null) { throw new KeyNotInstalledException(); } + if (this.encryptor.locate(this.helper.getEncryptorKeys(name, profiles, "")) + .encrypt("FOO").equals("FOO")) { + throw new EncryptionTooWeakException(); + } } private String stripFormData(String data, MediaType type, boolean cipher) { @@ -218,6 +220,15 @@ public class EncryptionController { body.put("description", "No key was installed for encryption service"); return new ResponseEntity<>(body, HttpStatus.NOT_FOUND); } + + @ExceptionHandler(EncryptionTooWeakException.class) + @ResponseBody + public ResponseEntity> encryptionTooWeak() { + Map body = new HashMap(); + body.put("status", "INVALID"); + body.put("description", "The encryption algorithm is not strong enough"); + return new ResponseEntity<>(body, HttpStatus.NOT_FOUND); + } @ExceptionHandler(InvalidCipherException.class) @ResponseBody @@ -238,6 +249,10 @@ class KeyNotInstalledException extends RuntimeException { class KeyNotAvailableException extends RuntimeException { } +@SuppressWarnings("serial") +class EncryptionTooWeakException extends RuntimeException { +} + @SuppressWarnings("serial") class InvalidCipherException extends RuntimeException { -} \ No newline at end of file +} diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerMultiTextEncryptorTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerMultiTextEncryptorTests.java index 1a030c32..a19c7cb4 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerMultiTextEncryptorTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerMultiTextEncryptorTests.java @@ -35,7 +35,7 @@ public class EncryptionControllerMultiTextEncryptorTests { encrypted, TEXT_PLAIN)); } - @Test(expected = KeyNotInstalledException.class) + @Test(expected = EncryptionTooWeakException.class) public void shouldNotEncryptUsingNoOp() { // given String application = "unknown"; @@ -46,7 +46,7 @@ public class EncryptionControllerMultiTextEncryptorTests { // then exception is thrown } - @Test(expected = KeyNotInstalledException.class) + @Test(expected = EncryptionTooWeakException.class) public void shouldNotDecryptUsingNoOp() { // given String application = "unknown"; 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 84a08821..101d25cc 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 @@ -45,12 +45,12 @@ public class EncryptionControllerTests { private EncryptionController controller = new EncryptionController( new SingleTextEncryptorLocator(Encryptors.noOpText())); - @Test(expected = KeyNotInstalledException.class) + @Test(expected = EncryptionTooWeakException.class) public void cannotDecryptWithoutKey() { this.controller.decrypt("foo", MediaType.TEXT_PLAIN); } - @Test(expected = KeyNotInstalledException.class) + @Test(expected = EncryptionTooWeakException.class) public void cannotDecryptWithNoopEncryptor() { this.controller.decrypt("foo", MediaType.TEXT_PLAIN); }