From dbc0a8433134a341f6a359234e62b744f1a9555c Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 17 Apr 2021 12:09:49 +0000
Subject: [PATCH] WIP
---
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/ServerConfiguration.kt | 17 ---
/dev/null | 87 ---------------------
borgbutler-server/src/main/java/de/micromata/borgbutler/server/Version.java | 2
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt | 22 ++--
borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java | 5
borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt | 22 +++--
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RestUtils.kt | 2
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/FilesystemBrowserRest.kt | 2
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/RunningMode.kt | 72 ++++++++++++++++++
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt | 3
10 files changed, 103 insertions(+), 131 deletions(-)
diff --git a/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt b/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt
index d4f9444..2fdc9f1 100644
--- a/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt
+++ b/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt
@@ -1,7 +1,5 @@
package de.micromata.borgbutler.config
-import de.micromata.borgbutler.config.Definitions
-import de.micromata.borgbutler.json.JsonUtils
import mu.KotlinLogging
import org.apache.commons.io.FileUtils
import java.io.File
@@ -23,14 +21,8 @@
private var configuration: Configuration? = null
private fun read() {
- if (configFile.canRead()) {
- log.info("Reading config file '" + configFile.absolutePath + "'")
- val jsonConfigFile = File(workingDir, CONFIG_FILENAME)
- if (jsonConfigFile.canRead()) {
- val yaml = FileUtils.readFileToString(jsonConfigFile, Definitions.STD_CHARSET)
- configuration = YamlUtils.fromYaml(configClazz, yaml)
- }
- } else {
+ configuration = readJsonConfigfile(workingDir)
+ if (configuration == null) {
Legacy.readOldJsonConfigFile(workingDir, OLD_JSON_CONFIG_FILENAME)?.let {
configuration = it
save()
@@ -120,6 +112,16 @@
fun getConfigClazz(): Class<out Configuration> {
return configClazz
}
+
+ fun readJsonConfigfile(workingDir: File): Configuration? {
+ val configFile = File(workingDir, CONFIG_FILENAME)
+ if (!configFile.canRead()) {
+ return null
+ }
+ log.info("Reading config file '" + configFile.absolutePath + "'")
+ val yaml = FileUtils.readFileToString(configFile, Definitions.STD_CHARSET)
+ return YamlUtils.fromYaml(configClazz, yaml)
+ }
}
init {
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
index 2f288ff..de65328 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
@@ -37,10 +37,9 @@
}
borgVersion.setBinariesDownloadVersion(configuration.getBorgVersion());
initialize(getBinary(RunningMode.getOSType()));
- if (version(configuration)) {
- return;
+ if (!borgVersion.isVersionOK()) {
+ log.warn("No working borg version found. Please configure a borg version with minimal version '" + borgVersion.getMinimumRequiredBorgVersion() + "'.");
}
- log.warn("No working borg version found. Please configure a borg version with minimal version '" + borgVersion.getMinimumRequiredBorgVersion() + "'.");
}
/**
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/RunningMode.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/RunningMode.java
deleted file mode 100644
index 3da4739..0000000
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/RunningMode.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package de.micromata.borgbutler.server;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.util.TimeZone;
-
-public class RunningMode {
- private static Logger log = LoggerFactory.getLogger(RunningMode.class);
- private static OSType osType;
-
- public enum Mode {PRODUCTION, DEVELOPMENT}
-
- public enum ServerType {DESKTOP, SERVER}
-
- public enum UserManagement {SINGLE}
-
- public enum OSType {MAC_OS, WINDOWS, LINUX, FREEBSD, OTHER}
-
- private static boolean running;
- private static File baseDir;
- private static Boolean development;
- private static ServerType serverType;
- private static UserManagement userManagement = UserManagement.SINGLE;
-
- public static Mode getMode() {
- return isDevelopmentMode() ? Mode.DEVELOPMENT : Mode.PRODUCTION;
- }
-
- public static boolean isDevelopmentMode() {
- if (development == null) {
- development = new File(ServerConfiguration.getApplicationHome(), "borgbutler-core").exists();
- if (development) {
- log.warn("*** Starting BorgButler server in development mode. This mode shouldn't be used in production environments. ***");
- }
- }
- return development;
- }
-
- public static OSType getOSType() {
- if (osType == null) {
- String osTypeString = System.getProperty("os.name");
- if (osTypeString == null) {
- osType = OSType.OTHER;
- } else if (osTypeString.toLowerCase().contains("mac")) {
- osType = OSType.MAC_OS;
- } else if (osTypeString.toLowerCase().contains("win")) {
- osType = OSType.WINDOWS;
- } else if (osTypeString.toLowerCase().contains("linux")) {
- osType = OSType.LINUX;
- } else if (osTypeString.toLowerCase().contains("freebsd")) {
- osType = OSType.FREEBSD;
- } else {
- osType = OSType.OTHER;
- }
- }
- return osType;
- }
-
- public static ServerType getServerType() {
- return serverType;
- }
-
- public static void setServerType(ServerType serverType) {
- if (RunningMode.serverType != null && serverType != RunningMode.serverType) {
- throw new IllegalArgumentException("Can't set server-type twice with different values: new='"
- + serverType + "', old='" + RunningMode.serverType + "'.");
- }
- RunningMode.serverType = serverType;
- }
-
- public static UserManagement getUserManagement() {
- return userManagement;
- }
-
- /**
- * After setting all values you should call this method for a logging output with all current settings.
- */
- public static void logMode() {
- log.info("Starting " + Version.getInstance().getAppName() + " " + Version.getInstance().getVersion()
- + " (" + Version.getInstance().formatBuildDateISO(TimeZone.getDefault())
- + ") with: mode='" + RunningMode.getMode() + "', serverType='" + RunningMode.serverType
- + "', home dir='" + ServerConfiguration.getApplicationHome() + "', javaVersion='"
- + System.getProperty("java.version") + "'.");
- }
-}
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Version.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Version.java
index 7afb727..ebbd2fa 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Version.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Version.java
@@ -31,7 +31,7 @@
}
try (InputStream inputStream = ClassLoader.getSystemResourceAsStream("version.properties")) {
if (inputStream == null) {
- log.warn("version.properties not found (OK, if started e. g. in IDE");
+ log.warn("version.properties not found (OK, if started e. g. in IDE).");
version = "99.0";
appName = "BorgButler";
buildDate = new Date();
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 e90f96c..983d9e3 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
@@ -1,6 +1,7 @@
package de.micromata.borgbutler.server
import de.micromata.borgbutler.cache.ButlerCache
+import de.micromata.borgbutler.config.ConfigurationHandler
import de.micromata.borgbutler.config.ConfigurationHandler.Companion.init
import de.micromata.borgbutler.config.ConfigurationHandler.Companion.setConfigClazz
import de.micromata.borgbutler.server.user.SingleUserManager
@@ -42,13 +43,19 @@
borgButlerHome = File(System.getProperty("user.home"), ".borgbutler").absolutePath
System.setProperty("BorgButlerHome", borgButlerHome)
}
+ // 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
if (System.getProperty("LOG_PATH").isNullOrBlank()) {
+ // Needed by logback-spring.xml
System.setProperty("LOG_PATH", borgButlerHome)
}
+ SpringApplication.run(BorgButlerApplication::class.java, *args)
+
if (borgButlerHome != null) {
init(borgButlerHome)
}
- SpringApplication.run(BorgButlerApplication::class.java, *args)
// create Options object
val options = Options()
options.addOption(
@@ -89,11 +96,6 @@
return
}
}
- if (Desktop.isDesktopSupported()) {
- RunningMode.setServerType(RunningMode.ServerType.DESKTOP)
- } else {
- RunningMode.setServerType(RunningMode.ServerType.SERVER)
- }
RunningMode.logMode()
UserManager.setUserManager(SingleUserManager())
@@ -104,9 +106,7 @@
val url = "http://$serverAddress:$serverPort/".replace("0.0.0.0", "127.0.0.1")
val uri = URI.create(url)
val quietMode = line.hasOption('q')
- val desktopSupportsBrowse = Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)
- val headlessMode = System.getProperty("java.awt.headless") == "true"
- if (!quietMode && desktopSupportsBrowse && headlessMode) {
+ if (!quietMode && RunningMode.desktopSupportsBrowse && RunningMode.headlessMode) {
try {
log.info { "Trying to open your local web browser: $uri" }
Desktop.getDesktop().browse(uri)
@@ -117,9 +117,9 @@
} else {
if (quietMode) {
log.info("Server started in quiet mode (option -q). Please open your browser manually: $uri")
- } else if (!desktopSupportsBrowse) {
+ } else if (!RunningMode.desktopSupportsBrowse) {
log.info("Desktop not available. Please open your browser manually: $uri")
- } else if (headlessMode) {
+ } else if (RunningMode.headlessMode) {
log.info("Desktop not available in headless mode. Please open your browser manually: $uri")
}
}
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
new file mode 100644
index 0000000..98a7b0c
--- /dev/null
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/RunningMode.kt
@@ -0,0 +1,72 @@
+package de.micromata.borgbutler.server
+
+import org.slf4j.LoggerFactory
+import java.awt.Desktop
+import java.io.File
+import java.util.*
+
+object RunningMode {
+ private val log = LoggerFactory.getLogger(RunningMode::class.java)
+ private var osType: OSType? = null
+ var webDevelopment: Boolean = false
+ internal set
+ val headlessMode: Boolean = System.getProperty("java.awt.headless") == "true"
+ val desktopSupported = Desktop.isDesktopSupported()
+ val desktopSupportsBrowse = desktopSupported && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)
+
+ @JvmStatic
+ val userManagement = UserManagement.SINGLE
+
+ @JvmStatic
+ val oSType: OSType?
+ get() {
+ if (osType == null) {
+ val osTypeString = System.getProperty("os.name")
+ osType = if (osTypeString == null) {
+ OSType.OTHER
+ } else if (osTypeString.toLowerCase().contains("mac")) {
+ OSType.MAC_OS
+ } else if (osTypeString.toLowerCase().contains("win")) {
+ OSType.WINDOWS
+ } else if (osTypeString.toLowerCase().contains("linux")) {
+ OSType.LINUX
+ } else if (osTypeString.toLowerCase().contains("freebsd")) {
+ OSType.FREEBSD
+ } else {
+ OSType.OTHER
+ }
+ }
+ return osType
+ }
+
+ 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. ***")
+ }
+ return development
+ }
+
+ /**
+ * After setting all values you should call this method for a logging output with all current settings.
+ */
+ fun logMode() {
+ log.info(
+ "Starting ${Version.getInstance().appName} ${Version.getInstance().version} ("
+ + Version.getInstance().formatBuildDateISO(TimeZone.getDefault())
+ + ") with: webDevelopment=$webDevelopment, desktopSupported=$desktopSupported, javaVersion='"
+ + System.getProperty("java.version") + "'."
+ )
+ }
+
+ enum class UserManagement {
+ SINGLE
+ }
+
+ enum class OSType {
+ MAC_OS, WINDOWS, LINUX, FREEBSD, OTHER
+ }
+}
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/ServerConfiguration.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/ServerConfiguration.kt
index cbfcc81..d4419d9 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/ServerConfiguration.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/ServerConfiguration.kt
@@ -16,31 +16,18 @@
/**
* If true, CrossOriginFilter will be set.
*/
- var isWebDevelopmentMode = WEB_DEVELOPMENT_MODE_PREF_DEFAULT
+ var webDevelopmentMode = WEB_DEVELOPMENT_MODE_PREF_DEFAULT
fun copyFrom(other: ServerConfiguration) {
super.copyFrom(other)
port = other.port
- isWebDevelopmentMode = other.isWebDevelopmentMode
+ webDevelopmentMode = other.webDevelopmentMode
}
companion object {
val supportedLanguages = arrayOf("en", "de")
const val WEBSERVER_PORT_DEFAULT = 9042
private const val WEB_DEVELOPMENT_MODE_PREF_DEFAULT = false
- @JvmStatic
- var applicationHome: String? = null
- get() {
- if (field == null) {
- field = System.getProperty("applicationHome")
- if (StringUtils.isBlank(field)) {
- field = System.getProperty("user.dir")
- log.info("applicationHome is not given as JVM parameter. Using current working dir (OK for start in IDE): $field")
- }
- }
- return field
- }
- private set
@JvmStatic
fun get(): ServerConfiguration {
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 9b8b4f1..16d26d1 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,7 +1,6 @@
package de.micromata.borgbutler.server
import mu.KotlinLogging
-import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.annotation.Configuration
import org.springframework.web.servlet.config.annotation.CorsRegistry
import org.springframework.web.servlet.config.annotation.EnableWebMvc
@@ -14,7 +13,7 @@
@EnableWebMvc
open class WebConfig : WebMvcConfigurer {
override fun addCorsMappings(registry: CorsRegistry) {
- if (RunningMode.isDevelopmentMode() || ServerConfiguration.get().isWebDevelopmentMode) {
+ if (RunningMode.webDevelopment) {
log.warn("*********************************")
log.warn("*********** **********")
log.warn("*********** ATTENTION! **********")
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/FilesystemBrowserRest.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/FilesystemBrowserRest.kt
index afa4896..8dc708c 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/FilesystemBrowserRest.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/FilesystemBrowserRest.kt
@@ -58,7 +58,7 @@
val label = JLabel("Click for choosing directory...", SwingConstants.CENTER)
fr.add(label)
}
- if (RunningMode.getOSType() == RunningMode.OSType.MAC_OS) {
+ if (RunningMode.oSType == RunningMode.OSType.MAC_OS) {
// The JFileChooser will hang after several calls, use AWT file dialog instead for Mac OS:
System.setProperty("apple.awt.fileDialogForDirectories", "true")
frame?.let {
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RestUtils.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RestUtils.kt
index 9586f7d..26ff078 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RestUtils.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RestUtils.kt
@@ -23,7 +23,7 @@
* service isn't available.
*/
fun checkLocalDesktopAvailable(requestContext: HttpServletRequest): String? {
- if (RunningMode.getServerType() != RunningMode.ServerType.DESKTOP) {
+ if (!RunningMode.desktopSupported) {
return "Service unavailable. No desktop app on localhost available."
}
val remoteAddr = requestContext.remoteAddr
--
Gitblit v1.10.0