From eb1f0c4040c81d245f9223011f2e4c6d4b5d582f Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Mon, 5 Jun 2023 17:58:17 +0200 Subject: [PATCH] Runtime properties --- .../pairgoth/container/ServerMain.java | 22 ++++++++++++- debug.sh | 3 +- pairgoth.properties.example | 2 -- .../org/jeudego/pairgoth/web/WebappManager.kt | 33 +++++-------------- .../src/main/webapp/WEB-INF/logger.properties | 2 -- .../WEB-INF/pairgoth.default.properties | 14 ++++++++ webapp/src/main/webapp/WEB-INF/web.xml | 13 -------- 7 files changed, 44 insertions(+), 45 deletions(-) delete mode 100644 webapp/src/main/webapp/WEB-INF/logger.properties create mode 100644 webapp/src/main/webapp/WEB-INF/pairgoth.default.properties diff --git a/container/src/main/java/org/jeudego/pairgoth/container/ServerMain.java b/container/src/main/java/org/jeudego/pairgoth/container/ServerMain.java index 84c5f2e..76b47e4 100644 --- a/container/src/main/java/org/jeudego/pairgoth/container/ServerMain.java +++ b/container/src/main/java/org/jeudego/pairgoth/container/ServerMain.java @@ -20,10 +20,14 @@ package org.jeudego.pairgoth.container; import java.io.File; import java.io.FileNotFoundException; +import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Enumeration; +import java.util.Map; +import java.util.Properties; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.util.resource.PathResource; @@ -53,8 +57,8 @@ public class ServerMain private void run() throws Throwable { + // create server and web context Server server = new Server(8080); - WebAppContext context = new WebAppContext() { @Override public boolean isServerResource(String name, URL url) @@ -64,6 +68,22 @@ public class ServerMain }; context.setContextPath("/"); + // pairgoth runtime properties + File properties = new File("./pairgoth.properties"); + if (properties.exists()) { + Properties props = new Properties(); + props.load(new FileReader(properties)); + for (Map.Entry entry: props.entrySet()) { + String property = (String)entry.getKey(); + String value = (String)entry.getValue(); + if (property.startsWith("logger.")) { + context.setInitParameter("webapp-slf4j-logger." + property.substring(7), value); + } else { + System.setProperty("pairgoth." + property, value); + } + } + } + switch (getOperationalMode()) { case PROD: diff --git a/debug.sh b/debug.sh index 05770f8..31b1999 100755 --- a/debug.sh +++ b/debug.sh @@ -1,4 +1,3 @@ #!/bin/sh -mvn package -java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5006 -jar application/target/pairgoth-engine.war +mvn package && java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5006 -jar application/target/pairgoth-engine.war diff --git a/pairgoth.properties.example b/pairgoth.properties.example index e5549de..72074af 100644 --- a/pairgoth.properties.example +++ b/pairgoth.properties.example @@ -11,5 +11,3 @@ smtp.password = # logging logger.level = trace -logger.notification = false -# logger.notification = :smtp:::: diff --git a/webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt b/webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt index 6a831f2..148fc00 100644 --- a/webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt +++ b/webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt @@ -55,32 +55,14 @@ class WebappManager : ServletContextListener, ServletContextAttributeListener, H context.setAttribute("manager", this) webappRoot = context.getRealPath("/") try { - properties.load(context.getResourceAsStream("/WEB-INF/pairgoth.properties")) - val submaps: MutableMap> = HashMap() - for (prop in properties.stringPropertyNames()) { - val value = properties.getProperty(prop) - - // filter out missing values and passwords - if (value.startsWith("\${") || prop.contains("password")) continue - context.setAttribute(prop, value) - - // also support one level of submaps (TODO - more) - val dot = prop.indexOf('.') - if (dot != -1) { - val topKey = prop.substring(0, dot) - val subKey = prop.substring(dot + 1) - if ("password" == subKey) continue - var submap = submaps[topKey] - if (submap == null) { - submap = HashMap() - submaps[topKey] = submap - } - submap[subKey] = value - } - } - for ((key, value) in submaps) { - context.setAttribute(key, value) + // load default properties + properties.load(context.getResourceAsStream("/WEB-INF/pairgoth.default.properties")) + // override with system properties after stripping off the 'pairgoth.' prefix + System.getProperties().filter { (key, value) -> key is String && key.startsWith(PAIRGOTH_PROPERTIES_PREFIX) + }.forEach { (key, value) -> + properties[(key as String).removePrefix(PAIRGOTH_PROPERTIES_PREFIX)] = value } + logger.info("Using profile {}", properties.getProperty("webapp.env")) // set system user agent string to empty string @@ -119,6 +101,7 @@ class WebappManager : ServletContextListener, ServletContextAttributeListener, H override fun sessionDestroyed(se: HttpSessionEvent) {} companion object { + const val PAIRGOTH_PROPERTIES_PREFIX = "pairgoth." lateinit var webappRoot: String lateinit var context: ServletContext private val webServices: MutableMap> = TreeMap() diff --git a/webapp/src/main/webapp/WEB-INF/logger.properties b/webapp/src/main/webapp/WEB-INF/logger.properties deleted file mode 100644 index 1626e4c..0000000 --- a/webapp/src/main/webapp/WEB-INF/logger.properties +++ /dev/null @@ -1,2 +0,0 @@ -format = [%level] %ip [%logger] %message (@%file:%line:%column) -level = trace diff --git a/webapp/src/main/webapp/WEB-INF/pairgoth.default.properties b/webapp/src/main/webapp/WEB-INF/pairgoth.default.properties new file mode 100644 index 0000000..3eb6b08 --- /dev/null +++ b/webapp/src/main/webapp/WEB-INF/pairgoth.default.properties @@ -0,0 +1,14 @@ +# webapp +webapp.env = dev +webapp.url = http://localhost:8080 + +# smtp +smtp.sender = +smtp.host = +smtp.port = 587 +smtp.user = +smtp.password = + +# logging +logger.level = trace +logger.format = [%level] %ip [%logger] %message diff --git a/webapp/src/main/webapp/WEB-INF/web.xml b/webapp/src/main/webapp/WEB-INF/web.xml index efb7db6..4d50f1b 100644 --- a/webapp/src/main/webapp/WEB-INF/web.xml +++ b/webapp/src/main/webapp/WEB-INF/web.xml @@ -53,17 +53,4 @@ webapp-slf4j-logger.format %logger [%level] [%ip] %message @%file:%line:%column - - webapp-slf4j-logger.level - trace - - -