From 3ff885a7c10218d3a44b8827cede619922aa05e6 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Mon, 12 Jun 2023 06:42:38 +0200 Subject: [PATCH] View packaging still in progress --- api-webapp/pom.xml | 10 ++++++ .../org/jeudego/pairgoth/web/WebappManager.kt | 2 +- view-webapp/pom.xml | 14 ++++++++ .../main/config/pairgoth.default.properties | 3 +- .../org/jeudego/pairgoth/view/ApiTool.kt | 2 +- .../jeudego/pairgoth/web/LanguageFilter.kt | 2 +- .../org/jeudego/pairgoth/web/WebappManager.kt | 2 +- .../jeudego/pairgoth/application/Pairgoth.kt | 35 +++++++++++-------- .../main/resources/server.default.properties | 3 +- 9 files changed, 53 insertions(+), 20 deletions(-) diff --git a/api-webapp/pom.xml b/api-webapp/pom.xml index 9f884e0..1a29b18 100644 --- a/api-webapp/pom.xml +++ b/api-webapp/pom.xml @@ -73,6 +73,16 @@ + + org.eclipse.jetty + jetty-maven-plugin + ${jetty.version} + + + /api/ + + + diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt index 1688dc9..c54b77a 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt @@ -51,7 +51,7 @@ class WebappManager : ServletContextListener, ServletContextAttributeListener, H /* ServletContextListener interface */ override fun contextInitialized(sce: ServletContextEvent) { context = sce.servletContext - logger.info("---------- Starting Web Application ----------") + logger.info("---------- Starting Pairgoth Server ----------") context.setAttribute("manager", this) webappRoot = context.getRealPath("/") try { diff --git a/view-webapp/pom.xml b/view-webapp/pom.xml index bfa5175..43a4e1a 100644 --- a/view-webapp/pom.xml +++ b/view-webapp/pom.xml @@ -95,6 +95,20 @@ + + org.eclipse.jetty + jetty-maven-plugin + ${jetty.version} + + 0 + + + pairgoth.webapp.url + http://localhost:8080 + + + + diff --git a/view-webapp/src/main/config/pairgoth.default.properties b/view-webapp/src/main/config/pairgoth.default.properties index 48e854b..d8376ef 100644 --- a/view-webapp/src/main/config/pairgoth.default.properties +++ b/view-webapp/src/main/config/pairgoth.default.properties @@ -1,6 +1,7 @@ # webapp -webapp.env = dev +env = dev webapp.url = https://localhost:8080 +api.url = https://localhost:8085 # store store = file diff --git a/view-webapp/src/main/kotlin/org/jeudego/pairgoth/view/ApiTool.kt b/view-webapp/src/main/kotlin/org/jeudego/pairgoth/view/ApiTool.kt index ec0b58d..0294f9e 100644 --- a/view-webapp/src/main/kotlin/org/jeudego/pairgoth/view/ApiTool.kt +++ b/view-webapp/src/main/kotlin/org/jeudego/pairgoth/view/ApiTool.kt @@ -10,7 +10,7 @@ import okhttp3.internal.EMPTY_REQUEST class ApiTool { companion object { const val JSON = "application/json" - val apiRoot = System.getProperty("pairgoth.webapp.url").let { base -> + val apiRoot = System.getProperty("pairgoth.api.url").let { base -> if (base.endsWith('/')) "${base}api/" else "${base}/api/" } diff --git a/view-webapp/src/main/kotlin/org/jeudego/pairgoth/web/LanguageFilter.kt b/view-webapp/src/main/kotlin/org/jeudego/pairgoth/web/LanguageFilter.kt index 20cce78..be413a4 100644 --- a/view-webapp/src/main/kotlin/org/jeudego/pairgoth/web/LanguageFilter.kt +++ b/view-webapp/src/main/kotlin/org/jeudego/pairgoth/web/LanguageFilter.kt @@ -42,7 +42,7 @@ class LanguageFilter : Filter { // the request must be redirected val preferredLanguage = getPreferredLanguage(request) val destination = if (lang != null) target else uri - response.sendRedirect("${preferredLanguage}${destination}") + response.sendRedirect("/${preferredLanguage}${destination}") } } } diff --git a/view-webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt b/view-webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt index 1688dc9..ccb3987 100644 --- a/view-webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt +++ b/view-webapp/src/main/kotlin/org/jeudego/pairgoth/web/WebappManager.kt @@ -51,7 +51,7 @@ class WebappManager : ServletContextListener, ServletContextAttributeListener, H /* ServletContextListener interface */ override fun contextInitialized(sce: ServletContextEvent) { context = sce.servletContext - logger.info("---------- Starting Web Application ----------") + logger.info("---------- Starting Pairgoth Web Client ----------") context.setAttribute("manager", this) webappRoot = context.getRealPath("/") try { diff --git a/webserver/src/main/kotlin/org/jeudego/pairgoth/application/Pairgoth.kt b/webserver/src/main/kotlin/org/jeudego/pairgoth/application/Pairgoth.kt index 8fb9bdf..f0223ef 100644 --- a/webserver/src/main/kotlin/org/jeudego/pairgoth/application/Pairgoth.kt +++ b/webserver/src/main/kotlin/org/jeudego/pairgoth/application/Pairgoth.kt @@ -79,12 +79,25 @@ private fun getResourceProperty(key: String) = serverProps.getProperty(key)?.let private fun launchServer() { - // create webapps contexts - val apiContext = createContext("api", "/api") - val viewContext = createContext("view", "/") + // read default properties and provided ones, if any + readProperties() - // handle properties - readProperties(apiContext, viewContext) + // create webapps contexts + val webAppContexts = mutableListOf() + val mode = serverProps["mode"] ?: throw Error("missing property: mode") + if (mode == "server" || mode == "standalone") webAppContexts.add(createContext("api", "/api")) + if (mode == "client" || mode == "standalone") webAppContexts.add(createContext("view", "/")) + + // special handling for logger properties + serverProps.stringPropertyNames().asSequence().filter { propName -> + propName.startsWith("logger.") + }.forEach { propName -> + val key = "webapp-slf4j-logger.${propName.substring(7)}" + val value = serverProps.getProperty(propName) + webAppContexts.forEach { context -> + context.setInitParameter(key, value) + } + } val webappUrl = serverProps.getProperty("webapp.url")?.let { URL(it) } ?: throw Error("missing property webapp.url") val secure = webappUrl.protocol == "https" @@ -96,7 +109,7 @@ private fun launchServer() { server.apply { // register webapps - handler = ContextHandlerCollection(apiContext, viewContext) + handler = ContextHandlerCollection(*webAppContexts.toTypedArray()) if (secure) { val connector = buildSecureConnector(server, webappUrl.port) addConnector(connector) @@ -112,7 +125,7 @@ private fun createContext(webapp: String, contextPath: String) = WebAppContext() context.contextPath = contextPath } -private fun readProperties(vararg contexts: WebAppContext) { +private fun readProperties() { val defaultProps = getResource("/server.default.properties") ?: throw Error("missing default server properties") defaultProps.openStream().use { serverProps.load(InputStreamReader(it, StandardCharsets.UTF_8)) @@ -123,13 +136,7 @@ private fun readProperties(vararg contexts: WebAppContext) { serverProps.entries.forEach { entry -> val property = entry.key as String val value = entry.value as String - if (property.startsWith("logger.")) { - // special handling for logger properties - val webappLoggerPropKey = "webapp-slf4j-logger.${property.substring(7)}" - contexts.forEach { context -> - context.setInitParameter(webappLoggerPropKey, value) - } - } else if (property.startsWith("webapp.ssl.")) { + if (!property.startsWith("webapp.ssl.")) { // do not propagate ssl properties further } else { System.setProperty("pairgoth.$property", value) diff --git a/webserver/src/main/resources/server.default.properties b/webserver/src/main/resources/server.default.properties index c996630..3357646 100644 --- a/webserver/src/main/resources/server.default.properties +++ b/webserver/src/main/resources/server.default.properties @@ -1,4 +1,5 @@ webapp.url = https://localhost:8443 webapp.ssl.key = jar:file:$jar!/ssl/localhost.key -# webapp.ssl.pass = foobar (not supported for now) +webapp.ssl.pass = webapp.ssl.cert = jar:file:$jar!/ssl/localhost.crt +mode = standalone