mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-17 01:31:01 +00:00
User Management - Consistent error handling within
AuthenticationManagerImpl
This commit is contained in:
1 parent
6b0f89903a
commit
5730b9e3ab
7 files changed
+110
-99
No files matched your search
-39
@@ -1,39 +0,0 @@
|
||||
package com.sap.sse.security.ui.authentication;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
import com.sap.sse.security.ui.shared.SuccessInfo;
|
||||
|
||||
public class AsyncLoginCallback implements AsyncCallback<SuccessInfo> {
|
||||
|
||||
private final ErrorMessageView view;
|
||||
private final AuthenticationCallback callback;
|
||||
private final boolean fireSignInSuccessfulEvent;
|
||||
|
||||
public AsyncLoginCallback(ErrorMessageView view, AuthenticationCallback callback, boolean fireSignInSuccessfulEvent) {
|
||||
this.view = view;
|
||||
this.callback = callback;
|
||||
this.fireSignInSuccessfulEvent = fireSignInSuccessfulEvent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(SuccessInfo result) {
|
||||
if (result.isSuccessful()) {
|
||||
if (fireSignInSuccessfulEvent) {
|
||||
callback.handleSignInSuccess();
|
||||
}
|
||||
} else {
|
||||
if (SuccessInfo.FAILED_TO_LOGIN.equals(result.getMessage())) {
|
||||
view.setErrorMessage(StringMessages.INSTANCE.failedToSignIn());
|
||||
} else {
|
||||
view.setErrorMessage(result.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
view.setErrorMessage(StringMessages.INSTANCE.failedToSignIn());
|
||||
}
|
||||
|
||||
}
|
||||
+8
-4
@@ -1,6 +1,5 @@
|
||||
package com.sap.sse.security.ui.authentication;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
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;
|
||||
@@ -8,15 +7,20 @@ import com.sap.sse.security.ui.shared.UserDTO;
|
||||
public interface AuthenticationManager {
|
||||
|
||||
void createAccount(String name, String email, String password, String fullName,
|
||||
String company, AsyncCallback<UserDTO> callback);
|
||||
String company, SuccessCallback<UserDTO> callback);
|
||||
|
||||
void reqeustPasswordReset(String username, String eMailAddress, AsyncCallback<Void> callback);
|
||||
void reqeustPasswordReset(String username, String eMailAddress, SuccessCallback<Void> callback);
|
||||
|
||||
void login(String username, String password, AsyncCallback<SuccessInfo> callback);
|
||||
void login(String username, String password, SuccessCallback<SuccessInfo> callback);
|
||||
|
||||
void logout();
|
||||
|
||||
void refreshUserInfo();
|
||||
|
||||
AuthenticationContext getAuthenticationContext();
|
||||
|
||||
public interface SuccessCallback<T> {
|
||||
|
||||
void onSuccess(T result);
|
||||
}
|
||||
}
|
||||
+80
-8
@@ -1,13 +1,19 @@
|
||||
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 com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.web.bindery.event.shared.EventBus;
|
||||
import com.sap.sse.security.shared.UserManagementException;
|
||||
import com.sap.sse.security.ui.authentication.app.AuthenticationContext;
|
||||
import com.sap.sse.security.ui.authentication.app.AuthenticationContextImpl;
|
||||
import com.sap.sse.security.ui.client.UserManagementServiceAsync;
|
||||
import com.sap.sse.security.ui.client.UserService;
|
||||
import com.sap.sse.security.ui.client.UserStatusEventHandler;
|
||||
import com.sap.sse.security.ui.client.WithSecurity;
|
||||
import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
import com.sap.sse.security.ui.shared.SuccessInfo;
|
||||
import com.sap.sse.security.ui.shared.UserDTO;
|
||||
|
||||
@@ -18,6 +24,9 @@ public class AuthenticationManagerImpl implements AuthenticationManager {
|
||||
private final EventBus eventBus;
|
||||
private final String emailConfirmationUrl;
|
||||
private final String passwordResetUrl;
|
||||
|
||||
private final StringMessages i18n = StringMessages.INSTANCE;
|
||||
private final ErrorMessageView view = new ErrorMessageViewImpl();
|
||||
|
||||
/**
|
||||
* Creates an {@link AuthenticationManagerImpl} instance based on the {@link UserService} and
|
||||
@@ -80,20 +89,62 @@ public class AuthenticationManagerImpl implements AuthenticationManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createAccount(String name, String email, String password, String fullName,
|
||||
String company, AsyncCallback<UserDTO> callback) {
|
||||
userManagementService
|
||||
.createSimpleUser(name, email, password, fullName, company, emailConfirmationUrl, callback);
|
||||
public void createAccount(final String name, String email, String password, String fullName,
|
||||
String company, SuccessCallback<UserDTO> callback) {
|
||||
userManagementService.createSimpleUser(name, email, password, fullName, company, emailConfirmationUrl,
|
||||
new AsyncCallbackImpl<UserDTO>(callback) {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
if (caught instanceof UserManagementException) {
|
||||
if (USER_ALREADY_EXISTS.equals(((UserManagementException) caught).getMessage())) {
|
||||
view.setErrorMessage(i18n.userAlreadyExists(name));
|
||||
}
|
||||
} else {
|
||||
view.setErrorMessage(i18n.errorCreatingUser(name, caught.getMessage()));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reqeustPasswordReset(String username, String eMailAddress, AsyncCallback<Void> callback) {
|
||||
userManagementService.resetPassword(username, eMailAddress, passwordResetUrl, callback);
|
||||
public void reqeustPasswordReset(final String username, String eMailAddress, SuccessCallback<Void> callback) {
|
||||
userManagementService.resetPassword(username, eMailAddress, passwordResetUrl, new AsyncCallbackImpl<Void>(callback) {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
if (caught instanceof UserManagementException) {
|
||||
if (CANNOT_RESET_PASSWORD_WITHOUT_VALIDATED_EMAIL.equals(caught.getMessage())) {
|
||||
view.setErrorMessage(i18n.cannotResetPasswordWithoutValidatedEmail(username));
|
||||
} else {
|
||||
view.setErrorMessage(i18n.errorResettingPassword(username, caught.getMessage()));
|
||||
}
|
||||
} else {
|
||||
view.setErrorMessage(i18n.errorDuringPasswordReset(caught.getMessage()));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void login(String username, String password, AsyncCallback<SuccessInfo> callback) {
|
||||
userService.login(username, password, callback);
|
||||
public void login(String username, String password, final SuccessCallback<SuccessInfo> callback) {
|
||||
userService.login(username, password, new AsyncCallback<SuccessInfo>() {
|
||||
@Override
|
||||
public void onSuccess(SuccessInfo result) {
|
||||
if (result.isSuccessful()) {
|
||||
callback.onSuccess(result);
|
||||
} else {
|
||||
if (SuccessInfo.FAILED_TO_LOGIN.equals(result.getMessage())) {
|
||||
view.setErrorMessage(StringMessages.INSTANCE.failedToSignIn());
|
||||
} else {
|
||||
view.setErrorMessage(result.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
view.setErrorMessage(StringMessages.INSTANCE.failedToSignIn());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -111,4 +162,25 @@ public class AuthenticationManagerImpl implements AuthenticationManager {
|
||||
public AuthenticationContext getAuthenticationContext() {
|
||||
return new AuthenticationContextImpl(userService.getCurrentUser());
|
||||
}
|
||||
|
||||
private abstract class AsyncCallbackImpl<T> implements AsyncCallback<T> {
|
||||
|
||||
private final SuccessCallback<T> successCallback;
|
||||
|
||||
private AsyncCallbackImpl(SuccessCallback<T> successCallback) {
|
||||
this.successCallback = successCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onSuccess(T result) {
|
||||
this.successCallback.onSuccess(result);
|
||||
}
|
||||
}
|
||||
|
||||
private class ErrorMessageViewImpl implements ErrorMessageView {
|
||||
@Override
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
Window.alert(errorMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -66,7 +66,7 @@ public class AuthenticationPlaceManagementController extends WrappedPlaceManagem
|
||||
if (placeToUse instanceof SignInPlace) {
|
||||
return new SignInActivity(clientFactory, callback, placeController);
|
||||
} else if (placeToUse instanceof CreateAccountPlace) {
|
||||
return new CreateAccountActivity(clientFactory, callback, placeController);
|
||||
return new CreateAccountActivity(clientFactory, placeController);
|
||||
} else if (placeToUse instanceof PasswordRecoveryPlace) {
|
||||
return new PasswordRecoveryActivity(clientFactory, placeController);
|
||||
} else if (placeToUse instanceof LoggedInUserInfoPlace) {
|
||||
|
||||
+11
-24
@@ -1,22 +1,17 @@
|
||||
package com.sap.sse.security.ui.authentication.create;
|
||||
|
||||
import static com.sap.sse.security.shared.UserManagementException.USER_ALREADY_EXISTS;
|
||||
|
||||
import com.google.gwt.activity.shared.AbstractActivity;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.place.shared.PlaceController;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sse.security.shared.UserManagementException;
|
||||
import com.sap.sse.security.ui.authentication.AsyncLoginCallback;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationCallback;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationClientFactory;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationManager.SuccessCallback;
|
||||
import com.sap.sse.security.ui.authentication.confirm.ConfirmationInfoPlace;
|
||||
import com.sap.sse.security.ui.authentication.confirm.ConfirmationInfoPlace.Action;
|
||||
import com.sap.sse.security.ui.authentication.signin.SignInPlace;
|
||||
import com.sap.sse.security.ui.client.component.NewAccountValidator;
|
||||
import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
import com.sap.sse.security.ui.shared.SuccessInfo;
|
||||
import com.sap.sse.security.ui.shared.UserDTO;
|
||||
|
||||
public class CreateAccountActivity extends AbstractActivity implements CreateAccountView.Presenter {
|
||||
@@ -27,14 +22,11 @@ public class CreateAccountActivity extends AbstractActivity implements CreateAcc
|
||||
|
||||
private final StringMessages i18n_sec = StringMessages.INSTANCE;
|
||||
private final CreateAccountFormValues values = new CreateAccountFormValues();
|
||||
private final AuthenticationCallback callback;
|
||||
|
||||
public CreateAccountActivity(AuthenticationClientFactory clientFactory, AuthenticationCallback callback,
|
||||
PlaceController placeController) {
|
||||
public CreateAccountActivity(AuthenticationClientFactory clientFactory, PlaceController placeController) {
|
||||
this.clientFactory = clientFactory;
|
||||
this.placeController = placeController;
|
||||
this.view = clientFactory.createCreateAccountView();
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -48,24 +40,13 @@ public class CreateAccountActivity extends AbstractActivity implements CreateAcc
|
||||
public void createAccount() {
|
||||
if (values.validate()) {
|
||||
clientFactory.getAuthenticationManager().createAccount(values.username, values.email,
|
||||
values.password, values.fullName, values.company, new AsyncCallback<UserDTO>() {
|
||||
values.password, values.fullName, values.company, new SuccessCallback<UserDTO>() {
|
||||
@Override
|
||||
public void onSuccess(final UserDTO result) {
|
||||
clientFactory.getAuthenticationManager().login(result.getName(), values.password,
|
||||
new AsyncLoginCallback(view, callback, false));
|
||||
new LoginAfterCreatingAccountSuccessCallback());
|
||||
placeController.goTo(new ConfirmationInfoPlace(Action.ACCOUNT_CREATED, result.getName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
if (caught instanceof UserManagementException) {
|
||||
if (USER_ALREADY_EXISTS.equals(((UserManagementException) caught).getMessage())) {
|
||||
Window.alert(i18n_sec.userAlreadyExists(values.username));
|
||||
}
|
||||
} else {
|
||||
Window.alert(i18n_sec.errorCreatingUser(values.username, caught.getMessage()));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -120,5 +101,11 @@ public class CreateAccountActivity extends AbstractActivity implements CreateAcc
|
||||
return isValid;
|
||||
}
|
||||
}
|
||||
|
||||
private class LoginAfterCreatingAccountSuccessCallback implements SuccessCallback<SuccessInfo> {
|
||||
@Override
|
||||
public void onSuccess(SuccessInfo result) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+2
-20
@@ -1,17 +1,13 @@
|
||||
package com.sap.sse.security.ui.authentication.recover;
|
||||
|
||||
import static com.sap.sse.security.shared.UserManagementException.CANNOT_RESET_PASSWORD_WITHOUT_VALIDATED_EMAIL;
|
||||
|
||||
import com.google.gwt.activity.shared.AbstractActivity;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.place.shared.PlaceController;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sse.security.shared.UserManagementException;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationClientFactory;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationManager.SuccessCallback;
|
||||
import com.sap.sse.security.ui.authentication.confirm.ConfirmationInfoPlace;
|
||||
import com.sap.sse.security.ui.authentication.confirm.ConfirmationInfoPlace.Action;
|
||||
import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
|
||||
public class PasswordRecoveryActivity extends AbstractActivity implements PasswordRecoveryView.Presenter {
|
||||
|
||||
@@ -33,26 +29,12 @@ public class PasswordRecoveryActivity extends AbstractActivity implements Passwo
|
||||
|
||||
@Override
|
||||
public void resetPassword(final String email, final String username) {
|
||||
clientFactory.getAuthenticationManager().reqeustPasswordReset(username, email, new AsyncCallback<Void>() {
|
||||
clientFactory.getAuthenticationManager().reqeustPasswordReset(username, email, new SuccessCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
String name = (username == null || username.isEmpty()) ? email : username;
|
||||
placeController.goTo(new ConfirmationInfoPlace(Action.RESET_REQUESTED, name));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
StringMessages i18n = StringMessages.INSTANCE;
|
||||
if (caught instanceof UserManagementException) {
|
||||
if (CANNOT_RESET_PASSWORD_WITHOUT_VALIDATED_EMAIL.equals(caught.getMessage())) {
|
||||
view.setErrorMessage(i18n.cannotResetPasswordWithoutValidatedEmail(username));
|
||||
} else {
|
||||
view.setErrorMessage(i18n.errorResettingPassword(username, caught.getMessage()));
|
||||
}
|
||||
} else {
|
||||
view.setErrorMessage(i18n.errorDuringPasswordReset(caught.getMessage()));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+8
-3
@@ -4,13 +4,14 @@ import com.google.gwt.activity.shared.AbstractActivity;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.place.shared.PlaceController;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sse.security.ui.authentication.AsyncLoginCallback;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationCallback;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationClientFactory;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationContextEvent;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationManager.SuccessCallback;
|
||||
import com.sap.sse.security.ui.authentication.create.CreateAccountPlace;
|
||||
import com.sap.sse.security.ui.authentication.info.LoggedInUserInfoPlace;
|
||||
import com.sap.sse.security.ui.authentication.recover.PasswordRecoveryPlace;
|
||||
import com.sap.sse.security.ui.shared.SuccessInfo;
|
||||
|
||||
public class SignInActivity extends AbstractActivity implements SignInView.Presenter {
|
||||
|
||||
@@ -43,8 +44,12 @@ public class SignInActivity extends AbstractActivity implements SignInView.Prese
|
||||
|
||||
@Override
|
||||
public void login(String loginName, String password) {
|
||||
clientFactory.getAuthenticationManager().login(loginName, password,
|
||||
new AsyncLoginCallback(view, callback, true));
|
||||
clientFactory.getAuthenticationManager().login(loginName, password, new SuccessCallback<SuccessInfo>() {
|
||||
@Override
|
||||
public void onSuccess(SuccessInfo result) {
|
||||
callback.handleSignInSuccess();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user