Author: matthieu
Date: Fri Dec 11 10:09:14 2015
New Revision: 1719326

URL: http://svn.apache.org/viewvc?rev=1719326&view=rev
Log:
JAMES-1644 Add JMAP keystore configuration

Added:
    james/project/trunk/dockerfiles/run/guice/destination/conf/jmap.properties
    
james/project/trunk/server/container/cassandra-guice/sample-configuration/jmap.properties
    
james/project/trunk/server/container/cassandra-guice/src/test/resources/keystore
    
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfiguration.java
Modified:
    
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/JMAPModule.java
    
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
    
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/modules/TestJMAPServerModule.java
    
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/JamesSignatureHandler.java
    
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JamesSignatureHandlerProvider.java

Added: 
james/project/trunk/dockerfiles/run/guice/destination/conf/jmap.properties
URL: 
http://svn.apache.org/viewvc/james/project/trunk/dockerfiles/run/guice/destination/conf/jmap.properties?rev=1719326&view=auto
==============================================================================
--- james/project/trunk/dockerfiles/run/guice/destination/conf/jmap.properties 
(added)
+++ james/project/trunk/dockerfiles/run/guice/destination/conf/jmap.properties 
Fri Dec 11 10:09:14 2015
@@ -0,0 +1,4 @@
+# Configuration file for JMAP
+
+tls.keystoreURL=file://conf/keystore
+tls.secret=james72laBalle
\ No newline at end of file

Added: 
james/project/trunk/server/container/cassandra-guice/sample-configuration/jmap.properties
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/sample-configuration/jmap.properties?rev=1719326&view=auto
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/sample-configuration/jmap.properties
 (added)
+++ 
james/project/trunk/server/container/cassandra-guice/sample-configuration/jmap.properties
 Fri Dec 11 10:09:14 2015
@@ -0,0 +1,4 @@
+# Configuration file for JMAP
+
+tls.keystoreURL=file://conf/keystore
+tls.secret=james72laBalle
\ No newline at end of file

Modified: 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/JMAPModule.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/JMAPModule.java?rev=1719326&r1=1719325&r2=1719326&view=diff
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/JMAPModule.java
 (original)
+++ 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/JMAPModule.java
 Fri Dec 11 10:09:14 2015
@@ -18,11 +18,19 @@
  ****************************************************************/
 package org.apache.james.jmap;
 
+import java.io.FileNotFoundException;
+
+import javax.inject.Singleton;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.jmap.methods.RequestHandler;
 import org.apache.james.jmap.model.ProtocolRequest;
 import org.apache.james.jmap.model.ProtocolResponse;
 
 import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
 import com.google.inject.name.Names;
 
 public class JMAPModule extends AbstractModule {
@@ -46,4 +54,16 @@ public class JMAPModule extends Abstract
         
bindConstant().annotatedWith(Names.named(JMAPServer.DEFAULT_JMAP_PORT)).to(DEFAULT_PORT);
     }
 
+    @Provides
+    @Singleton
+    JMAPConfiguration provideConfiguration(FileSystem fileSystem) throws 
FileNotFoundException, ConfigurationException{
+        PropertiesConfiguration configuration = getConfiguration(fileSystem);
+        String keystore = configuration.getString("tls.keystoreURL");
+        String secret = configuration.getString("tls.secret");
+        return new JMAPConfiguration(keystore, secret);
+    }
+
+    private PropertiesConfiguration getConfiguration(FileSystem fileSystem) 
throws FileNotFoundException, ConfigurationException {
+        return new 
PropertiesConfiguration(fileSystem.getFile(FileSystem.FILE_PROTOCOL_AND_CONF + 
"jmap.properties"));
+    }
 }

Modified: 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java?rev=1719326&r1=1719325&r2=1719326&view=diff
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
 (original)
+++ 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
 Fri Dec 11 10:09:14 2015
@@ -51,7 +51,6 @@ public class JMAPServerModule extends Ab
 
         @Override
         public void initModule() throws Exception {
-            signatureHandler.configure(null);
             signatureHandler.init();
             server.configure(null);
         }

Modified: 
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/modules/TestJMAPServerModule.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/modules/TestJMAPServerModule.java?rev=1719326&r1=1719325&r2=1719326&view=diff
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/modules/TestJMAPServerModule.java
 (original)
+++ 
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/modules/TestJMAPServerModule.java
 Fri Dec 11 10:09:14 2015
@@ -19,9 +19,16 @@
 
 package org.apache.james.modules;
 
+import java.io.FileNotFoundException;
+
+import javax.inject.Singleton;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.james.jmap.JMAPConfiguration;
 import org.apache.james.jmap.JMAPServer;
 
 import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
 import com.google.inject.name.Names;
 
 public class TestJMAPServerModule extends AbstractModule{
@@ -30,4 +37,10 @@ public class TestJMAPServerModule extend
     protected void configure() {
         
bindConstant().annotatedWith(Names.named(JMAPServer.DEFAULT_JMAP_PORT)).to(1080);
     }
+
+    @Provides
+    @Singleton
+    JMAPConfiguration provideConfiguration() throws FileNotFoundException, 
ConfigurationException{
+        return new JMAPConfiguration("keystore", "james72laBalle");
+    }
 }

Added: 
james/project/trunk/server/container/cassandra-guice/src/test/resources/keystore
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/test/resources/keystore?rev=1719326&view=auto
==============================================================================
    (empty)

Added: 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfiguration.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfiguration.java?rev=1719326&view=auto
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfiguration.java
 (added)
+++ 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfiguration.java
 Fri Dec 11 10:09:14 2015
@@ -0,0 +1,38 @@
+/****************************************************************
+ * 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.                                           *
+ ****************************************************************/
+package org.apache.james.jmap;
+
+public class JMAPConfiguration {
+
+    public final String keystore;
+    public final String secret;
+
+    public JMAPConfiguration(String keystore, String secret) {
+        this.keystore = keystore;
+        this.secret = secret;
+    }
+
+    public String getKeystore() {
+        return keystore;
+    }
+
+    public String getSecret() {
+        return secret;
+    }
+}

Modified: 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/JamesSignatureHandler.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/JamesSignatureHandler.java?rev=1719326&r1=1719325&r2=1719326&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/JamesSignatureHandler.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/JamesSignatureHandler.java
 Fri Dec 11 10:09:14 2015
@@ -33,10 +33,8 @@ import javax.inject.Inject;
 import javax.inject.Singleton;
 
 import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.jmap.JMAPConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,7 +43,7 @@ import com.google.common.base.Preconditi
 import com.google.common.base.Throwables;
 
 @Singleton
-public class JamesSignatureHandler implements SignatureHandler, Configurable {
+public class JamesSignatureHandler implements SignatureHandler {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(JamesSignatureHandler.class);
 
@@ -54,28 +52,25 @@ public class JamesSignatureHandler imple
     public static final String JKS = "JKS";
     
     private final FileSystem fileSystem;
-    private String secret;
-    private String keystoreURL;
+    private final JMAPConfiguration jmapConfiguration;
+
     private PrivateKey privateKey;
     private PublicKey publicKey;
 
+
     @Inject
-    @VisibleForTesting JamesSignatureHandler(FileSystem fileSystem) {
+    @VisibleForTesting JamesSignatureHandler(FileSystem fileSystem, 
JMAPConfiguration jmapConfiguration) {
         this.fileSystem = fileSystem;
-    }
-
-    public void configure(HierarchicalConfiguration configuration) throws 
ConfigurationException {
-        keystoreURL = configuration.getString("tls.keystoreURL", 
"file://conf/keystoreURL");
-        secret = configuration.getString("tls.secret", "");
+        this.jmapConfiguration = jmapConfiguration;
     }
 
     @Override
     public void init() throws Exception {
         KeyStore keystore = KeyStore.getInstance(JKS);
-        InputStream fis = fileSystem.getResource(keystoreURL);
-        keystore.load(fis, secret.toCharArray());
+        InputStream fis = 
fileSystem.getResource(jmapConfiguration.getKeystore());
+        keystore.load(fis, jmapConfiguration.getSecret().toCharArray());
         publicKey = keystore.getCertificate(ALIAS).getPublicKey();
-        Key key = keystore.getKey(ALIAS, secret.toCharArray());
+        Key key = keystore.getKey(ALIAS, 
jmapConfiguration.getSecret().toCharArray());
         if (! (key instanceof PrivateKey)) {
             throw new Exception("Provided key is not a PrivateKey");
         }

Modified: 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JamesSignatureHandlerProvider.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JamesSignatureHandlerProvider.java?rev=1719326&r1=1719325&r2=1719326&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JamesSignatureHandlerProvider.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JamesSignatureHandlerProvider.java
 Fri Dec 11 10:09:14 2015
@@ -24,10 +24,8 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.filesystem.api.FileSystem;
-
-import com.google.common.collect.Lists;
+import org.apache.james.jmap.JMAPConfiguration;
 
 public class JamesSignatureHandlerProvider {
 
@@ -48,19 +46,9 @@ public class JamesSignatureHandlerProvid
                 return null;
             }
         };
-        JamesSignatureHandler signatureHandler = new 
JamesSignatureHandler(fileSystem);
-        signatureHandler.configure(createTestCConfiguration());
+        JamesSignatureHandler signatureHandler = new 
JamesSignatureHandler(fileSystem, new JMAPConfiguration("keystore", 
"james72laBalle"));
         signatureHandler.init();
         return signatureHandler;
     }
 
-    private HierarchicalConfiguration createTestCConfiguration() {
-        HierarchicalConfiguration configuration = new 
HierarchicalConfiguration();
-        HierarchicalConfiguration.Node secretNode = new 
HierarchicalConfiguration.Node();
-        secretNode.setName("secret");
-        secretNode.setValue("james72laBalle");
-        configuration.addNodes("tls", Lists.newArrayList(secretNode));
-        return configuration;
-    }
-
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to