Fix login redirect for non default (root) context

Login redirection was working fine when gerrit is deployed in the root
context but did not otherwise.

Issue: 2990
Change-Id: I851d45d4b9de1f70e45cdd5daaa838546dae02db
This commit is contained in:
Hugo Arès
2014-10-30 17:01:06 -04:00
parent 493208ae26
commit 2c846e524f
3 changed files with 10 additions and 15 deletions

View File

@@ -337,14 +337,7 @@ public class Gerrit implements EntryPoint {
token = token.substring(1); token = token.substring(1);
} }
UrlBuilder builder = new UrlBuilder(); return selfRedirect("login/") + URL.encodePathSegment("#/" + token);
builder.setProtocol(Location.getProtocol());
builder.setHost(Location.getHost());
String port = Location.getPort();
if (port != null && !port.isEmpty()) {
builder.setPort(Integer.parseInt(port));
}
return builder.buildString() + ("/login/" + URL.encodePathSegment("#/" + token));
} }
public static String selfRedirect(String suffix) { public static String selfRedirect(String suffix) {

View File

@@ -16,8 +16,6 @@ package com.google.gerrit.httpd.auth.become;
import static com.google.gerrit.reviewdb.client.AccountExternalId.SCHEME_USERNAME; import static com.google.gerrit.reviewdb.client.AccountExternalId.SCHEME_USERNAME;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.gerrit.common.PageLinks; import com.google.gerrit.common.PageLinks;
import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.registration.DynamicItem;
import com.google.gerrit.httpd.HtmlDomUtil; import com.google.gerrit.httpd.HtmlDomUtil;
@@ -122,9 +120,8 @@ class BecomeAnyAccountLoginServlet extends HttpServlet {
if (res != null) { if (res != null) {
webSession.get().login(res, false); webSession.get().login(res, false);
final StringBuilder rdr = new StringBuilder(); final StringBuilder rdr = new StringBuilder();
rdr.append(Objects.firstNonNull( rdr.append(req.getContextPath());
Strings.emptyToNull(req.getContextPath()), rdr.append("/");
"/"));
if (IS_DEV && req.getParameter("gwt.codesvr") != null) { if (IS_DEV && req.getParameter("gwt.codesvr") != null) {
if (rdr.indexOf("?") < 0) { if (rdr.indexOf("?") < 0) {
rdr.append("?"); rdr.append("?");

View File

@@ -409,8 +409,13 @@ class GitWebServlet extends HttpServlet {
} }
private static String getLoginRedirectUrl(HttpServletRequest req) { private static String getLoginRedirectUrl(HttpServletRequest req) {
String loginUrl = req.getContextPath() + "/login/"; String contextPath = req.getContextPath();
String token = req.getRequestURI().substring(1); String loginUrl = contextPath + "/login/";
String token = req.getRequestURI();
if (!contextPath.isEmpty()) {
token = token.substring(contextPath.length());
}
String queryString = req.getQueryString(); String queryString = req.getQueryString();
if (queryString != null && !queryString.isEmpty()) { if (queryString != null && !queryString.isEmpty()) {
token = token.concat("?" + queryString); token = token.concat("?" + queryString);