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