From 3293b85ad46d2622ae6ead2caf107e3c41c15561 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Mon, 29 Sep 2014 12:40:12 +0000
Subject: [PATCH] #2021 fix - Added Config class to read parameters

---
 securis/src/main/java/net/curisit/securis/SeCurisServer.java |   15 ++-
 securis/src/main/java/net/curisit/securis/utils/Config.java  |  198 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 206 insertions(+), 7 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/SeCurisServer.java b/securis/src/main/java/net/curisit/securis/SeCurisServer.java
index 3f98d84..961da24 100644
--- a/securis/src/main/java/net/curisit/securis/SeCurisServer.java
+++ b/securis/src/main/java/net/curisit/securis/SeCurisServer.java
@@ -12,6 +12,7 @@
 
 import net.curisit.securis.ioc.RequestsModule;
 import net.curisit.securis.ioc.SecurisModule;
+import net.curisit.securis.utils.Config;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.logging.log4j.LogManager;
@@ -149,7 +150,7 @@
         QueuedThreadPool threadPool = new QueuedThreadPool();
         threadPool.setMaxThreads(50);
         
-        server = new Server(9997);
+        server = new Server(Config.getInt(Config.KEYS.SERVER_PORT, 9080));
         ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
         context.setContextPath("/");
         context.addEventListener(injector.getInstance(GuiceResteasyBootstrapServletContextListener.class));
@@ -184,7 +185,7 @@
         
         HttpConfiguration http_config = new HttpConfiguration();
         http_config.setSecureScheme("https");
-        http_config.setSecurePort(8443);
+        http_config.setSecurePort(Config.getInt(Config.KEYS.SERVER_SSL_PORT, 9443));
         http_config.setOutputBufferSize(32768);
         http_config.setSendServerVersion(true);
         http_config.setSendDateHeader(false);
@@ -194,9 +195,9 @@
         https_config.addCustomizer(new SecureRequestCustomizer());
         
         SslContextFactory sslContextFactory = new SslContextFactory();
-        sslContextFactory.setKeyStorePath("/Users/rob/.ssh/keys/securis.pkcs12");
-        sslContextFactory.setKeyStoreType("PKCS12");
-        sslContextFactory.setKeyStorePassword("curist3c");
+        sslContextFactory.setKeyStorePath(Config.get(Config.KEYS.KEYSTORE_PATH));
+        sslContextFactory.setKeyStoreType(Config.get(Config.KEYS.KEYSTORE_TYPE, "JKS"));
+        sslContextFactory.setKeyStorePassword(Config.get(Config.KEYS.KEYSTORE_PASSWORD, ""));
         //sslContextFactory.setCertAlias("1");
 //        sslContextFactory.setKeyManagerPassword("curist3c");
 //        sslContextFactory.setTrustStorePath("/Users/rob/.ssh/keys/keystore");
@@ -206,8 +207,8 @@
         LOG.info("Protocol: {}", sslContextFactory.getProtocol());
         
         ServerConnector sslConnector = new ServerConnector(server, new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(https_config));
-        sslConnector.setPort(8443);
-        sslConnector.setHost("securis.curistec.com");
+        sslConnector.setPort(Config.getInt(Config.KEYS.SERVER_SSL_PORT, 9443));
+        sslConnector.setHost(Config.get(Config.KEYS.SERVER_HOSTNAME, "0.0.0.0"));
         server.addConnector( sslConnector );
 
         server.setHandler(context);
diff --git a/securis/src/main/java/net/curisit/securis/utils/Config.java b/securis/src/main/java/net/curisit/securis/utils/Config.java
new file mode 100644
index 0000000..bd22171
--- /dev/null
+++ b/securis/src/main/java/net/curisit/securis/utils/Config.java
@@ -0,0 +1,198 @@
+package net.curisit.securis.utils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * Class that loads and serves global config parameters.
+ * 
+ * @author rsanchez
+ */
+public class Config {
+
+	private static final Logger LOG = LogManager.getLogger(Config.class);
+
+	/**
+	 * Key used to store config file resource location. In a web application, can be set as initial parameter in a servlet loaded on startup
+	 */
+	public static final String KEY_CONFIG_FILE = "/securis-server.properties";
+
+	private static Properties params = null;
+
+	static {
+		try {
+			loadParameters(KEY_CONFIG_FILE);
+		} catch (IOException e) {
+			LOG.error("Config file {} was not found in classpath", KEY_CONFIG_FILE);
+			System.exit(-2);
+		}
+	}
+
+	/**
+	 * Loads application global parameters from a classpath resource
+	 * 
+	 * @param resource
+	 *            : Resource location in classpath, i.e: "/resource/cp-securis.conf"
+	 * @throws IOException
+	 */
+	public static void loadParameters(String resource) throws IOException {
+
+		LOG.debug("Loading params from " + resource);
+		InputStream fileis = Params.class.getResourceAsStream(resource);
+
+		params = new Properties();
+		try {
+
+			params.load(fileis);
+			LOG.debug("Params loaded OK from {}", resource);
+		} catch (IOException e) {
+			LOG.error("Error loading config file: " + e);
+			params = null;
+			throw e;
+		}
+
+	}
+
+	public static String getByDomain(String domain, String paramname) {
+		return getByDomain(domain, paramname, null);
+	}
+
+	public static String getByPrefix(String prefix, String paramname) {
+		return get(prefix + "." + paramname, get(paramname));
+	}
+
+	public static String getByPrefix(String prefix, String paramname, String defaultVal) {
+		return get(prefix + "." + paramname, get(paramname, defaultVal));
+	}
+
+	public static String getByDomain(String domain, String paramname, String defaultval) {
+		return get(paramname + "." + domain, defaultval);
+	}
+
+	public static int getIntByDomain(String domain, String paramname) {
+		return getInt(paramname + "." + domain, getInt(paramname));
+	}
+
+	public static int getIntByDomain(String domain, String paramname, int defaultval) {
+		return getInt(paramname + "." + domain, defaultval);
+	}
+
+	/**
+	 * Gets a List with all values of properties that begins with <code>prefix</code> It reads sequentially. For example:
+	 * 
+	 * <pre>
+	 * 	securis.sort.comparator.0: net.cp.securis.comparators.ComparePttidVsPtn
+	 * 	securis.sort.comparator.1: net.cp.securis.comparators.CompareFrequency
+	 * 	securis.sort.comparator.2: net.cp.securis.comparators.CompareOutgoingVsIncomming
+	 * 	securis.sort.comparator.3: net.cp.securis.comparators.CompareDuration 
+	 * 	securis.sort.comparator.4: net.cp.securis.comparators.CompareCallVsSms
+	 * </pre>
+	 * 
+	 * That config (for prefix: "securis.sort.comparator" ) will return a List<String> with values:
+	 * 
+	 * <pre>
+	 * 	"net.cp.securis.comparators.ComparePttidVsPtn", 
+	 * 	"net.cp.securis.comparators.CompareFrequency", 
+	 * 	"net.cp.securis.comparators.CompareOutgoingVsIncomming", 
+	 * 	"net.cp.securis.comparators.CompareDuration", 
+	 * 	"net.cp.securis.comparators.CompareCallVsSms"
+	 * </pre>
+	 * 
+	 * Note: If there is a gap between suffixes process will stop, that is, only will be returned properties found before gap.
+	 * 
+	 * @param prefix
+	 * @return
+	 */
+	public static List<String> getListByPrefix(String prefix) {
+		List<String> list = new ArrayList<String>();
+
+		String tpl = prefix + ".{0}";
+
+		int i = 0;
+		String value = get(MessageFormat.format(tpl, i++));
+		while (value != null) {
+			list.add(value);
+			value = get(MessageFormat.format(tpl, i++));
+		}
+
+		return list;
+	}
+
+	/**
+	 * Gets param value in config file or environment variables
+	 * 
+	 * @param paramname
+	 *            Global parameter's name
+	 * @return Value of paramname or null if paramname is not found neither in config file nor in environment variables
+	 */
+	public static String get(String paramname) {
+
+		assert (params != null) : "Parameters have not been loaded. Call method loadParameters(resource) before use Params.";
+
+		String value = params.getProperty(paramname);
+		if (value == null)
+			value = System.getenv(paramname);
+		return value;
+	}
+
+	/**
+	 * Gets param value from config file or environment variables
+	 * 
+	 * @param paramname
+	 *            Global parameter's name
+	 * @param defaultval
+	 * @return Value of paramname or defaultval if paramname is not found
+	 */
+	public static String get(String paramname, String defaultval) {
+		String value = get(paramname);
+		return (value == null ? defaultval : value);
+	}
+
+	/**
+	 * Gets param value in config file or environment variables
+	 * 
+	 * @param paramname
+	 *            Global parameter's name
+	 * @return Integer value of paramname or -1 if paramname is not found neither in config file nor in environment variables
+	 */
+	public static int getInt(String paramname) {
+		String value = get(paramname);
+		return (value == null ? -1 : Integer.parseInt(value));
+	}
+
+	/**
+	 * Gets param value from config file or environment variables
+	 * 
+	 * @param paramname
+	 *            Global parameter's name
+	 * @param defaultval
+	 * @return Integer value of paramname or defaultval if paramname is not found
+	 */
+	public static int getInt(String paramname, int defaultval) {
+		String value = get(paramname);
+		return (value == null ? defaultval : Integer.parseInt(value));
+	}
+
+	public static class KEYS {
+
+
+	            
+		public static final String SERVER_HOSTNAME = "license.server.hostname";
+
+	    public static final String SERVER_PORT = "license.server.port";
+	    public static final String SERVER_SSL_PORT = "license.server.ssl.port";
+
+		public static final String KEYSTORE_PATH = "ssl.keystore.path";
+        public static final String KEYSTORE_TYPE = "ssl.keystore.type";
+        public static final String KEYSTORE_PASSWORD = "ssl.keystore.password";
+        public static final String KEYSTORE_ALIAS = "ssl.keystore.alias";
+	}
+
+}

--
Gitblit v1.3.2