mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
16.21.2025 2dc84eab00c82de0ddb0ebaabc2d1493a2987f81
New gradle version, new jars, ...
3 files deleted
3 files added
14 files modified
399 ■■■■ changed files
borgbutler-core/build.gradle 42 ●●●●● patch | view | raw | blame | history
borgbutler-core/build.gradle.kts 35 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java 4 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/JCSCache.java 4 ●●●● patch | view | raw | blame | history
borgbutler-server/build.gradle 63 ●●●●● patch | view | raw | blame | history
borgbutler-server/build.gradle.kts 69 ●●●●● patch | view | raw | blame | history
borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java 32 ●●●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt 2 ●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/FilesystemBrowserRest.kt 2 ●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/GlobalDefaultExceptionHandling.kt 2 ●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/I18nRest.kt 2 ●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/JacksonConfig.kt 2 ●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/LoggingRest.kt 2 ●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RequestLog.kt 6 ●●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RestUtils.kt 4 ●●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/VersionRest.kt 2 ●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/user/UserFilter.kt 2 ●●● patch | view | raw | blame | history
build.gradle 79 ●●●●● patch | view | raw | blame | history
build.gradle.kts 43 ●●●●● patch | view | raw | blame | history
gradle/wrapper/gradle-wrapper.properties 2 ●●● patch | view | raw | blame | history
borgbutler-core/build.gradle
File was deleted
borgbutler-core/build.gradle.kts
New file
@@ -0,0 +1,35 @@
plugins {
    java
}
description = "borgbutler-core"
repositories {
    mavenCentral()
}
dependencies {
    implementation("commons-io:commons-io:2.18.0")
    implementation("org.apache.commons:commons-lang3:3.17.0")
    implementation("org.apache.commons:commons-exec:1.4.0")
    implementation("org.apache.commons:commons-collections4:4.4")
    implementation("org.apache.commons:commons-compress:1.27.1")
    implementation("org.apache.commons:commons-jcs3-core:3.2.1")
    implementation("com.esotericsoftware:kryo:5.1.0")
    implementation("io.github.microutils:kotlin-logging-jvm:3.0.5")
    implementation("com.fasterxml.jackson.core:jackson-databind:2.18.2")
    implementation("com.fasterxml.jackson.core:jackson-annotations:2.18.2")
    implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.2")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}
sourceSets {
    main {
        java.srcDirs("src/main/java", "src/main/kotlin")
    }
}
tasks.test {
    minHeapSize = "128m"
    maxHeapSize = "1500m"
}
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -11,8 +11,8 @@
import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.jcs.JCS;
import org.apache.commons.jcs.access.CacheAccess;
import org.apache.commons.jcs3.JCS;
import org.apache.commons.jcs3.access.CacheAccess;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/JCSCache.java
@@ -1,8 +1,8 @@
package de.micromata.borgbutler.cache;
import de.micromata.borgbutler.config.ConfigurationHandler;
import org.apache.commons.jcs.JCS;
import org.apache.commons.jcs.access.CacheAccess;
import org.apache.commons.jcs3.JCS;
import org.apache.commons.jcs3.access.CacheAccess;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
borgbutler-server/build.gradle
File was deleted
borgbutler-server/build.gradle.kts
New file
@@ -0,0 +1,69 @@
import org.gradle.api.tasks.bundling.Zip
import java.util.Properties
plugins {
    java
    application
    distribution
    id("org.springframework.boot") version "3.4.2" // Füge das Spring Boot Plugin hinzu
    id("io.spring.dependency-management") version "1.1.4" // Dependency Management Plugin für Spring Boot
}
description = "borgbutler-server"
repositories {
    mavenCentral()
}
dependencies {
    implementation(project(":borgbutler-core"))
    implementation(project(":borgbutler-webapp"))
    implementation("org.apache.commons:commons-text:1.13.0")
    implementation("org.apache.commons:commons-collections4:4.4")
    implementation("org.apache.commons:commons-compress:1.27.1")
    implementation("commons-io:commons-io:2.18.0")
    implementation("org.springframework:spring-core:6.2.3")
    implementation("org.springframework.boot:spring-boot-starter-web:3.4.2")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.18.2")
    implementation("io.github.microutils:kotlin-logging-jvm:2.0.6")
    implementation("org.apache.httpcomponents.client5:httpclient5:5.4.2")
    implementation("commons-cli:commons-cli:1.9.0")
    testImplementation("org.mockito:mockito-core:5.15.2")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}
sourceSets {
    main {
        java.srcDirs("src/main/java", "src/main/kotlin")
    }
}
application {
    mainClass.set("de.micromata.borgbutler.server.BorgButlerApplication")
}
tasks.register("createVersionProperties") {
    dependsOn(tasks.processResources)
    doLast {
        val versionFile = file("$buildDir/resources/main/version.properties")
        val properties = Properties().apply {
            setProperty("version", project.version.toString())
            setProperty("name", project.name)
            setProperty("build.date.millis", System.currentTimeMillis().toString())
        }
        versionFile.writer().use { properties.store(it, null) }
    }
}
tasks.classes {
    dependsOn(tasks.named("createVersionProperties"))
}
tasks.named("distZip", Zip::class) {
    dependsOn(":borgbutler-webapp:packageWebApp")
}
tasks.register("dist") {
    dependsOn(tasks.named("distZip"))
}
borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
@@ -5,18 +5,19 @@
import de.micromata.borgbutler.config.ConfigurationHandler;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.cookie.StandardCookieSpec;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class BorgInstallation {
    private Logger log = LoggerFactory.getLogger(BorgInstallation.class);
@@ -173,17 +174,22 @@
        log.info("Trying to download borg binary '" + binary[0] + "' (" + binary[1] + ") from url: " + url + "...");
        HttpClientBuilder builder = HttpClients.custom()
                .setDefaultRequestConfig(RequestConfig.custom()
                        .setCookieSpec(CookieSpecs.STANDARD).build());
                        .setCookieSpec(StandardCookieSpec.STRICT).build());
        try (CloseableHttpClient httpClient = builder.build()) {
            HttpGet getRequest = new HttpGet(url);
            try (ClassicHttpResponse response = (ClassicHttpResponse) httpClient.execute(getRequest);
                 InputStream inputStream = response.getEntity().getContent()) {
            HttpResponse response = httpClient.execute(getRequest);
                int statusCode = response.getCode();
            if (response.getStatusLine().getStatusCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + response.getStatusLine().getStatusCode());
                if (statusCode != 200) {
                    throw new RuntimeException("Failed : HTTP error code : " + statusCode);
                }
                FileUtils.copyInputStreamToFile(inputStream, file);
            }
            FileUtils.copyInputStreamToFile(response.getEntity().getContent(), file);
            log.info("Downloaded: " + file.getAbsolutePath());
            file.setExecutable(true, false);
            return file;
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
@@ -22,7 +22,7 @@
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.*
import javax.annotation.PreDestroy
import jakarta.annotation.PreDestroy
private val log = KotlinLogging.logger {}
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/FilesystemBrowserRest.kt
@@ -11,7 +11,7 @@
import java.awt.Color
import java.awt.FileDialog
import java.io.File
import javax.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletRequest
import javax.swing.JFileChooser
import javax.swing.JFrame
import javax.swing.JLabel
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/GlobalDefaultExceptionHandling.kt
@@ -30,7 +30,7 @@
import org.springframework.web.bind.annotation.ControllerAdvice
import org.springframework.web.bind.annotation.ExceptionHandler
import org.springframework.web.bind.annotation.ResponseStatus
import javax.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletRequest
private val log = KotlinLogging.logger {}
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/I18nRest.kt
@@ -8,7 +8,7 @@
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
import java.util.*
import javax.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletRequest
@RestController
@RequestMapping("/rest/i18n")
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/JacksonConfig.kt
@@ -22,7 +22,7 @@
            return it
        }
        val mapper = ObjectMapper()
        mapper.registerModule(KotlinModule())
        mapper.registerModule((KotlinModule.Builder().build()))
        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true)
        mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false)
        val failOnUnknownJsonProperties = RunningMode.runningInIDE
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/LoggingRest.kt
@@ -9,7 +9,7 @@
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
import javax.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletRequest
private val log = KotlinLogging.logger {}
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RequestLog.kt
@@ -26,9 +26,9 @@
import de.micromata.borgbutler.json.JsonUtils
import java.security.Principal
import java.util.*
import javax.servlet.http.Cookie
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.Part
import jakarta.servlet.http.Cookie
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.Part
/**
 * Helper class for debugging requests. Converts a given request to json.
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/RestUtils.kt
@@ -14,8 +14,8 @@
import java.net.InetAddress
import java.net.UnknownHostException
import java.util.*
import javax.servlet.ServletRequest
import javax.servlet.http.HttpServletRequest
import jakarta.servlet.ServletRequest
import jakarta.servlet.http.HttpServletRequest
object RestUtils {
    /**
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/rest/VersionRest.kt
@@ -8,7 +8,7 @@
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.util.*
import javax.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletRequest
@RestController
@RequestMapping("/rest")
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/user/UserFilter.kt
@@ -4,7 +4,7 @@
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
import java.io.IOException
import javax.servlet.*
import jakarta.servlet.*
/**
 * Ensuring the user data inside request threads. For now, it's only a simple implementation (no login required).
build.gradle
File was deleted
build.gradle.kts
New file
@@ -0,0 +1,43 @@
import org.gradle.api.JavaVersion
import org.gradle.api.tasks.testing.Test
import org.gradle.jvm.toolchain.JavaLanguageVersion
plugins {
    kotlin("jvm") version "1.8.22" apply false
}
allprojects {
    group = "de.micromata.borgbutler"
    version = "0.8"
}
subprojects {
    apply(plugin = "java")
    apply(plugin = "org.jetbrains.kotlin.jvm")
    tasks.withType<JavaCompile> {
        options.compilerArgs.add("-Xlint:unchecked")
        options.isDeprecation = true
        options.encoding = "UTF-8"
    }
    repositories {
        mavenCentral()
        maven("https://maven.ej-technologies.com/repository")
    }
    dependencies {
        add("testImplementation", "org.junit.jupiter:junit-jupiter-api:5.11.4")
        add("testRuntimeOnly", "org.junit.jupiter:junit-jupiter-engine:5.11.4")
        add("testRuntimeOnly", "org.junit.vintage:junit-vintage-engine:5.11.4")
    }
    tasks.named<Test>("test") {
        useJUnitPlatform()
    }
}
// Gradle Wrapper Task für Version 8.0
tasks.named<Wrapper>("wrapper") {
    gradleVersion = "8.0"
}
gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists