Bug 4228: Moved the logic triggering the user hint about login to

Authentication manager to be able to use this on other pages later
This commit is contained in:
Steffen Schaefer committed 2017-08-17 10:30:50 +02:00
1 parent 420552d92c
commit 492ecdb66b
5 files changed
+39 -69

No files matched your search

@@ -1,7 +1,5 @@
package com.sap.sailing.gwt.home.desktop.app;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
@@ -41,9 +39,7 @@ import com.sap.sse.security.ui.authentication.WrappedPlaceManagementController;
import com.sap.sse.security.ui.authentication.info.LoggedInUserInfoPlace;
import com.sap.sse.security.ui.authentication.login.LoginPopup;
import com.sap.sse.security.ui.authentication.view.FlyoutAuthenticationPresenter;
import com.sap.sse.security.ui.client.UserStatusEventHandler;
import com.sap.sse.security.ui.client.i18n.StringMessages;
import com.sap.sse.security.ui.shared.UserDTO;
public class TabletAndDesktopApplicationClientFactory extends AbstractApplicationClientFactory<DesktopApplicationTopLevelView> implements DesktopClientFactory {
@@ -84,23 +80,13 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio
new FlyoutAuthenticationPresenter(userManagementDisplay, getTopLevelView().getAuthenticationMenuView(),
userManagementWizardController, eventBus, authenticationManager.getAuthenticationContext());
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
getUserService().addUserStatusEventHandler(new UserStatusEventHandler() {
@Override
public void onUserStatusChange(UserDTO user) {
checkNewUserPopup(user, () -> new LoginPopup(() -> {
setUserLoginHintToStorage();
}, () -> {
setUserLoginHintToStorage();
placesNavigator.goToPlace(placesNavigator.getMoreLoginInfo());
}).show());
}
}, true);
}
authenticationManager.checkNewUserPopup(dismissCallback -> {
new LoginPopup(() -> {
dismissCallback.run();
}, () -> {
dismissCallback.run();
placesNavigator.goToPlace(placesNavigator.getMoreLoginInfo());
}).show();
});
}
@@ -1,7 +1,5 @@
package com.sap.sailing.gwt.home.mobile.app;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
@@ -34,9 +32,7 @@ import com.sap.sse.security.ui.authentication.WithAuthenticationManager;
import com.sap.sse.security.ui.authentication.WithUserService;
import com.sap.sse.security.ui.authentication.login.LoginPopupContent;
import com.sap.sse.security.ui.client.SecureClientFactoryImpl;
import com.sap.sse.security.ui.client.UserStatusEventHandler;
import com.sap.sse.security.ui.client.i18n.StringMessages;
import com.sap.sse.security.ui.shared.UserDTO;
/**
*
@@ -75,29 +71,16 @@ public class MobileApplicationClientFactory extends
.getMailVerifiedConfirmationNavigation().getFullQualifiedUrl(), getNavigator()
.getPasswordResetNavigation().getFullQualifiedUrl());
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
getUserService().addUserStatusEventHandler(new UserStatusEventHandler() {
@Override
public void onUserStatusChange(UserDTO user) {
checkNewUserPopup(user, () -> {
final LoginPopupContent content = new LoginPopupContent(() -> {
root.setSubHeaderContent(null);
setUserLoginHintToStorage();
}, () -> {
root.setSubHeaderContent(null);
setUserLoginHintToStorage();
navigator.goToPlace(navigator.getMoreLoginInfo());
});
root.setSubHeaderContent(content);
});
}
}, true);
}
authenticationManager.checkNewUserPopup(dismissCallback -> {
final LoginPopupContent content = new LoginPopupContent(() -> {
root.setSubHeaderContent(null);
dismissCallback.run();
}, () -> {
root.setSubHeaderContent(null);
dismissCallback.run();
navigator.goToPlace(navigator.getMoreLoginInfo());
});
root.setSubHeaderContent(content);
});
}
@@ -1,5 +1,7 @@
package com.sap.sse.security.ui.authentication;
import java.util.function.Consumer;
import com.sap.sse.security.ui.authentication.app.AuthenticationContext;
import com.sap.sse.security.ui.shared.SuccessInfo;
import com.sap.sse.security.ui.shared.UserDTO;
@@ -82,4 +84,6 @@ public interface AuthenticationManager {
*/
void onSuccess(T result);
}
void checkNewUserPopup(Consumer<Runnable> showUserHintCallback);
}
@@ -3,6 +3,8 @@ package com.sap.sse.security.ui.authentication;
import static com.sap.sse.security.shared.UserManagementException.CANNOT_RESET_PASSWORD_WITHOUT_VALIDATED_EMAIL;
import static com.sap.sse.security.shared.UserManagementException.USER_ALREADY_EXISTS;
import java.util.function.Consumer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.web.bindery.event.shared.EventBus;
@@ -39,8 +41,7 @@ public class AuthenticationManagerImpl implements AuthenticationManager {
/**
* Creates an {@link AuthenticationManagerImpl} instance based on the {@link UserService} and
* {@link UserManagementServiceAsync} instances provided by the given {@link WithSecurity} instance.
*
* @param userService
* * @param userService
* the {@link UserService} instance to use
* @param eventBus
* the {@link EventBus} instance
@@ -169,6 +170,21 @@ public class AuthenticationManagerImpl implements AuthenticationManager {
return new AuthenticationContextImpl(userService.getCurrentUser());
}
@Override
public void checkNewUserPopup(Consumer<Runnable> showUserHintCallback) {
userService.addUserStatusEventHandler(new UserStatusEventHandler() {
@Override
public void onUserStatusChange(UserDTO user) {
// We are only interested in the initial user
userService.removeUserStatusEventHandler(this);
if (user == null && !userService.wasUserRecentlyLoggedInOrDismissedTheHint()) {
showUserHintCallback.accept(userService::setUserLoginHintToStorage);
}
}
}, true);
}
private abstract class AsyncCallbackImpl<T> implements AsyncCallback<T> {
private final SuccessCallback<T> successCallback;
@@ -5,7 +5,6 @@ import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sse.gwt.client.mvp.ClientFactoryImpl;
import com.sap.sse.gwt.client.mvp.TopLevelView;
import com.sap.sse.security.ui.shared.UserDTO;
/**
* An implementation of a ClientFactory providing security services
@@ -38,22 +37,4 @@ public abstract class SecureClientFactoryImpl<TLV extends TopLevelView> extends
public UserService getUserService() {
return securityProvider.getUserService();
}
protected void checkNewUserPopup(UserDTO user, Runnable newUserRunnable) {
if (user != null) {
setUserLoginHintToStorage();
} else {
if (!wasUserRecentlyLoggedInOrDismissedTheHint()) {
newUserRunnable.run();
}
}
}
public boolean wasUserRecentlyLoggedInOrDismissedTheHint() {
return getUserService().wasUserRecentlyLoggedInOrDismissedTheHint();
}
public void setUserLoginHintToStorage() {
getUserService().setUserLoginHintToStorage();
}
}