Revision: 8391
http://languagetool.svn.sourceforge.net/languagetool/?rev=8391&view=rev
Author: dnaber
Date: 2012-11-13 20:59:52 +0000 (Tue, 13 Nov 2012)
Log Message:
-----------
https server: load config from property file for easier extensibility and
better security (password not used as parameter on command line)
Modified Paths:
--------------
trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPSServer.java
trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPSServerConfig.java
trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPServer.java
trunk/JLanguageTool/src/main/java/org/languagetool/server/Server.java
trunk/JLanguageTool/src/test/java/org/languagetool/server/HTTPSServerConfigTest.java
Added Paths:
-----------
trunk/JLanguageTool/src/test/resources/org/languagetool/server/
trunk/JLanguageTool/src/test/resources/org/languagetool/server/https-server.properties
Modified:
trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPSServer.java
===================================================================
--- trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPSServer.java
2012-11-13 09:03:01 UTC (rev 8390)
+++ trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPSServer.java
2012-11-13 20:59:52 UTC (rev 8391)
@@ -110,10 +110,11 @@
public static void main(String[] args) throws IOException {
if (args.length > 7 || usageRequested(args)) {
System.out.println("Usage: " + HTTPSServer.class.getSimpleName()
- + " [-p|--port port] [--public] [--keystore keystorefile]
[--password password]");
+ + " --config propertyFile [--port|-p port] [--public]");
+ System.out.println(" --config file a Java property file with values
for:");
+ System.out.println(" 'keystore' - a Java keystore with
an SSL certificate");
+ System.out.println(" 'password' - the keystore's
password");
printCommonOptions();
- System.out.println(" --keystore a Java keystore with the SSL
certificate");
- System.out.println(" --password password for the Java keystore");
System.exit(1);
}
final boolean runInternal = false;
Modified:
trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPSServerConfig.java
===================================================================
---
trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPSServerConfig.java
2012-11-13 09:03:01 UTC (rev 8390)
+++
trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPSServerConfig.java
2012-11-13 20:59:52 UTC (rev 8391)
@@ -19,14 +19,17 @@
package org.languagetool.server;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
/**
* @since 2.0
*/
public class HTTPSServerConfig extends HTTPServerConfig {
- private File keystore;
- private String keyStorePassword;
+ private final File keystore;
+ private final String keyStorePassword;
/**
* @param keystore a Java keystore file as created with the <tt>keytool</tt>
command
@@ -55,26 +58,43 @@
*/
HTTPSServerConfig(String[] args) {
super(args);
+ File config = null;
for (int i = 0; i < args.length; i++) {
- if ("--keystore".equals(args[i])) {
- keystore = new File(args[++i]);
- } else if ("--password".equals(args[i])) {
- keyStorePassword = args[++i];
+ if ("--config".equals(args[i])) {
+ config = new File(args[++i]);
}
}
- if (keystore == null) {
- throw new IllegalArgumentException("Parameter --keystore must be set");
+ if (config == null) {
+ throw new IllegalArgumentException("Parameter --config must be set and
point to a property file");
}
- if (keyStorePassword == null) {
- throw new IllegalArgumentException("Parameter --password must be set");
+ try {
+ final Properties props = new Properties();
+ final FileInputStream fis = new FileInputStream(config);
+ try {
+ props.load(fis);
+ keystore = new File(getProperty(props, "keystore", config));
+ keyStorePassword = getProperty(props, "password", config);
+ } finally {
+ fis.close();
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("Could not load properties from '" + config +
"'", e);
}
}
- public File getKeystore() {
+ private String getProperty(Properties props, String propertyName, File
config) {
+ final String propertyValue = (String)props.get(propertyName);
+ if (propertyValue == null || propertyValue.trim().isEmpty()) {
+ throw new IllegalArgumentException("Property '" + propertyName + "' must
be set in " + config);
+ }
+ return propertyValue;
+ }
+
+ File getKeystore() {
return keystore;
}
- public String getKeyStorePassword() {
+ String getKeyStorePassword() {
return keyStorePassword;
}
}
Modified:
trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPServer.java
===================================================================
--- trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPServer.java
2012-11-13 09:03:01 UTC (rev 8390)
+++ trunk/JLanguageTool/src/main/java/org/languagetool/server/HTTPServer.java
2012-11-13 20:59:52 UTC (rev 8391)
@@ -105,9 +105,8 @@
public static void main(String[] args) throws IOException {
if (args.length > 3 || usageRequested(args)) {
- System.out.println("Usage: " + HTTPServer.class.getSimpleName() + "
[-p|--port port] [--public]");
- System.out.println(" -p, --port port to bind to, defaults to " +
DEFAULT_PORT + " if not specified");
- System.out.println(" --public allow this server process to be
connected from anywhere (not recommended)");
+ System.out.println("Usage: " + HTTPServer.class.getSimpleName() + "
[--port|-p port] [--public]");
+ printCommonOptions();
System.exit(1);
}
final boolean runInternal = false;
Modified: trunk/JLanguageTool/src/main/java/org/languagetool/server/Server.java
===================================================================
--- trunk/JLanguageTool/src/main/java/org/languagetool/server/Server.java
2012-11-13 09:03:01 UTC (rev 8390)
+++ trunk/JLanguageTool/src/main/java/org/languagetool/server/Server.java
2012-11-13 20:59:52 UTC (rev 8391)
@@ -67,8 +67,8 @@
}
protected static void printCommonOptions() {
- System.out.println(" -p, --port port to bind to, defaults to " +
DEFAULT_PORT + " if not specified");
- System.out.println(" --public allow this server process to be
connected from anywhere (not recommended)");
+ System.out.println(" --port, -p port to bind to, defaults to " +
DEFAULT_PORT + " if not specified");
+ System.out.println(" --public allow this server process to be
connected from anywhere (not recommended)");
}
}
Modified:
trunk/JLanguageTool/src/test/java/org/languagetool/server/HTTPSServerConfigTest.java
===================================================================
---
trunk/JLanguageTool/src/test/java/org/languagetool/server/HTTPSServerConfigTest.java
2012-11-13 09:03:01 UTC (rev 8390)
+++
trunk/JLanguageTool/src/test/java/org/languagetool/server/HTTPSServerConfigTest.java
2012-11-13 20:59:52 UTC (rev 8391)
@@ -33,19 +33,21 @@
fail();
} catch (IllegalArgumentException expected) {}
- final HTTPSServerConfig config1 = new HTTPSServerConfig("--public
--keystore foo --password xxx".split(" "));
+ final String propertyFile =
HTTPSServerConfigTest.class.getResource("/org/languagetool/server/https-server.properties").getFile();
+
+ final HTTPSServerConfig config1 = new HTTPSServerConfig(("--public
--config " + propertyFile).split(" "));
assertThat(config1.getPort(), is(HTTPServerConfig.DEFAULT_PORT));
assertThat(config1.isPublicAccess(), is(true));
assertThat(config1.isVerbose(), is(false));
- assertThat(config1.getKeystore().getName(), is("foo"));
- assertThat(config1.getKeyStorePassword(), is("xxx"));
+ assertThat(config1.getKeystore().toString(),
is("src/test/resources/org/languagetool/test-keystore.jks"));
+ assertThat(config1.getKeyStorePassword(), is("mytest"));
- final HTTPSServerConfig config2 = new HTTPSServerConfig("-p 9999
--keystore /tmp/foo.kjs --password pwd".split(" "));
+ final HTTPSServerConfig config2 = new HTTPSServerConfig(("-p 9999 --config
" + propertyFile).split(" "));
assertThat(config2.getPort(), is(9999));
assertThat(config2.isPublicAccess(), is(false));
assertThat(config2.isVerbose(), is(false));
- assertThat(config2.getKeystore().getAbsolutePath(), is("/tmp/foo.kjs"));
- assertThat(config2.getKeyStorePassword(), is("pwd"));
+ assertThat(config2.getKeystore().toString(),
is("src/test/resources/org/languagetool/test-keystore.jks"));
+ assertThat(config2.getKeyStorePassword(), is("mytest"));
}
}
Added:
trunk/JLanguageTool/src/test/resources/org/languagetool/server/https-server.properties
===================================================================
---
trunk/JLanguageTool/src/test/resources/org/languagetool/server/https-server.properties
(rev 0)
+++
trunk/JLanguageTool/src/test/resources/org/languagetool/server/https-server.properties
2012-11-13 20:59:52 UTC (rev 8391)
@@ -0,0 +1,2 @@
+keystore = src/test/resources/org/languagetool/test-keystore.jks
+password = mytest
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Languagetool-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-commits