package org.ovirt.engine.ui.common.auth; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.utils.FormatUtils; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HasHandlers; import com.google.inject.Inject; /** * Holds data relevant for the current user. * <p> * Triggers {@link UserLoginChangeEvent} when the user logs in or out. */ public class CurrentUser implements HasHandlers { public interface LogoutHandler { void onLogout(); void onSessionExpired(); } private final EventBus eventBus; private boolean loggedIn = false; private AutoLoginData userInfo; // Indicates that the user should be logged in automatically private boolean autoLogin = false; private LogoutHandler logoutHandler; @Inject public CurrentUser(EventBus eventBus) { this.eventBus = eventBus; } /** * Returns {@code true} if the user is currently logged in, {@code false} otherwise. */ public boolean isLoggedIn() { return loggedIn; } void setLoggedIn(boolean loggedIn) { this.loggedIn = loggedIn; } DbUser getLoggedUser() { return Frontend.getInstance().getLoggedInUser(); } /** * Returns the user ID of the current user. */ public String getUserId() { return getLoggedUser().getId().toString(); } /** * Returns full user name ({@code user@domain}) of the current user. */ public String getFullUserName() { return FormatUtils.getFullLoginName(getLoggedUser()); } public boolean isAutoLogin() { return autoLogin; } public void setAutoLogin(boolean autoLogin) { this.autoLogin = autoLogin; } public void setLogoutHandler(LogoutHandler logoutHandler) { this.logoutHandler = logoutHandler; } public void login() { setLoggedIn(true); } public void logout() { if (isLoggedIn() && logoutHandler != null) { logoutHandler.onLogout(); } } public void sessionExpired() { if (logoutHandler != null) { logoutHandler.onSessionExpired(); } } public void fireLoginChangeEvent() { UserLoginChangeEvent.fire(this); } @Override public void fireEvent(GwtEvent<?> event) { eventBus.fireEvent(event); } public void setUserInfo(AutoLoginData userInfo) { this.userInfo = userInfo; } public String getEngineSessionId() { return userInfo != null ? userInfo.getEngineSessionId() : null; } public String getSsoToken() { return userInfo != null ? userInfo.getSsoToken() : null; } }