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: [email protected]
For additional commands, e-mail: [email protected]