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 { borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
@@ -37,11 +37,10 @@ } 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() + "'."); } } /** * Configures a new borg configuration if modifications was done. borgbutler-server/src/main/java/de/micromata/borgbutler/server/RunningMode.java
File was deleted 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(); 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") } } borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/RunningMode.kt
New file @@ -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 } } 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 { 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! **********") 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 { 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