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:
@@ -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) {
|
||||||
|
|||||||
@@ -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("?");
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user