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