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