Update the Sign In anchor with current URL
Always update the href of the Sign In anchor in the menu bar with the current page URL after /login/, making the redirect process bring users back to the current view after sign in. Change-Id: Id97566975a2193be0e43552d25b0d75f56c9eceb
This commit is contained in:
@@ -20,7 +20,6 @@ import com.google.gerrit.client.changes.ChangeConstants;
|
|||||||
import com.google.gerrit.client.changes.ChangeListScreen;
|
import com.google.gerrit.client.changes.ChangeListScreen;
|
||||||
import com.google.gerrit.client.patches.PatchScreen;
|
import com.google.gerrit.client.patches.PatchScreen;
|
||||||
import com.google.gerrit.client.rpc.GerritCallback;
|
import com.google.gerrit.client.rpc.GerritCallback;
|
||||||
import com.google.gerrit.client.ui.CommandMenuItem;
|
|
||||||
import com.google.gerrit.client.ui.LinkMenuBar;
|
import com.google.gerrit.client.ui.LinkMenuBar;
|
||||||
import com.google.gerrit.client.ui.LinkMenuItem;
|
import com.google.gerrit.client.ui.LinkMenuItem;
|
||||||
import com.google.gerrit.client.ui.MorphingTabPanel;
|
import com.google.gerrit.client.ui.MorphingTabPanel;
|
||||||
@@ -190,13 +189,7 @@ public class Gerrit implements EntryPoint {
|
|||||||
*/
|
*/
|
||||||
public static void updateImpl(final String token) {
|
public static void updateImpl(final String token) {
|
||||||
History.newItem(token, false);
|
History.newItem(token, false);
|
||||||
|
dispatchHistoryHooks(token);
|
||||||
if (historyHooks != null) {
|
|
||||||
// Because we blocked firing the event our history hooks won't be
|
|
||||||
// informed of the current token. Manually fire the event to them.
|
|
||||||
//
|
|
||||||
dispatchHistoryHooks(token);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setQueryString(String query) {
|
public static void setQueryString(String query) {
|
||||||
@@ -249,10 +242,7 @@ public class Gerrit implements EntryPoint {
|
|||||||
case HTTP_LDAP:
|
case HTTP_LDAP:
|
||||||
case CLIENT_SSL_CERT_LDAP:
|
case CLIENT_SSL_CERT_LDAP:
|
||||||
case CUSTOM_EXTENSION:
|
case CUSTOM_EXTENSION:
|
||||||
if (token.startsWith("/")) {
|
Location.assign(loginRedirect(token));
|
||||||
token = token.substring(1);
|
|
||||||
}
|
|
||||||
Location.assign(selfRedirect("/login/" + token));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DEVELOPMENT_BECOME_ANY_ACCOUNT:
|
case DEVELOPMENT_BECOME_ANY_ACCOUNT:
|
||||||
@@ -270,6 +260,15 @@ public class Gerrit implements EntryPoint {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String loginRedirect(String token) {
|
||||||
|
if (token == null) {
|
||||||
|
token = "";
|
||||||
|
} else if (token.startsWith("/")) {
|
||||||
|
token = token.substring(1);
|
||||||
|
}
|
||||||
|
return selfRedirect("/login/" + token);
|
||||||
|
}
|
||||||
|
|
||||||
private static String selfRedirect(String suffix) {
|
private static String selfRedirect(String suffix) {
|
||||||
// Clean up the path. Users seem to like putting extra slashes into the URL
|
// Clean up the path. Users seem to like putting extra slashes into the URL
|
||||||
// which can break redirections by misinterpreting at either client or server.
|
// which can break redirections by misinterpreting at either client or server.
|
||||||
@@ -376,6 +375,7 @@ public class Gerrit implements EntryPoint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ArrayList<JavaScriptObject> historyHooks;
|
private static ArrayList<JavaScriptObject> historyHooks;
|
||||||
|
private static Anchor signInAnchor;
|
||||||
|
|
||||||
private static native void initHistoryHooks()
|
private static native void initHistoryHooks()
|
||||||
/*-{ $wnd['gerrit_addHistoryHook'] = function(h) { @com.google.gerrit.client.Gerrit::addHistoryHook(Lcom/google/gwt/core/client/JavaScriptObject;)(h); }; }-*/;
|
/*-{ $wnd['gerrit_addHistoryHook'] = function(h) { @com.google.gerrit.client.Gerrit::addHistoryHook(Lcom/google/gwt/core/client/JavaScriptObject;)(h); }; }-*/;
|
||||||
@@ -397,9 +397,14 @@ public class Gerrit implements EntryPoint {
|
|||||||
/*-{ hook(url); }-*/;
|
/*-{ hook(url); }-*/;
|
||||||
|
|
||||||
private static void dispatchHistoryHooks(final String historyToken) {
|
private static void dispatchHistoryHooks(final String historyToken) {
|
||||||
final String url = Location.getPath() + "#" + historyToken;
|
if (signInAnchor != null) {
|
||||||
for (final JavaScriptObject hook : historyHooks) {
|
signInAnchor.setHref(loginRedirect(historyToken));
|
||||||
callHistoryHook(hook, url);
|
}
|
||||||
|
if (historyHooks != null) {
|
||||||
|
final String url = Location.getPath() + "#" + historyToken;
|
||||||
|
for (final JavaScriptObject hook : historyHooks) {
|
||||||
|
callHistoryHook(hook, url);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -464,9 +469,7 @@ public class Gerrit implements EntryPoint {
|
|||||||
final String token = view.getToken();
|
final String token = view.getToken();
|
||||||
if (!token.equals(History.getToken())) {
|
if (!token.equals(History.getToken())) {
|
||||||
History.newItem(token, false);
|
History.newItem(token, false);
|
||||||
if (historyHooks != null) {
|
dispatchHistoryHooks(token);
|
||||||
dispatchHistoryHooks(token);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (view instanceof ChangeListScreen) {
|
if (view instanceof ChangeListScreen) {
|
||||||
@@ -606,14 +609,8 @@ public class Gerrit implements EntryPoint {
|
|||||||
if (cfg.getRegisterUrl() != null) {
|
if (cfg.getRegisterUrl() != null) {
|
||||||
menuRight.add(anchor(C.menuRegister(), cfg.getRegisterUrl()));
|
menuRight.add(anchor(C.menuRegister(), cfg.getRegisterUrl()));
|
||||||
}
|
}
|
||||||
CommandMenuItem signIn = new CommandMenuItem(C.menuSignIn(),
|
signInAnchor = anchor(C.menuSignIn(), loginRedirect(""));
|
||||||
new Command() {
|
menuRight.add(signInAnchor);
|
||||||
public void execute() {
|
|
||||||
doSignIn(History.getToken());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
signIn.setHref(selfRedirect("/login/"));
|
|
||||||
menuRight.addItem(signIn);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DEVELOPMENT_BECOME_ANY_ACCOUNT:
|
case DEVELOPMENT_BECOME_ANY_ACCOUNT:
|
||||||
|
Reference in New Issue
Block a user