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) {