You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/12/30 11:48:29 UTC
[02/11] camel git commit: -Added support for decrypting parts of
property values -- Example property:
some.endpoint=http://somehost?authUsername=username&authPassword=ENC(BjAoLxfpb1h)&token=ENC(ZWbB211g)
-- Decrypted result: some.endpoint=http://somehost
-Added support for decrypting parts of property values
-- Example property: some.endpoint=http://somehost?authUsername=username&authPassword=ENC(BjAoLxfpb1h)&token=ENC(ZWbB211g)
-- Decrypted result: some.endpoint=http://somehost?authUsername=username&authPassword=password&token=sometoken
-Added possibility to provide a custom encryptor (setEncryptor).
-- Useful when the encryptor is provided through an osgi service.
Note: The password and algorithm property is ignored when the encryptor property is set.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e0634e43
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e0634e43
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e0634e43
Branch: refs/heads/master
Commit: e0634e438124f2db6fe9cb27afa0ed77422028cf
Parents: 400477f
Author: Marius Thøring <ma...@avinor.no>
Authored: Thu Dec 18 13:32:14 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Dec 30 11:47:28 2014 +0100
----------------------------------------------------------------------
.../jasypt/JasyptPropertiesParser.java | 34 +++++----
.../jasypt/JasyptPropertiesParserTest.java | 76 +++++++++++++++-----
2 files changed, 81 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/e0634e43/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java
----------------------------------------------------------------------
diff --git a/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java b/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java
old mode 100644
new mode 100755
index 68b8377..8a0e81c
--- a/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java
+++ b/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java
@@ -17,6 +17,8 @@
package org.apache.camel.component.jasypt;
import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.camel.component.properties.DefaultPropertiesParser;
import org.apache.camel.util.ObjectHelper;
@@ -26,9 +28,9 @@ import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
* A {@link org.apache.camel.component.properties.PropertiesParser} which is using
* <a href="http://www.jasypt.org/">Jasypt</a> to decrypt any encrypted values.
* <p/>
- * The values must be enclosed in the prefix and suffix token.
+ * The parts of the values which should be decrpted must be enclosed in the prefix and suffix token.
*
- * @version
+ * @version
*/
public class JasyptPropertiesParser extends DefaultPropertiesParser {
@@ -39,6 +41,13 @@ public class JasyptPropertiesParser extends DefaultPropertiesParser {
private String password;
private String algorithm;
+ private Pattern pattern;
+
+ public JasyptPropertiesParser() {
+ String regex = JASYPT_PREFIX_TOKEN.replace("(", "\\(") + "(.+?)" + JASYPT_SUFFIX_TOKEN.replace(")", "\\)");
+ pattern = Pattern.compile(regex);
+ }
+
public String getPassword() {
return password;
}
@@ -76,19 +85,20 @@ public class JasyptPropertiesParser extends DefaultPropertiesParser {
return encryptor;
}
+ public void setEncryptor(StandardPBEStringEncryptor encryptor) {
+ this.encryptor = encryptor;
+ }
+
@Override
public String parseProperty(String key, String value, Properties properties) {
- // check if the value is using the tokens
- String text = ObjectHelper.between(value, JASYPT_PREFIX_TOKEN, JASYPT_SUFFIX_TOKEN);
- if (text == null) {
- // not encrypted
- log.trace("Property is not encrypted {}", text);
- return value;
- } else {
- log.trace("Decrypting property {}", text);
- // do not log the decrypted text as it could be sensitive information such as a password
- return getEncryptor().decrypt(text);
+ log.trace(String.format("Parsing property '%s=%s'", key, value));
+ Matcher matcher = pattern.matcher(value);
+ while (matcher.find()) {
+ log.trace(String.format("Decrypting part '%s'", matcher.group(0)));
+ String decrypted = getEncryptor().decrypt(matcher.group(1));
+ value = value.replace(matcher.group(0), decrypted);
}
+ return value;
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/e0634e43/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java b/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java
old mode 100644
new mode 100755
index 93ea820..2113c01
--- a/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java
+++ b/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java
@@ -16,31 +16,73 @@
*/
package org.apache.camel.component.jasypt;
-import junit.framework.TestCase;
+import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
+import org.junit.Before;
+import org.junit.Test;
-/**
- * @version
- */
-public class JasyptPropertiesParserTest extends TestCase {
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+public class JasyptPropertiesParserTest {
+
+ private static final String KEY = "somekey";
+
+ private static final String ENCRYPTED_VALUE = "ENC(bsW9uV37gQ0QHFu7KO03Ww==)";
+ private static final String DECRYPTED_VALUE = "tiger";
- public void testJasyptPropertiesParser() throws Exception {
- JasyptPropertiesParser parser = new JasyptPropertiesParser();
- parser.setPassword("secret");
+ private JasyptPropertiesParser jasyptPropertiesParser = new JasyptPropertiesParser();
+
+ @Before
+ public void before() {
+ StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
+ encryptor.setPassword("secret");
+ jasyptPropertiesParser.setEncryptor(encryptor);
+ }
+
+ @Test
+ public void testPlainPropertyIsUntouched() {
+ String result = jasyptPropertiesParser.parseProperty(KEY, "abc?1=decrypted1&2=decrypted2&cde=()", null);
+ assertThat(result, is("abc?1=decrypted1&2=decrypted2&cde=()"));
+ }
- assertEquals("foo", parser.parseProperty(null, "foo", null));
- assertEquals("tiger", parser.parseProperty(null, "ENC(bsW9uV37gQ0QHFu7KO03Ww==)", null));
+ @Test
+ public void testDecryptsEncryptedProperty() {
+ String result = jasyptPropertiesParser.parseProperty(KEY, ENCRYPTED_VALUE, null);
+ assertThat(result, is(DECRYPTED_VALUE));
}
- public void testJasyptPropertiesParserSys() throws Exception {
+ @Test
+ public void testDecryptsSinglePartEncryptedProperty() {
+ String result = jasyptPropertiesParser.parseProperty(KEY, "abc?1=" + ENCRYPTED_VALUE + "&cde=()", null);
+ assertThat(result, is("abc?1=" + DECRYPTED_VALUE + "&cde=()"));
+ }
+
+ @Test
+ public void testDecryptsMultiPartEncryptedProperty() {
+ String result = jasyptPropertiesParser.parseProperty(KEY, "abc?1=" + ENCRYPTED_VALUE + "&2=" + ENCRYPTED_VALUE + "&cde=()", null);
+ assertThat(result, is("abc?1=" + DECRYPTED_VALUE + "&2=" + DECRYPTED_VALUE + "&cde=()"));
+ }
+
+ @Test
+ public void testUsesProvidedPasswordIfEncryptorIsNotSet() throws Exception {
+ jasyptPropertiesParser.setEncryptor(null);
+ jasyptPropertiesParser.setPassword("secret");
+
+ assertEquals("foo", jasyptPropertiesParser.parseProperty(KEY, "foo", null));
+ assertEquals(DECRYPTED_VALUE, jasyptPropertiesParser.parseProperty(KEY, ENCRYPTED_VALUE, null));
+ }
+
+ @Test
+ public void testUsesProvidedPasswordFromSystemPropertyIfEncryptorIsNotSet() throws Exception {
System.setProperty("myfoo", "secret");
- JasyptPropertiesParser parser = new JasyptPropertiesParser();
- parser.setPassword("sys:myfoo");
+ jasyptPropertiesParser.setEncryptor(null);
+ jasyptPropertiesParser.setPassword("sys:myfoo");
- assertEquals("foo", parser.parseProperty(null, "foo", null));
- assertEquals("tiger", parser.parseProperty(null, "ENC(bsW9uV37gQ0QHFu7KO03Ww==)", null));
+ assertEquals("foo", jasyptPropertiesParser.parseProperty(KEY, "foo", null));
+ assertEquals(DECRYPTED_VALUE, jasyptPropertiesParser.parseProperty(KEY, ENCRYPTED_VALUE, null));
System.clearProperty("myfoo");
}
-
-}
+}
\ No newline at end of file