Author: rmannibucau
Date: Sun Sep 14 16:00:19 2014
New Revision: 1624866

URL: http://svn.apache.org/r1624866
Log:
TOMEE-1346 support cipher: prefix for values

Modified:
    
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/util/PropertyPlaceHolderHelper.java
    
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/util/PropertyPlaceHolderTest.java

Modified: 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/util/PropertyPlaceHolderHelper.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/util/PropertyPlaceHolderHelper.java?rev=1624866&r1=1624865&r2=1624866&view=diff
==============================================================================
--- 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/util/PropertyPlaceHolderHelper.java
 (original)
+++ 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/util/PropertyPlaceHolderHelper.java
 Sun Sep 14 16:00:19 2014
@@ -19,6 +19,9 @@ package org.apache.openejb.util;
 
 import org.apache.commons.lang3.text.StrLookup;
 import org.apache.commons.lang3.text.StrSubstitutor;
+import org.apache.openejb.cipher.PasswordCipher;
+import org.apache.openejb.cipher.PasswordCipherException;
+import org.apache.openejb.cipher.PasswordCipherFactory;
 import org.apache.openejb.loader.SystemInstance;
 
 import java.util.Map;
@@ -31,6 +34,12 @@ public final class PropertyPlaceHolderHe
 
     private static final PropertiesLookup RESOLVER = new PropertiesLookup();
     public static final StrSubstitutor SUBSTITUTOR = new 
StrSubstitutor(RESOLVER);
+    static {
+        SUBSTITUTOR.setEnableSubstitutionInVariables(true);
+        
SUBSTITUTOR.setValueDelimiter(System.getProperty("openejb.placehodler.delimiter",
 ":-")); // default one of [lang3]
+    }
+
+    public static final String CIPHER_PREFIX = "cipher:";
 
     private PropertyPlaceHolderHelper() {
         // no-op
@@ -42,15 +51,36 @@ public final class PropertyPlaceHolderHe
     }
 
     public static String simpleValue(final String raw) {
-        if (raw == null || !raw.contains(PREFIX) || !raw.contains(SUFFIX)) {
-            return raw;
+        if (raw == null) {
+            return null;
+        }
+        if (!raw.contains(PREFIX) || !raw.contains(SUFFIX)) {
+            return decryptIfNeeded(raw.replace(PREFIX, "").replace(SUFFIX, 
""));
         }
 
         String value = SUBSTITUTOR.replace(raw);
         if (!value.equals(raw) && value.startsWith("java:")) {
             value = value.substring(5);
         }
-        return value;
+        return decryptIfNeeded(value.replace(PREFIX, "").replace(SUFFIX, ""));
+    }
+
+    private static String decryptIfNeeded(String replace) {
+        if (replace.startsWith(CIPHER_PREFIX)) {
+            final String algo = replace.substring(CIPHER_PREFIX.length(), 
replace.indexOf(':', CIPHER_PREFIX.length() + 1));
+            PasswordCipher cipher = null;
+            try {
+                cipher = PasswordCipherFactory.getPasswordCipher(algo);
+            } catch (final PasswordCipherException ex) {
+                try {
+                    cipher = 
PasswordCipher.class.cast(Thread.currentThread().getContextClassLoader().loadClass(algo).newInstance());
+                } catch (final Exception e) {
+                    throw new IllegalArgumentException(e);
+                }
+            }
+            return cipher.decrypt(replace.substring(CIPHER_PREFIX.length() + 
algo.length()).toCharArray());
+        }
+        return replace;
     }
 
     public static String value(final String aw) {
@@ -107,7 +137,7 @@ public final class PropertyPlaceHolderHe
                 return value;
             }
 
-            return key;
+            return null;
         }
 
         public synchronized void reload() {

Modified: 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/util/PropertyPlaceHolderTest.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/util/PropertyPlaceHolderTest.java?rev=1624866&r1=1624865&r2=1624866&view=diff
==============================================================================
--- 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/util/PropertyPlaceHolderTest.java
 (original)
+++ 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/util/PropertyPlaceHolderTest.java
 Sun Sep 14 16:00:19 2014
@@ -24,6 +24,13 @@ import static org.junit.Assert.assertEqu
 
 public class PropertyPlaceHolderTest {
     @Test
+    public void cipher() {
+        SystemInstance.get().setProperty("PropertyPlaceHolderTest", 
"cipher:Static3DES:xMH5uM1V9vQzVUv5LG7YLA==");
+
+        assertEquals("Passw0rd", 
PropertyPlaceHolderHelper.simpleValue("${PropertyPlaceHolderTest}"));
+    }
+
+    @Test
     public void simpleReplace() {
         SystemInstance.get().setProperty("PropertyPlaceHolderTest", "ok");
 


Reply via email to