From 7325f6c31e1f7f6bd94a9e01e916de2c355bcae1 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 07 Jan 2019 00:29:19 +0000
Subject: [PATCH] Environment variables are now built by BorgRepoConfig itself.

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java |   13 ++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java       |   43 ++++++++++++++++++---
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java                     |   15 ++++---
 3 files changed, 56 insertions(+), 15 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
index c21034d..38d496a 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
@@ -93,14 +93,11 @@
             return null;
         }
         Map<String, String> env = EnvironmentUtils.getProcEnvironment();
-        addEnvironmentVariable(env, "BORG_REPO", repoConfig.getRepo());
-        addEnvironmentVariable(env, "BORG_RSH", repoConfig.getRsh());
-        addEnvironmentVariable(env, "BORG_PASSPHRASE", repoConfig.getPassphrase());
-        String passcommand = repoConfig.getPasswordCommand();
-        if (StringUtils.isNotBlank(passcommand)) {
+        String[] variables = repoConfig.getEnvironmentVariables(true);
+        for (String variable : variables) {
             // For MacOS BORG_PASSCOMMAND="security find-generic-password -a $USER -s borg-passphrase -w"
-            passcommand = passcommand.replace("$USER", System.getProperty("user.name"));
-            addEnvironmentVariable(env, "BORG_PASSCOMMAND", passcommand);
+            String environmentVariable = variable.replace("$USER", System.getProperty("user.name"));
+            addEnvironmentVariable(env, environmentVariable);
         }
         return env;
     }
@@ -108,6 +105,10 @@
     @Override
     public BorgJob<?> clone() {
         BorgJob<?> clone = new BorgJob<>();
+        if (command != null) {
+            // Needed for getting environment variables: JsonJob of borgbutler-server.
+            clone.command = new BorgCommand().setRepoConfig(command.getRepoConfig());
+        }
         clone.setUniqueJobNumber(getUniqueJobNumber());
         clone.setTitle(getTitle());
         clone.setExecuteStarted(isExecuteStarted());
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
index 6000d6b..0ffeecd 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
@@ -1,25 +1,54 @@
 package de.micromata.borgbutler.config;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
 
 public class BorgRepoConfig {
     /**
      * A name describing this config. Only used for displaying purposes.
      */
-    @Getter @Setter
+    @Getter
+    @Setter
     private String displayName;
-    @Getter @Setter
+    @Getter
+    @Setter
     private String repo;
-    @Getter @Setter
+    @Getter
+    @Setter
     private String rsh;
-    @Getter @Setter
+    @Getter
+    @Setter
     private String passphrase;
-    @Getter @Setter
+    @Getter
+    @Setter
     private String passwordCommand;
-    @Getter @Setter
+    @Getter
+    @Setter
     @JsonIgnore
     private String id;
+
+    public String[] getEnvironmentVariables() {
+        return getEnvironmentVariables(false);
+    }
+
+    public String[] getEnvironmentVariables(boolean showPassphrase) {
+        List<String> variables = new ArrayList<>();
+        addVariable(variables, "BORG_REPO", repo);
+        addVariable(variables, "BORG_RSH", rsh);
+        if (StringUtils.isNotBlank(passphrase)) {
+            addVariable(variables, "BORG_PASSPHRASE", showPassphrase ? passphrase : "******");
+        }
+        addVariable(variables, "BORG_PASSCOMMAND", passwordCommand);
+        return variables.toArray(new String[variables.size()]);
+    }
+
+    private void addVariable(List<String> list, String variable, String value) {
+        if (StringUtils.isBlank(value)) return;
+        list.add(variable + "=" + value);
+    }
 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
index d551e57..bccf7ea 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
@@ -141,11 +141,22 @@
     }
 
     /**
+     *
+     * @param env
+     * @param variable Variable in format "variable=value".
+     */
+    protected void addEnvironmentVariable(Map<String, String> env, String variable) {
+        if (StringUtils.isNotBlank(variable)) {
+            EnvironmentUtils.addVariableToEnvironment(env, variable);
+        }
+    }
+
+    /**
      * Frees the output streams.
      * Should be called after a job was done, failed or cancelled while running.
      */
     public void cleanUp() {
-        log.info("Freeing resources of job: " + commandLineAsString);
+        log.debug("Freeing resources of job: " + commandLineAsString);
         outputStream = null;
         errorOutputStream = null;
     }

--
Gitblit v1.10.0