Merge "Port plugin to work on Java 7" into stable-2.13
diff --git a/BUCK b/BUCK
index a4c0227..3f8c588 100644
--- a/BUCK
+++ b/BUCK
@@ -8,6 +8,9 @@
     'Implementation-Title: Secure-Config plugin',
     'Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/secure-config',
   ],
+  provided_deps = [
+    '//lib/commons:codec',
+  ],
   deps = [
   ],
 )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/secureconfig/Codec.java b/src/main/java/com/googlesource/gerrit/plugins/secureconfig/Codec.java
index 27868a5..9d17050 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/secureconfig/Codec.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/secureconfig/Codec.java
@@ -14,7 +14,23 @@
 
 package com.googlesource.gerrit.plugins.secureconfig;
 
-public interface Codec {
+import com.google.common.base.Function;
+
+public abstract class Codec {
+
+  public Function<String, String> decodeFun = new Function<String, String>() {
+    @Override
+    public String apply(String input) {
+      return decode(input);
+    }
+  };
+
+  public Function<String, String> encodeFun = new Function<String, String>() {
+    @Override
+    public String apply(String input) {
+      return encode(input);
+    }
+  };
 
   public abstract String encode(String plain);
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/secureconfig/PBECodec.java b/src/main/java/com/googlesource/gerrit/plugins/secureconfig/PBECodec.java
index 9b7c1ba..88af1f5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/secureconfig/PBECodec.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/secureconfig/PBECodec.java
@@ -17,6 +17,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
+import org.apache.commons.codec.binary.Base64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -26,7 +27,6 @@
 import java.security.Provider;
 import java.security.Security;
 import java.security.spec.InvalidKeySpecException;
-import java.util.Base64;
 
 import javax.crypto.Cipher;
 import javax.crypto.NoSuchPaddingException;
@@ -35,7 +35,7 @@
 import javax.crypto.spec.PBEParameterSpec;
 
 @Singleton
-public class PBECodec implements Codec {
+public class PBECodec extends Codec {
   private static final Logger log = LoggerFactory.getLogger(PBECodec.class);
   byte[] salt = new byte[] {0x7d, 0x60, 0x43, 0x5f, 0x02, (byte) 0xe9,
       (byte) 0xe0, (byte) 0xae};
@@ -57,7 +57,7 @@
       Cipher encoder = getCipher();
 
       encoder.init(Cipher.ENCRYPT_MODE, sKey, getCipherParameterSpec());
-      return new String(Base64.getEncoder().encodeToString(
+      return new String(Base64.encodeBase64(
           encoder.doFinal(s.getBytes(config.getEncoding()))));
 
     } catch (Exception e) {
@@ -73,7 +73,7 @@
       Key sKey = generateKey();
 
       encoder.init(Cipher.DECRYPT_MODE, sKey, getCipherParameterSpec());
-      return new String(encoder.doFinal(Base64.getDecoder().decode(s)),
+      return new String(encoder.doFinal(Base64.decodeBase64(s)),
           config.getEncoding());
 
     } catch (Exception e) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/secureconfig/SecureConfigSettings.java b/src/main/java/com/googlesource/gerrit/plugins/secureconfig/SecureConfigSettings.java
index e5f3b3c..407321d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/secureconfig/SecureConfigSettings.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/secureconfig/SecureConfigSettings.java
@@ -18,6 +18,8 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
+import org.apache.commons.codec.binary.Base64;
+
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.storage.file.FileBasedConfig;
@@ -27,7 +29,6 @@
 import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Base64;
 
 @Singleton
 public class SecureConfigSettings {
@@ -84,7 +85,7 @@
           new byte[gerritConfig.getInt(SECURE_CONFIG, PASSWORD_LENGTH,
               DEF_PASSWORD_LENGTH)];
       in.read(passphrase);
-      return new String(Base64.getEncoder().encode(passphrase)).toCharArray();
+      return new String(Base64.encodeBase64(passphrase)).toCharArray();
     }
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/secureconfig/SecureConfigStore.java b/src/main/java/com/googlesource/gerrit/plugins/secureconfig/SecureConfigStore.java
index 9d657d3..d1a5466 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/secureconfig/SecureConfigStore.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/secureconfig/SecureConfigStore.java
@@ -34,7 +34,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 @Singleton
 public class SecureConfigStore extends SecureStore {
@@ -58,9 +57,9 @@
 
   @Override
   public String[] getList(String section, String subsection, String name) {
-    return Arrays.stream(sec.getStringList(section, subsection, name))
-        .map(codec::decode)
-        .toArray(String[]::new);
+    return FluentIterable
+        .from(Arrays.asList(sec.getStringList(section, subsection, name)))
+        .transform(codec.decodeFun).toArray(String.class);
   }
 
   @Override
@@ -82,9 +81,11 @@
         }
       }
     }
+
     return cfg != null ? FluentIterable
-        .from(cfg.getStringList(section, subsection, name))
-        .transform(codec::decode).toArray(String.class) : null;
+        .from(Arrays.asList(cfg.getStringList(section, subsection, name)))
+        .transform(codec.decodeFun)
+        .toArray(String.class) : null;
   }
 
   @Override
@@ -92,9 +93,9 @@
       List<String> values) {
     if (values != null) {
       sec.setStringList(section, subsection, name,
-          values.stream()
-          .map(codec::encode)
-          .collect(Collectors.toList()));
+          FluentIterable.from(values)
+          .transform(codec.encodeFun)
+          .toList());
     } else {
       sec.unset(section, subsection, name);
     }