From fd977dfd39e74eb2bb436b8d7eff26c323e0d393 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 08 Dec 2018 00:55:51 +0000
Subject: [PATCH] ...

---
 .gitignore                                                                             |    1 
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java        |    6 ++-
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java                |   59 +++++++++++++++++++++++++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java       |    4 +-
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java |    4 -
 borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java                        |   11 +++++
 borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java            |   26 +++++++++++++
 7 files changed, 103 insertions(+), 8 deletions(-)

diff --git a/.gitignore b/.gitignore
index a9543ac..3fc88b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,3 +36,4 @@
 *.iml
 *.iws
 borgbutler-core/build
+borgbutler-core/out
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
new file mode 100644
index 0000000..490c8c5
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -0,0 +1,59 @@
+package de.micromata.borgbutler;
+
+import de.micromata.borgbutler.config.BorgRepoConfig;
+import de.micromata.borgbutler.config.Configuration;
+import de.micromata.borgbutler.config.ConfigurationHandler;
+import org.apache.commons.exec.*;
+import org.apache.commons.exec.environment.EnvironmentUtils;
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+public class BorgCommands {
+    private static Logger log = LoggerFactory.getLogger(BorgCommands.class);
+
+    public static String info(BorgRepoConfig repoConfig) {
+        try {
+            //CommandLine cmdLine = new CommandLine("/Users/kai/bin/test.sh");
+            //CommandLine cmdLine = new CommandLine("/Users/kai/bin/borgbackup-hetzner.sh");
+            CommandLine cmdLine = new CommandLine(ConfigurationHandler.getConfiguration().getBorgCommand());
+            cmdLine.addArgument("info");
+            cmdLine.addArgument(repoConfig.getRepo());
+            DefaultExecutor executor = new DefaultExecutor();
+            //executor.setExitValue(1);
+            //ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
+            //executor.setWatchdog(watchdog);
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            //ExecuteResultHandler handler = new DefaultExecuteResultHandler();
+            PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
+            executor.setStreamHandler(streamHandler);
+            log.info("Executing '" + cmdLine.getExecutable() + " " + StringUtils.join(cmdLine.getArguments(), " ") + "'...");
+            executor.execute(cmdLine, getEnvironment(repoConfig));
+            return (outputStream.toString(Charset.forName("UTF-8")));
+        } catch (IOException ex) {
+            log.error("Error while executing borg command: " + ex.getMessage(), ex);
+            return null;
+        }
+    }
+
+    public static Map<String, String> getEnvironment(BorgRepoConfig repoConfig) throws IOException {
+        Configuration config = ConfigurationHandler.getConfiguration();
+        Map<String, String> env = EnvironmentUtils.getProcEnvironment();
+        addEnvironmentVariable(env, "BORG_REPO", repoConfig.getRepo());
+        addEnvironmentVariable(env, "BORG_RSH", repoConfig.getRsh());
+        addEnvironmentVariable(env, "BORG_PASSPHRASE", repoConfig.getPassphrase());
+        addEnvironmentVariable(env, "BORG_PASSCOMMAND", repoConfig.getPasswordCommand());
+        return env;
+    }
+
+    private static void addEnvironmentVariable(Map<String, String> env, String name, String value) {
+        if (StringUtils.isNotBlank(value)) {
+            EnvironmentUtils.addVariableToEnvironment(env, name + "=" + value);
+        }
+    }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
index 6bc7160..32314c8 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
@@ -1,7 +1,16 @@
 package de.micromata.borgbutler;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 public class Main {
+    private static Logger log = LoggerFactory.getLogger(Main.class);
+
     public static void main(String[] args) {
-        System.out.println("Hello world.");
+        new Main().start(args);
+    }
+
+    private void start(String[] args) {
+        log.info("Hello Borgbutler...");
     }
 }
\ No newline at end of file
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
similarity index 82%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
index 3661662..b5ffc87 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
@@ -3,7 +3,7 @@
 import lombok.Getter;
 import lombok.Setter;
 
-public class BorgRepo {
+public class BorgRepoConfig {
     @Getter @Setter
     private String name;
     @Getter @Setter
@@ -11,7 +11,7 @@
     @Getter @Setter
     private String rsh;
     @Getter @Setter
-    private String password;
+    private String passphrase;
     @Getter @Setter
     private String passwordCommand;
 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
index 1e9b71d..449f910 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
@@ -7,9 +7,11 @@
 
 public class Configuration {
     @Getter
-    private List<BorgRepo> repos = new ArrayList<>();
+    private String borgCommand = "borg";
+    @Getter
+    private List<BorgRepoConfig> repos = new ArrayList<>();
 
-    public void add(BorgRepo repo) {
+    public void add(BorgRepoConfig repo) {
         repos.add(repo);
     }
 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
index 033e272..9f13c00 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
@@ -1,7 +1,6 @@
 package de.micromata.borgbutler.config;
 
 import de.micromata.borgbutler.json.JsonUtils;
-import lombok.AccessLevel;
 import lombok.Getter;
 import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
@@ -16,9 +15,8 @@
     private static ConfigurationHandler instance = new ConfigurationHandler();
     private static final String CONFIG_FILENAME = ".borgbutler.json";
     private static final String CONFIG_BACKUP_FILENAME = ".borgbutler-bak.json";
-    @Getter(AccessLevel.PACKAGE)
+    @Getter
     private File configFile;
-    @Getter(AccessLevel.PACKAGE)
     private File backupConfigFile;
     private Configuration configuration = new Configuration();
 
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java
new file mode 100644
index 0000000..fc25d15
--- /dev/null
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java
@@ -0,0 +1,26 @@
+package de.micromata.borgbutler;
+
+import de.micromata.borgbutler.config.BorgRepoConfig;
+import de.micromata.borgbutler.config.Configuration;
+import de.micromata.borgbutler.config.ConfigurationHandler;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BorgCommandsTest {
+    private static Logger log = LoggerFactory.getLogger(BorgCommandsTest.class);
+    @Test
+    void infoTest() {
+        ConfigurationHandler configHandler = ConfigurationHandler.getInstance();
+        configHandler.read();
+        Configuration config = ConfigurationHandler.getConfiguration();
+        if (config.getRepos().size() == 0) {
+            log.info("No repos configured. Please configure repos first in: " + configHandler.getConfigFile().getAbsolutePath());
+            return;
+        }
+        for (BorgRepoConfig repo : config.getRepos()) {
+            log.info("Processing repo '" + repo + "'");
+            log.info(BorgCommands.info(repo));
+        }
+    }
+}

--
Gitblit v1.10.0