You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2010/09/13 22:25:06 UTC

svn commit: r996679 - in /karaf/trunk: assembly/src/main/filtered-resources/ features/ features/encryption/ jaas/ jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/ jaas/jasypt/ jaas/jasypt/src/ jaas/jasypt/src/main/ jaas/jasypt/src/main/java...

Author: jbonofre
Date: Mon Sep 13 20:25:05 2010
New Revision: 996679

URL: http://svn.apache.org/viewvc?rev=996679&view=rev
Log:
[KARAF-34] Move jasypt bundle from feature to jaas module. Modify Config JaasRealm to add the BundleContext in the options map. Use the encryption servce in the AbstractKarafLoginModule.

Added:
    karaf/trunk/jaas/jasypt/
    karaf/trunk/jaas/jasypt/pom.xml   (with props)
    karaf/trunk/jaas/jasypt/src/
    karaf/trunk/jaas/jasypt/src/main/
    karaf/trunk/jaas/jasypt/src/main/java/
    karaf/trunk/jaas/jasypt/src/main/java/org/
    karaf/trunk/jaas/jasypt/src/main/java/org/apache/
    karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/
    karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/
    karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/
    karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/
    karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java   (with props)
    karaf/trunk/jaas/jasypt/src/main/resources/
    karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/
    karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/
    karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml   (with props)
    karaf/trunk/jaas/jasypt/src/test/
    karaf/trunk/jaas/jasypt/src/test/java/
    karaf/trunk/jaas/jasypt/src/test/java/org/
    karaf/trunk/jaas/jasypt/src/test/java/org/apache/
    karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/
    karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/
    karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/
    karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/
    karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java   (with props)
Removed:
    karaf/trunk/features/encryption/
Modified:
    karaf/trunk/assembly/src/main/filtered-resources/features.xml
    karaf/trunk/features/pom.xml
    karaf/trunk/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Config.java
    karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
    karaf/trunk/jaas/pom.xml

Modified: karaf/trunk/assembly/src/main/filtered-resources/features.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/assembly/src/main/filtered-resources/features.xml?rev=996679&r1=996678&r2=996679&view=diff
==============================================================================
--- karaf/trunk/assembly/src/main/filtered-resources/features.xml (original)
+++ karaf/trunk/assembly/src/main/filtered-resources/features.xml Mon Sep 13 20:25:05 2010
@@ -98,6 +98,6 @@
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-codec/${commons-codec.bundle.version}</bundle>
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-lang/${commons-lang.bundle.version}</bundle>
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jasypt/${jasypt.bundle.version}</bundle>
-        <bundle>mvn:org.apache.karaf.features/org.apache.karaf.features.encryption/${project.version}</bundle>
+        <bundle>mvn:org.apache.karaf.jaas/org.apache.karaf.jaas.jasypt/${project.version}</bundle>
     </feature>
 </features>

Modified: karaf/trunk/features/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/features/pom.xml?rev=996679&r1=996678&r2=996679&view=diff
==============================================================================
--- karaf/trunk/features/pom.xml (original)
+++ karaf/trunk/features/pom.xml Mon Sep 13 20:25:05 2010
@@ -37,7 +37,6 @@
         <module>command</module>
         <module>management</module>
         <module>obr</module>
-        <module>encryption</module>
     </modules>
 
 </project>

Modified: karaf/trunk/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Config.java
URL: http://svn.apache.org/viewvc/karaf/trunk/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Config.java?rev=996679&r1=996678&r2=996679&view=diff
==============================================================================
--- karaf/trunk/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Config.java (original)
+++ karaf/trunk/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Config.java Mon Sep 13 20:25:05 2010
@@ -76,6 +76,10 @@ public class Config implements JaasRealm
             AppConfigurationEntry[] entries = new AppConfigurationEntry[modules.length];
             for (int i = 0; i < modules.length; i++) {
                 Map<String,Object> options = new HashMap<String,Object>();
+                // put the bundle context in the options map
+                // it's required to be able to use the encryption service
+                // in the AbstractKarafLoginModule
+                options.put(BundleContext.class.getName(), bundleContext);
                 if (modules[i].getOptions() != null) {
                     for (Map.Entry e : modules[i].getOptions().entrySet()) {
                         options.put(e.getKey().toString(), e.getValue());

Added: karaf/trunk/jaas/jasypt/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/jaas/jasypt/pom.xml?rev=996679&view=auto
==============================================================================
--- karaf/trunk/jaas/jasypt/pom.xml (added)
+++ karaf/trunk/jaas/jasypt/pom.xml Mon Sep 13 20:25:05 2010
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <!--
+
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements.  See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version 2.0
+        (the "License"); you may not use this file except in compliance with
+        the License.  You may obtain a copy of the License at
+
+           http://www.apache.org/licenses/LICENSE-2.0
+
+        Unless required by applicable law or agreed to in writing, software
+        distributed under the License is distributed on an "AS IS" BASIS,
+        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+        See the License for the specific language governing permissions and
+        limitations under the License.
+    -->
+    
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>org.apache.karaf.jaas</groupId>
+        <artifactId>jaas</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+    </parent>
+    
+    <groupId>org.apache.karaf.jaas</groupId>
+    <artifactId>org.apache.karaf.jaas.jasypt</artifactId>
+    <packaging>bundle</packaging>
+    <version>2.0.1-SNAPSHOT</version>
+    <name>Apache Karaf :: JAAS Jasypt Encryption</name>
+    
+    <description>
+        This bundle provides the default encryption implementation for password
+        encryption used in login module.
+        This implementation uses Jasypt encryption tool.
+    </description>
+    
+    <properties>
+        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
+    </properties>
+    
+    <dependencies>
+    
+        <dependency>
+            <groupId>org.apache.karaf.jaas</groupId>
+            <artifactId>org.apache.karaf.jaas.modules</artifactId>    
+        </dependency>
+        
+        <dependency>
+            <groupId>org.apache.servicemix.bundles</groupId>
+            <artifactId>org.apache.servicemix.bundles.jasypt</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.ibm.icu</groupId>
+            <artifactId>icu4j</artifactId>
+            <version>3.4.4</version>
+            <scope>test</scope>
+        </dependency>
+    
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                        <Export-Package>
+                            ${project.artifactId}*;version=${project.version}
+                        </Export-Package>
+                        <Import-Package>
+                            !${project.artifactId}*,
+                            *
+                        </Import-Package>
+                        <Private-Package>org.apache.karaf.jaas.encryption.impl</Private-Package>
+                        <_versionpolicy>${bnd.version.policy}</_versionpolicy>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file

Propchange: karaf/trunk/jaas/jasypt/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java
URL: http://svn.apache.org/viewvc/karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java?rev=996679&view=auto
==============================================================================
--- karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java (added)
+++ karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java Mon Sep 13 20:25:05 2010
@@ -0,0 +1,66 @@
+/*
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+package org.apache.karaf.jaas.jasypt.impl;
+
+import org.apache.karaf.jaas.modules.Encryption;
+import org.jasypt.util.password.ConfigurablePasswordEncryptor;
+
+/**
+ * <p>
+ * Jasypt implementation of the Encryption service.
+ * </p>
+ * 
+ * @author jbonofre
+ */
+public class JasyptEncryption implements Encryption {
+
+    private ConfigurablePasswordEncryptor passwordEncryptor;
+    
+    /**
+     * <p>
+     * Default constructor.
+     * </p>
+     */
+    public JasyptEncryption() {
+        this.passwordEncryptor = new ConfigurablePasswordEncryptor();
+        // set MD5 encryption algorithm by default
+        this.passwordEncryptor.setAlgorithm("MD5");
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.karaf.jaas.modules.Encryption#setAlgorithm(java.lang.String)
+     */
+    public void setAlgorithm(String algorithm) {
+        this.passwordEncryptor.setAlgorithm(algorithm);
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.karaf.jaas.modules.Encryption#encryptPassword(java.lang.String)
+     */
+    public String encryptPassword(String plain) {
+        return this.passwordEncryptor.encryptPassword(plain);
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.karaf.jaas.modules.Encryption#checkPassword(java.lang.String, java.lang.String)
+     */
+    public boolean checkPassword(String input, String password) {
+        return this.passwordEncryptor.checkPassword(input, password);
+    }
+    
+}

Propchange: karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml?rev=996679&view=auto
==============================================================================
--- karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml (added)
+++ karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml Mon Sep 13 20:25:05 2010
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+    <bean id="encryption" class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryption" />
+    
+    <service ref="encryption" interface="org.apache.karaf.jaas.modules.Encryption" />
+
+</blueprint>
\ No newline at end of file

Propchange: karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java?rev=996679&view=auto
==============================================================================
--- karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java (added)
+++ karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java Mon Sep 13 20:25:05 2010
@@ -0,0 +1,52 @@
+/*
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+package org.apache.karaf.jaas.jasypt.impl;
+
+import junit.framework.TestCase;
+
+/**
+ * <p>
+ * Test <code>JasyptEncryption</code>.
+ * </p>
+ * 
+ * @author jbonofre
+ */
+public class JasyptEncryptionTest extends TestCase {
+    
+    private JasyptEncryption encryption;
+    
+    /*
+     * (non-Javadoc)
+     * @see junit.framework.TestCase#setUp()
+     */
+    public void setUp() {
+        this.encryption = new JasyptEncryption();
+        this.encryption.setAlgorithm("MD5");
+    }
+    
+    /**
+     * <p>
+     * Test <code>checkPassword()</p> method.
+     * </p>
+     * 
+     * @throws Exception in case of test error.
+     */
+    public void testCheckPassword() throws Exception {
+        String password = this.encryption.encryptPassword("test");
+        
+        assertEquals(true, this.encryption.checkPassword("test", password));
+    }
+    
+}

Propchange: karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
URL: http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java?rev=996679&r1=996678&r2=996679&view=diff
==============================================================================
--- karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java (original)
+++ karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java Mon Sep 13 20:25:05 2010
@@ -24,6 +24,9 @@ import javax.security.auth.callback.Call
 import javax.security.auth.login.LoginException;
 import javax.security.auth.spi.LoginModule;
 
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
 
 /**
  * <p>
@@ -46,6 +49,9 @@ public abstract class AbstractKarafLogin
     
     /** define the encryption algorithm to use to encrypt password */
     protected String encryption;
+    
+    /** the bundle context is required to use the encryption service */
+    protected BundleContext bundleContext;
 
     public boolean commit() throws LoginException {
         RolePolicy policy = RolePolicy.getPolicy(rolePolicy);
@@ -68,6 +74,8 @@ public abstract class AbstractKarafLogin
         this.roleDiscriminator = (String) options.get("roleDiscriminator");
         this.debug = Boolean.parseBoolean((String) options.get("debug"));
         this.encryption = (String) options.get("encryption");
+        // the bundle context is set in the Config JaasRealm by default
+        this.bundleContext = (BundleContext) options.get(BundleContext.class.getName());
     }
     
     /**
@@ -82,8 +90,23 @@ public abstract class AbstractKarafLogin
         if (this.encryption == null) {
             return password;
         }
-        // TODO call the encryption service
-        return null;
+        // lookup the encryption service reference
+        ServiceReference encryptionServiceReference = bundleContext.getServiceReference(Encryption.class.getName());
+        if (encryptionServiceReference == null) {
+            throw new IllegalStateException("Encryption service not found. Please install the Karaf encryption feature.");
+        }
+        // get the encryption service implementation
+        Encryption encryptionService = (Encryption) bundleContext.getService(encryptionServiceReference);
+        if (encryptionService == null) {
+            throw new IllegalStateException("Encryption service not found. Please install the Karaf encryption feature.");
+        }
+        // set the encryption algorithm
+        encryptionService.setAlgorithm(encryption);
+        // encrypt the password
+        String encryptedPassword = encryptionService.encryptPassword(password);
+        // release the encryption service reference
+        bundleContext.ungetService(encryptionServiceReference);
+        return encryptedPassword;
     }
     
     /**
@@ -99,8 +122,23 @@ public abstract class AbstractKarafLogin
         if (this.encryption == null) {
             return input.equals(password);
         }
-        // TODO call the encryption service
-        return true;
+        // lookup the encryption service reference
+        ServiceReference encryptionServiceReference = bundleContext.getServiceReference(Encryption.class.getName());
+        if (encryptionServiceReference == null) {
+            throw new IllegalStateException("Encryption service not found. Please install the Karaf encryption feature.");
+        }
+        // get the encryption service implementation
+        Encryption encryptionService = (Encryption) bundleContext.getService(encryptionServiceReference);
+        if (encryptionService == null) {
+            throw new IllegalStateException("Encryption service not found. Please install the Karaf encryption feature.");
+        }
+        // set the encryption algorithm
+        encryptionService.setAlgorithm(encryption);
+        // checks passwords
+        boolean equals = encryptionService.checkPassword(input, password);
+        // release the encryption service reference
+        bundleContext.ungetService(encryptionServiceReference);
+        return equals;
     }
     
 }

Modified: karaf/trunk/jaas/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/jaas/pom.xml?rev=996679&r1=996678&r2=996679&view=diff
==============================================================================
--- karaf/trunk/jaas/pom.xml (original)
+++ karaf/trunk/jaas/pom.xml Mon Sep 13 20:25:05 2010
@@ -36,6 +36,7 @@
         <module>boot</module>
         <module>config</module>
         <module>modules</module>
+        <module>jasypt</module>
     </modules>
 
 </project>