From 812f12a69468d5b20fef7afc6cd82c130481e9ad Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 17 Apr 2021 21:56:08 +0000
Subject: [PATCH] WIP: react app -> Spring boot
---
borgbutler-docker/app/entrypoint.sh | 2
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt | 10 ++++-
borgbutler-server/build.gradle | 15 +------
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebController.kt | 15 +++++++
borgbutler-webapp/build.gradle | 21 +++++++++-
borgbutler-docker/app/Dockerfile | 5 --
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/RunningMode.kt | 25 +++++++++---
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt | 15 +++++++
8 files changed, 78 insertions(+), 30 deletions(-)
diff --git a/borgbutler-docker/app/Dockerfile b/borgbutler-docker/app/Dockerfile
index a5b9096..bce532b 100644
--- a/borgbutler-docker/app/Dockerfile
+++ b/borgbutler-docker/app/Dockerfile
@@ -27,11 +27,6 @@
#COPY shutdown.sh /app
#COPY startup.sh /app
-#ARG JAVA_OPTS="-Xms1g -Xmx1g"
-#ENV JAVA_OPTS_VAR=$JAVA_OPTS
-
-# -Dloader.path=${HOME}/ProjectForge/resources/milton ${DEBUGOPTS}
-
# Variable expansion doesn't work for ENTRYPOINT definition as array, but array is required, because graceful shutdown of
# container isn't given if java is started via 'sh -c' as it will be done by ENTRYPOINT java .....
# Java options are modifiable by user through own ENTRYPOINT definition on docker run or in docker-compose.yml.
diff --git a/borgbutler-docker/app/entrypoint.sh b/borgbutler-docker/app/entrypoint.sh
index 9f158f1..6750c5d 100644
--- a/borgbutler-docker/app/entrypoint.sh
+++ b/borgbutler-docker/app/entrypoint.sh
@@ -49,7 +49,7 @@
echo "Starting java ${JAVA_OPTS} -cp app/web/*:app/lib/* -DBorgButlerHome=/BorgButler/ -DapplicationHome=/app -DbindAddress=0.0.0.0 -DallowedClientIps=172.17. ${JAVA_MAIN} -q ${JAVA_ARGS}"
-java $JAVA_OPTS -cp app/web/*:app/lib/* -DborgbutlerHome=/BorgButler/ -DapplicationHome=/app -DbindAddress=0.0.0.0 -DallowedClientIps=172.17. $JAVA_MAIN -q $JAVA_ARGS &
+java $JAVA_OPTS -cp app/web/*:app/lib/* -DborgbutlerHome=/BorgButler/ -DapplicationHome=/app -Dserver.address=0.0.0.0 -DallowedClientIps=172.17. $JAVA_MAIN -q $JAVA_ARGS &
CHILD=$!
wait $CHILD
diff --git a/borgbutler-server/build.gradle b/borgbutler-server/build.gradle
index f146946..9dbd681 100644
--- a/borgbutler-server/build.gradle
+++ b/borgbutler-server/build.gradle
@@ -6,6 +6,7 @@
dependencies {
compile project(':borgbutler-core')
+ compile project(':borgbutler-webapp')
// https://mvnrepository.com/artifact/org.apache.commons/commons-text
implementation group: 'org.apache.commons', name: 'commons-text', version: '1.6'
implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.2'
@@ -64,18 +65,6 @@
dependsOn createVersionProperties
}
-// Builds the distribution
-distributions {
- main {
- contents {
- // Prepared by nbmBuild:
- from ("${project(':borgbutler-webapp').projectDir}/build") {
- into 'web'
- }
- }
- }
-}
-
-distZip.dependsOn ':borgbutler-webapp:npmBuild'
+distZip.dependsOn ':borgbutler-webapp:packageWebApp'
//distZip.dependsOn ':borgbutler-docs:buildWebDoc'
task(dist).dependsOn distZip
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
index 983d9e3..3f5a401 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
@@ -46,7 +46,8 @@
// Preread configuration to get setting development mode for WebConfig (logging not yet initialized, so
// reread configuration later after logging is available for getting log information on errors etc.)
val configuration = ConfigurationHandler.readJsonConfigfile(File(borgButlerHome))
- RunningMode.webDevelopment = RunningMode.runningInIDE || (configuration as? ServerConfiguration)?.webDevelopmentMode == true
+ RunningMode.webDevelopment =
+ RunningMode.runningInIDE || (configuration as? ServerConfiguration)?.webDevelopmentMode == true
if (System.getProperty("LOG_PATH").isNullOrBlank()) {
// Needed by logback-spring.xml
System.setProperty("LOG_PATH", borgButlerHome)
@@ -103,7 +104,11 @@
BorgInstallation.getInstance().initialize()
// 0.0.0.0 for Docker installations.
- val url = "http://$serverAddress:$serverPort/".replace("0.0.0.0", "127.0.0.1")
+ var url = "http://$serverAddress:$serverPort/"
+ if (serverAddress.contains("0.0.0.0")) {
+ log.info { "Server bind address: $url" }
+ url = url.replace("0.0.0.0", "127.0.0.1")
+ }
val uri = URI.create(url)
val quietMode = line.hasOption('q')
if (!quietMode && RunningMode.desktopSupportsBrowse && RunningMode.headlessMode) {
@@ -132,6 +137,7 @@
@EventListener(ApplicationReadyEvent::class)
open fun startApp() {
+ log.info { "Start-up of BorgButler finished. Have fun!" }
}
@PreDestroy
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/RunningMode.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/RunningMode.kt
index 98a7b0c..8a6cf72 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/RunningMode.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/RunningMode.kt
@@ -2,7 +2,6 @@
import org.slf4j.LoggerFactory
import java.awt.Desktop
-import java.io.File
import java.util.*
object RunningMode {
@@ -41,13 +40,12 @@
val runningInIDE: Boolean
get() {
- val currentDir = System.getProperty("user.dir")
- val coreDir = File(currentDir, "borgbutler-core")
- val development = coreDir.exists() && File(coreDir, "build.gradle").exists()
- if (development) {
- log.warn("*** Starting BorgButler server in IDE mode. This mode shouldn't be used in production environments. ***")
+ if (webBundled()) {
+ return true
+ } else {
+ log.warn("*** BorgButler seems to run inside an IDE. ***")
+ return false
}
- return development
}
/**
@@ -62,6 +60,19 @@
)
}
+ fun webBundled(): Boolean {
+ var available = false
+ RunningMode::class.java.getResourceAsStream("/web/index.html")?.use {
+ //RunningMode::class.java.getResourceAsStream("/logback-spring.xml")?.use {
+ log.info("Web app found (is bundled).")
+ available = true
+ }
+ if (!available) {
+ log.info("Web app isn't bundled (running in IDE?)")
+ }
+ return available
+ }
+
enum class UserManagement {
SINGLE
}
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
index 16d26d1..f828af1 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
@@ -1,10 +1,13 @@
package de.micromata.borgbutler.server
import mu.KotlinLogging
+import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
+import org.springframework.web.servlet.ViewResolver
import org.springframework.web.servlet.config.annotation.CorsRegistry
import org.springframework.web.servlet.config.annotation.EnableWebMvc
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer
+import org.springframework.web.servlet.view.InternalResourceViewResolver
private val log = KotlinLogging.logger {}
@@ -12,6 +15,18 @@
@Configuration
@EnableWebMvc
open class WebConfig : WebMvcConfigurer {
+ @Bean
+ open fun internalResourceViewResolver(): ViewResolver {
+ val bean = InternalResourceViewResolver()
+ if (RunningMode.webBundled()) {
+ bean.setPrefix("/web/")
+ } else {
+ bean.setPrefix("borgbutler-webapp/build/")
+ }
+ bean.setSuffix(".html")
+ return bean
+ }
+
override fun addCorsMappings(registry: CorsRegistry) {
if (RunningMode.webDevelopment) {
log.warn("*********************************")
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebController.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebController.kt
new file mode 100644
index 0000000..53956e4
--- /dev/null
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebController.kt
@@ -0,0 +1,15 @@
+package de.micromata.borgbutler.server
+
+import mu.KotlinLogging
+import org.springframework.stereotype.Controller
+import org.springframework.web.bind.annotation.RequestMapping
+
+private val log = KotlinLogging.logger {}
+
+@Controller
+open class WebConntroller {
+ @RequestMapping("/")
+ fun index(): String {
+ return "index"
+ }
+}
diff --git a/borgbutler-webapp/build.gradle b/borgbutler-webapp/build.gradle
index 434caf4..5193a4d 100644
--- a/borgbutler-webapp/build.gradle
+++ b/borgbutler-webapp/build.gradle
@@ -2,7 +2,24 @@
task npmBuild(type: Exec) {
workingDir '.'
-
executable 'sh'
commandLine 'npm', 'run', 'build'
-}
\ No newline at end of file
+}
+
+task packageWebApp(type: Zip) {
+ dependsOn npmBuild
+ baseName 'borgbutler-webapp'
+ extension 'jar'
+ destinationDir file("${projectDir}")
+ from('build') {
+ // optional path under which output will be visible in Java classpath, e.g. static resources path
+ into 'webapp'
+ }
+ doLast {
+ //println "**** projectDir=${projectDir}, buildDir=${buildDir}"
+ mkdir "${buildDir}/libs"
+ def jarFile = archiveFileName.get()
+ ant.move file: "${projectDir}/${jarFile}",
+ toDir: "${buildDir}/libs"
+ }
+}
--
Gitblit v1.10.0