Add Switch Account link to the current user popdown
Permit site administrators to configure a URL for users to switch the current user identity. CacheBasedWebSession automatically invalidates the old session (and the cookie and XSRF token) during the switch. For DEVELOPMENT_BECOME_ANY_ACCOUNT this is a faster way to jump to another test user as it avoids needing to logout first, saving one click and a reload of the web UI. For OPENID the user can select another OpenID user quickly using the login dialog. This can be useful if someone has two personas, such as a personal identity used with open source work and another identity used for day-job or administrative activities. On gerrit-review the configuration setting will be set to facilitate switching between a user's Google Accounts. Change-Id: I8abd58c06e74f96fef5430324e1c24a787823d35
This commit is contained in:
@@ -335,7 +335,17 @@ full name.
|
||||
+
|
||||
Target for the "Obtain Password" link. Used only when `auth.type` is
|
||||
`LDAP`, `LDAP_BIND` or `CUSTOM_EXTENSION`.
|
||||
|
||||
[[auth.switchAccountUrl]]auth.switchAccountUrl::
|
||||
+
|
||||
URL to switch user identities and login as a different account than
|
||||
the currently active account. This is disabled by default except when
|
||||
`auth.type` is `OPENID` and `DEVELOPMENT_BECOME_ANY_ACCOUNT`. If set
|
||||
the "Switch Account" link is displayed next to "Sign Out".
|
||||
+
|
||||
When `auth.type` does not normally enable this URL administrators may
|
||||
set this to `login/` or `$canonicalWebUrl/login`, allowing users to
|
||||
begin a new web session.
|
||||
|
||||
[[auth.cookiePath]]auth.cookiePath::
|
||||
+
|
||||
|
@@ -28,6 +28,7 @@ public class GerritConfig implements Cloneable {
|
||||
protected String registerText;
|
||||
protected String loginUrl;
|
||||
protected String loginText;
|
||||
protected String switchAccountUrl;
|
||||
protected String httpPasswordUrl;
|
||||
protected String reportBugUrl;
|
||||
protected boolean gitBasicAuth;
|
||||
@@ -75,6 +76,14 @@ public class GerritConfig implements Cloneable {
|
||||
registerUrl = u;
|
||||
}
|
||||
|
||||
public String getSwitchAccountUrl() {
|
||||
return switchAccountUrl;
|
||||
}
|
||||
|
||||
public void setSwitchAccountUrl(String u) {
|
||||
switchAccountUrl = u;
|
||||
}
|
||||
|
||||
public String getRegisterText() {
|
||||
return registerText;
|
||||
}
|
||||
|
@@ -18,9 +18,7 @@ import com.google.gwt.i18n.client.Constants;
|
||||
|
||||
public interface GerritConstants extends Constants {
|
||||
String menuSignIn();
|
||||
String menuSignOut();
|
||||
String menuRegister();
|
||||
String menuSettings();
|
||||
String reportBug();
|
||||
|
||||
String signInDialogTitle();
|
||||
|
@@ -1,7 +1,5 @@
|
||||
menuSignIn = Sign In
|
||||
menuSignOut = Sign Out
|
||||
menuRegister = Register
|
||||
menuSettings = Settings
|
||||
reportBug = Report Bug
|
||||
|
||||
signInDialogTitle = Code Review - Sign In
|
||||
|
@@ -16,11 +16,12 @@ package com.google.gerrit.client;
|
||||
|
||||
import com.google.gerrit.client.account.AccountInfo;
|
||||
import com.google.gerrit.client.ui.InlineHyperlink;
|
||||
import com.google.gerrit.reviewdb.client.AuthType;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.AnchorElement;
|
||||
import com.google.gwt.dom.client.Element;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.ui.Anchor;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwtexpui.user.client.PluginSafePopupPanel;
|
||||
@@ -33,7 +34,8 @@ public class UserPopupPanel extends PluginSafePopupPanel {
|
||||
@UiField Label userName;
|
||||
@UiField Label userEmail;
|
||||
@UiField Element userLinks;
|
||||
@UiField Anchor logout;
|
||||
@UiField AnchorElement switchAccount;
|
||||
@UiField AnchorElement logout;
|
||||
@UiField InlineHyperlink settings;
|
||||
|
||||
public UserPopupPanel(AccountInfo account, boolean canLogOut,
|
||||
@@ -49,11 +51,22 @@ public class UserPopupPanel extends PluginSafePopupPanel {
|
||||
userEmail.setText(account.email());
|
||||
}
|
||||
if (showSettingsLink) {
|
||||
if (Gerrit.getConfig().getSwitchAccountUrl() != null) {
|
||||
switchAccount.setHref(Gerrit.getConfig().getSwitchAccountUrl());
|
||||
} else if (Gerrit.getConfig().getAuthType() == AuthType.DEVELOPMENT_BECOME_ANY_ACCOUNT
|
||||
|| Gerrit.getConfig().getAuthType() == AuthType.OPENID) {
|
||||
switchAccount.setHref(Gerrit.selfRedirect("/login/"));
|
||||
} else {
|
||||
switchAccount.removeFromParent();
|
||||
switchAccount = null;
|
||||
}
|
||||
if (canLogOut) {
|
||||
logout.setHref(Gerrit.selfRedirect("/logout"));
|
||||
} else {
|
||||
logout.setVisible(false);
|
||||
logout.removeFromParent();
|
||||
logout = null;
|
||||
}
|
||||
|
||||
} else {
|
||||
settings.removeFromParent();
|
||||
settings = null;
|
||||
|
@@ -19,8 +19,6 @@ limitations under the License.
|
||||
xmlns:g='urn:import:com.google.gwt.user.client.ui'
|
||||
xmlns:gerrit='urn:import:com.google.gerrit.client'
|
||||
xmlns:u='urn:import:com.google.gerrit.client.ui'>
|
||||
<ui:with field='constants' type='com.google.gerrit.client.GerritConstants'/>
|
||||
|
||||
<ui:style>
|
||||
.panel {
|
||||
padding: 8px;
|
||||
@@ -36,16 +34,20 @@ limitations under the License.
|
||||
.userName {
|
||||
font-weight: bold;
|
||||
}
|
||||
.userLinks {
|
||||
min-width: 175px;
|
||||
}
|
||||
.email {
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
.logout {
|
||||
padding-left: 16px;
|
||||
.userLinks {
|
||||
min-width: 250px;
|
||||
}
|
||||
.userLinksRight {
|
||||
float: right;
|
||||
}
|
||||
.switchAccount {
|
||||
border-right: 1px solid black;
|
||||
padding-right: 0.5em;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
</ui:style>
|
||||
|
||||
<g:HTMLPanel styleName='{style.panel}'>
|
||||
@@ -59,9 +61,10 @@ limitations under the License.
|
||||
<u:InlineHyperlink ui:field='settings' targetHistoryToken='/settings/'>
|
||||
<ui:msg>Settings</ui:msg>
|
||||
</u:InlineHyperlink>
|
||||
<g:Anchor ui:field='logout' styleName="{style.logout}">
|
||||
<ui:text from='{constants.menuSignOut}' />
|
||||
</g:Anchor>
|
||||
<span class='{style.userLinksRight}'>
|
||||
<a ui:field='switchAccount' class='{style.switchAccount}'><ui:msg>Switch Account</ui:msg></a
|
||||
><a ui:field='logout'><ui:msg>Sign Out</ui:msg></a>
|
||||
</span>
|
||||
</div>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
|
@@ -106,6 +106,7 @@ class GerritConfigProvider implements Provider<GerritConfig> {
|
||||
case OPENID_SSO:
|
||||
break;
|
||||
}
|
||||
config.setSwitchAccountUrl(cfg.getString("auth", null, "switchAccountUrl"));
|
||||
config.setUseContributorAgreements(cfg.getBoolean("auth",
|
||||
"contributoragreements", false));
|
||||
config.setGitDaemonUrl(cfg.getString("gerrit", null, "canonicalgiturl"));
|
||||
|
Reference in New Issue
Block a user