From 53eab1080b9040ebc8cac27832785c9724259947 Mon Sep 17 00:00:00 2001 From: Luca Milanesio Date: Fri, 14 Jul 2017 17:21:04 +0100 Subject: [PATCH] Allow running without gerrit.canonicalWebUrl Gerrit's CanonicalWebUrl class is already responsible of getting the full URL from either gerrit.config or the incoming HTTP request. However, over time, other parts of Gerrit injected directly the configured string through @CanonicalWebUrl annotation and did not manage correctly the situation where the configuration is absent. The only situation where gerrit.canonicalWebUrl is mandatory is OAuth authentication, because the OAuth provider needs to have a fixed callback URL with a single hostname. Change-Id: Idee1d36eb08c53a0d06604b9a737695322e124d1 --- .../java/com/google/gerrit/httpd/raw/IndexServlet.java | 5 +++++ .../com/google/gerrit/server/account/GetOAuthToken.java | 6 +++--- .../com/google/gerrit/server/plugins/PluginLoader.java | 8 +++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/IndexServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/IndexServlet.java index 107f584023..db0212e997 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/IndexServlet.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/IndexServlet.java @@ -17,6 +17,7 @@ package com.google.gerrit.httpd.raw; import static java.nio.charset.StandardCharsets.UTF_8; import static javax.servlet.http.HttpServletResponse.SC_OK; +import com.google.common.base.Strings; import com.google.common.io.Resources; import com.google.gerrit.common.Nullable; import com.google.template.soy.SoyFileSet; @@ -61,6 +62,10 @@ public class IndexServlet extends HttpServlet { } static String computeCanonicalPath(String canonicalURL) throws URISyntaxException { + if (Strings.isNullOrEmpty(canonicalURL)) { + return ""; + } + // If we serving from a sub-directory rather than root, determine the path // from the cannonical web URL. URI uri = new URI(canonicalURL); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/GetOAuthToken.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/GetOAuthToken.java index 1099d6b7c2..587f26805e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/GetOAuthToken.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/GetOAuthToken.java @@ -38,7 +38,7 @@ class GetOAuthToken implements RestReadView { private final Provider self; private final OAuthTokenCache tokenCache; - private final String hostName; + private final Provider canonicalWebUrlProvider; @Inject GetOAuthToken( @@ -47,7 +47,7 @@ class GetOAuthToken implements RestReadView { @CanonicalWebUrl Provider urlProvider) { this.self = self; this.tokenCache = tokenCache; - this.hostName = getHostName(urlProvider.get()); + this.canonicalWebUrlProvider = urlProvider; } @Override @@ -63,7 +63,7 @@ class GetOAuthToken implements RestReadView { } OAuthTokenInfo accessTokenInfo = new OAuthTokenInfo(); accessTokenInfo.username = a.getUserName(); - accessTokenInfo.resourceHost = hostName; + accessTokenInfo.resourceHost = getHostName(canonicalWebUrlProvider.get()); accessTokenInfo.accessToken = accessToken.getToken(); accessTokenInfo.providerId = accessToken.getProviderId(); accessTokenInfo.expiresAt = Long.toString(accessToken.getExpiresAt()); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java index fcc6801fb9..d972087fbe 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.plugins; import com.google.common.base.CharMatcher; import com.google.common.base.Joiner; import com.google.common.base.MoreObjects; +import com.google.common.base.Strings; import com.google.common.collect.ComparisonChain; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; @@ -580,9 +581,14 @@ public class PluginLoader implements LifecycleListener { } private String getPluginCanonicalWebUrl(String name) { + String canonicalWebUrl = urlProvider.get(); + if (Strings.isNullOrEmpty(canonicalWebUrl)) { + return "/plugins/" + name; + } + String url = String.format( - "%s/plugins/%s/", CharMatcher.is('/').trimTrailingFrom(urlProvider.get()), name); + "%s/plugins/%s/", CharMatcher.is('/').trimTrailingFrom(canonicalWebUrl), name); return url; }