JVM-wide proxy settings for GitHub API http calls

When using Gerrit behind a proxy, the http.proxyUrl setting defines 
the proxy details. However the GitHub API do not use that setting
and instead rely on the JVM-wide system properties.

We do need to get the Gerrit settings and set them at JVM level
in order for the GitHub API to work properly.

Change-Id: Ifd5bc8c4614e32cfaed43665fb5bdcff92085ac6
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
index 43d778a..12f02e4 100644
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
+++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
@@ -18,6 +18,7 @@
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
+import com.google.gerrit.httpd.ProxyProperties;
 import com.google.gerrit.reviewdb.client.AuthType;
 import com.google.gerrit.server.config.AuthConfig;
 import com.google.gerrit.server.config.CanonicalWebUrl;
@@ -28,6 +29,7 @@
 
 import org.eclipse.jgit.lib.Config;
 
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -65,7 +67,9 @@
   @Inject
   protected
   GitHubOAuthConfig(@GerritServerConfig Config config,
-      @CanonicalWebUrl String canonicalWebUrl, AuthConfig authConfig) {
+      @CanonicalWebUrl String canonicalWebUrl, 
+      AuthConfig authConfig,
+      ProxyProperties proxyProperties) {
     httpHeader =
         Preconditions.checkNotNull(
             config.getString("auth", null, "httpHeader"),
@@ -103,6 +107,21 @@
         config.getInt(CONF_SECTION, "fileUpdateMaxRetryCount", 3);
     fileUpdateMaxRetryIntervalMsec =
         config.getInt(CONF_SECTION, "fileUpdateMaxRetryIntervalMsec", 3000);
+
+    URL proxyUrl = proxyProperties.getProxyUrl();
+    if (proxyUrl != null) {
+      setProxyProperty("proxyHost", proxyUrl.getHost());
+      setProxyProperty("proxyPort", "" + proxyUrl.getPort());
+      setProxyProperty("proxyUser", proxyProperties.getUsername());
+      setProxyProperty("proxyPassword", proxyProperties.getPassword());
+    }
+  }
+
+  private static void setProxyProperty(String property, String value) {
+    if (value != null) {
+      System.setProperty("http." + property, value);
+      System.setProperty("https." + property, value);
+    }
   }
 
   private Map<String, List<Scope>> getScopes(Config config) {
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubConfig.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubConfig.java
index 249a61e..51e63a7 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubConfig.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubConfig.java
@@ -15,6 +15,7 @@
 
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.Maps;
+import com.google.gerrit.httpd.ProxyProperties;
 import com.google.gerrit.server.config.AllProjectsNameProvider;
 import com.google.gerrit.server.config.AuthConfig;
 import com.google.gerrit.server.config.CanonicalWebUrl;
@@ -78,9 +79,10 @@
       final SitePaths site, 
       AllProjectsNameProvider allProjectsNameProvider,
       @CanonicalWebUrl String canonicalWebUrl, 
-      AuthConfig authConfig)
+      AuthConfig authConfig,
+      ProxyProperties proxyProperties)
       throws MalformedURLException {
-    super(config, canonicalWebUrl, authConfig);
+    super(config, canonicalWebUrl, authConfig, proxyProperties);
     String[] wizardFlows =
         config.getStringList(CONF_SECTION, null, CONF_WIZARD_FLOW);
     for (String fromTo : wizardFlows) {