[jboss-svn-commits] JBL Code SVN: r36295 - labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Dec 9 01:10:23 EST 2010


Author: kurt.stam at jboss.com
Date: 2010-12-09 01:10:23 -0500 (Thu, 09 Dec 2010)
New Revision: 36295

Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java
Log:
GUVNORSOA-47, merging ModeShape Integration allowing the passwords for admin and mailman to be encrypted

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java	2010-12-09 06:06:20 UTC (rev 36294)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java	2010-12-09 06:10:23 UTC (rev 36295)
@@ -33,10 +33,13 @@
 
 
 
+import java.math.BigInteger;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
 import javax.jcr.LoginException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
@@ -67,9 +70,12 @@
 
 	private static final Logger log = LoggerFactory.getLogger(RepositoryStartupService.class);
 	private static final String ADMIN                     = "admin";
+	private static final String ADMIN_USER_PROPERTY       = "org.drools.repository.admin.username";
 	private static final String ADMIN_PASSWORD_PROPERTY   = "org.drools.repository.admin.password";
 	private static final String MAILMAN                   = "mailman";
+	private static final String MAILMAN_USER_PROPERTY     = "org.drools.repository.mailman.username";
 	private static final String MAILMAN_PASSWORD_PROPERTY = "org.drools.repository.mailman.password";
+	private static final String SECURE_PASSWORDS_PROPERTY = "org.drools.repository.secure.passwords";
 	
 	
 	private RulesRepositoryConfigurator configurator;
@@ -94,9 +100,16 @@
     @Create
     public void create() {
     	repository = getRepositoryInstance();
+    	String username = "admin";
+    	if (properties.containsKey(ADMIN_USER_PROPERTY)) {
+    		username = properties.get(ADMIN_USER_PROPERTY);
+    	}
     	String password = "admin";
     	if (properties.containsKey(ADMIN_PASSWORD_PROPERTY)) {
     		password = properties.get(ADMIN_PASSWORD_PROPERTY);
+    		if ("true".equalsIgnoreCase(properties.get(SECURE_PASSWORDS_PROPERTY))) {
+    			password = decode(password);
+    		}
     	} else {
     		log.debug("Could not find property " + ADMIN_PASSWORD_PROPERTY + " for user " + ADMIN);
     	}
@@ -121,9 +134,16 @@
 
     /** Start up the mailbox, flush out any messages that were left */
     private void startMailboxService() {
+    	String username = "mailman";
+    	if (properties.containsKey(MAILMAN_USER_PROPERTY)) {
+    		username = properties.get(MAILMAN_USER_PROPERTY);
+    	}
     	String password = "mailman";
     	if (properties.containsKey(MAILMAN_PASSWORD_PROPERTY)) {
     		password = properties.get(MAILMAN_PASSWORD_PROPERTY);
+    		if ("true".equalsIgnoreCase(properties.get(SECURE_PASSWORDS_PROPERTY))) {
+    			password = decode(password);
+    		}
     	} else {
     		log.debug("Could not find property " + MAILMAN_PASSWORD_PROPERTY + " for user " + MAILMAN);
     	}
@@ -199,5 +219,41 @@
             throw new RulesRepositoryException( e );
         }
     }
+    
+    
+    
+    private static String decode(String secret)
+    {
+    	String decodedPassword = secret;
+    	try {
+	    	byte[] kbytes = "jaas is the way".getBytes();
+	    	SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
+	
+	    	BigInteger n = new BigInteger(secret, 16);
+	    	byte[] encoding = n.toByteArray();
+	
+	    	//SECURITY-344: fix leading zeros
+	    	if (encoding.length % 8 != 0)
+	    	{
+	    		int length = encoding.length;
+	    		int newLength = ((length / 8) + 1) * 8;
+	    		int pad = newLength - length; //number of leading zeros
+	    		byte[] old = encoding;
+	    		encoding = new byte[newLength];
+	    		for (int i = old.length - 1; i >= 0; i--)
+	    		{
+	    			encoding[i + pad] = old[i];
+	    		}
+	    	}
+	
+	    	Cipher cipher = Cipher.getInstance("Blowfish");
+	    	cipher.init(Cipher.DECRYPT_MODE, key);
+	    	byte[] decode = cipher.doFinal(encoding);
+	    	decodedPassword =  new String(decode);
+    	} catch (Exception e) {
+    		log.error(e.getMessage(),e);
+    	}
+    	return decodedPassword;
+    }
 
 }
\ No newline at end of file



More information about the jboss-svn-commits mailing list