mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 01:16:40 +00:00
a few steps towards e-mail validation
This commit is contained in:
+4
@@ -119,4 +119,8 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages {
|
||||
|
||||
String newPasswordSent(String username);
|
||||
|
||||
String errorValidatingEmail(String username, String message);
|
||||
|
||||
String emailValidatedSuccessfully(String username);
|
||||
|
||||
}
|
||||
|
||||
+3
-1
@@ -54,4 +54,6 @@ successfullyUpdatedEmail=Successfully updated e-mail address
|
||||
resetPassword=Reset password
|
||||
errorDuringPasswordReset=Error during password reset: {0}
|
||||
cannotResetPasswordWithoutValidatedEmail=Cannot reset password because user {0} does not have a validated e-mail address
|
||||
newPasswordSent=A new password has been sent to {0}''s validated e-mail address
|
||||
newPasswordSent=A new password has been sent to {0}''s validated e-mail address
|
||||
errorValidatingEmail=Error validating e-mail address of user {0}: {1}
|
||||
emailValidatedSuccessfully=e-mail address of user {0} validated successfully
|
||||
+3
-1
@@ -54,4 +54,6 @@ successfullyUpdatedEmail=e-Mail-Adresse erfolgreich aktualisiert
|
||||
resetPassword=Passwort zurücksetzen
|
||||
errorDuringPasswordReset=Fehler beim Zurücksetyen des Passworts: {0}
|
||||
cannotResetPasswordWithoutValidatedEmail=Passwort für Benutzer {0} kann nicht zurückgesetzt werden, da keine validierte e-Mail-Adresse vorliegt
|
||||
newPasswordSent=Ein neues Passwort ist an die validierte e-Mail-Adresse des Benutzers {0} gesendet worden
|
||||
newPasswordSent=Ein neues Passwort ist an die validierte e-Mail-Adresse des Benutzers {0} gesendet worden
|
||||
errorValidatingEmail=Fehler beim Validieren der e-Mail-Adresse für Benutzer {0}: {1}
|
||||
emailValidatedSuccessfully=e-Mail-Adresse für Benutzer {0} erfolgreich validiert
|
||||
+11
-107
@@ -2,33 +2,15 @@ package com.sap.sse.security.ui.emailvalidation;
|
||||
|
||||
import com.google.gwt.core.client.EntryPoint;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.Style.Unit;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.event.dom.client.KeyUpEvent;
|
||||
import com.google.gwt.event.dom.client.KeyUpHandler;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.rpc.ServiceDefTarget;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.DockLayoutPanel;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
|
||||
import com.google.gwt.user.client.ui.FormPanel.SubmitHandler;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.PasswordTextBox;
|
||||
import com.google.gwt.user.client.ui.RootLayoutPanel;
|
||||
import com.google.gwt.user.client.ui.SubmitButton;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.sap.sse.gwt.client.EntryPointHelper;
|
||||
import com.sap.sse.security.shared.UserManagementException;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
import com.sap.sse.security.ui.client.RemoteServiceMappingConstants;
|
||||
import com.sap.sse.security.ui.client.StringMessages;
|
||||
import com.sap.sse.security.ui.client.UserService;
|
||||
import com.sap.sse.security.ui.client.UserStatusEventHandler;
|
||||
import com.sap.sse.security.ui.client.component.NewAccountValidator;
|
||||
import com.sap.sse.security.ui.shared.UserDTO;
|
||||
import com.sap.sse.security.ui.shared.UserManagementService;
|
||||
import com.sap.sse.security.ui.shared.UserManagementServiceAsync;
|
||||
|
||||
@@ -41,99 +23,21 @@ public class EmailValidationEntryPoint implements EntryPoint {
|
||||
EntryPointHelper.registerASyncService((ServiceDefTarget) userManagementService,
|
||||
RemoteServiceMappingConstants.WEB_CONTEXT_PATH,
|
||||
RemoteServiceMappingConstants.userManagementServiceRemotePath);
|
||||
final UserService userService = new UserService(userManagementService);
|
||||
final NewAccountValidator validator = new NewAccountValidator(stringMessages);
|
||||
final String username = Window.Location.getParameter("u");
|
||||
final String validationSecret = Window.Location.getParameter("v");
|
||||
RootLayoutPanel rootPanel = RootLayoutPanel.get();
|
||||
DockLayoutPanel dockPanel = new DockLayoutPanel(Unit.PX);
|
||||
rootPanel.add(dockPanel);
|
||||
FlowPanel fp = new FlowPanel();
|
||||
final Label errorLabel = new Label();
|
||||
fp.add(errorLabel);
|
||||
final Label nameLabel = new Label(stringMessages.username());
|
||||
fp.add(nameLabel);
|
||||
final TextBox nameText = new TextBox();
|
||||
nameText.setEnabled(false);
|
||||
userService.addUserStatusEventHandler(new UserStatusEventHandler() {
|
||||
final Label resultLabel = new Label();
|
||||
userManagementService.validateEmail(username, validationSecret, new MarkedAsyncCallback<Void>(new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onUserStatusChange(UserDTO user) {
|
||||
if (user == null) {
|
||||
nameText.setText("");
|
||||
} else {
|
||||
nameText.setText(user.getName());
|
||||
}
|
||||
public void onFailure(Throwable caught) {
|
||||
resultLabel.setText(stringMessages.errorValidatingEmail(username, caught.getMessage()));
|
||||
}
|
||||
});
|
||||
fp.add(nameText);
|
||||
Label currentPasswordLabel = new Label(stringMessages.currentPassword());
|
||||
fp.add(currentPasswordLabel);
|
||||
final TextBox currentPasswordText = new PasswordTextBox();
|
||||
fp.add(currentPasswordText);
|
||||
Label pwLabel = new Label(stringMessages.password());
|
||||
fp.add(pwLabel);
|
||||
final PasswordTextBox pwText = new PasswordTextBox();
|
||||
fp.add(pwText);
|
||||
Label pw2Label = new Label(stringMessages.passwordRepeat());
|
||||
fp.add(pw2Label);
|
||||
final PasswordTextBox pw2Text = new PasswordTextBox();
|
||||
fp.add(pw2Text);
|
||||
final SubmitButton submit = new SubmitButton(stringMessages.changePassword());
|
||||
fp.add(submit);
|
||||
KeyUpHandler keyUpHandler = new KeyUpHandler() {
|
||||
@Override
|
||||
public void onKeyUp(KeyUpEvent event) {
|
||||
String errorMessage = validator.validateUsernameAndPassword(nameText.getText(), pwText.getText(), pw2Text.getText());
|
||||
if (errorMessage == null) {
|
||||
errorLabel.setText("");
|
||||
submit.setEnabled(true);
|
||||
} else {
|
||||
errorLabel.setText(errorMessage);
|
||||
submit.setEnabled(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
keyUpHandler.onKeyUp(null); // enable/disable submit button and fill error label
|
||||
nameText.addKeyUpHandler(keyUpHandler);
|
||||
pwText.addKeyUpHandler(keyUpHandler);
|
||||
pw2Text.addKeyUpHandler(keyUpHandler);
|
||||
FormPanel formPanel = new FormPanel();
|
||||
formPanel.addSubmitHandler(new SubmitHandler() {
|
||||
@Override
|
||||
public void onSubmit(SubmitEvent event) {
|
||||
userManagementService.updateSimpleUserPassword(nameText.getText(), currentPasswordText.getText(), pwText.getText(), new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
GWT.log(caught.getMessage());
|
||||
if (caught instanceof UserManagementException) {
|
||||
String message = ((UserManagementException) caught).getMessage();
|
||||
if (UserManagementException.PASSWORD_DOES_NOT_MEET_REQUIREMENTS.equals(message)) {
|
||||
Window.alert(stringMessages.passwordDoesNotMeetRequirements());
|
||||
} else if (UserManagementException.INVALID_CREDENTIALS.equals(message)) {
|
||||
Window.alert(stringMessages.invalidCredentials());
|
||||
} else {
|
||||
Window.alert(stringMessages.errorChangingPassword(caught.getMessage()));
|
||||
}
|
||||
} else {
|
||||
Window.alert(stringMessages.errorChangingPassword(caught.getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
Window.alert(stringMessages.passwordSuccessfullyChanged());
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
final Button logout = new Button(stringMessages.signOut());
|
||||
logout.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
userService.logout();
|
||||
Window.Location.reload();
|
||||
public void onSuccess(Void result) {
|
||||
resultLabel.setText(stringMessages.emailValidatedSuccessfully(username));
|
||||
}
|
||||
});
|
||||
fp.add(logout);
|
||||
formPanel.add(fp);
|
||||
dockPanel.add(formPanel);
|
||||
}));
|
||||
rootPanel.add(resultLabel);
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -171,6 +171,11 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U
|
||||
getSecurityService().resetPassword(username);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateEmail(String username, String validationSecret) throws UserManagementException {
|
||||
getSecurityService().validateEmail(username, validationSecret);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<UserDTO> getFilteredSortedUserList(String filter) {
|
||||
List<UserDTO> users = new ArrayList<>();
|
||||
|
||||
+2
@@ -26,6 +26,8 @@ public interface UserManagementService extends RemoteService {
|
||||
|
||||
void resetPassword(String username) throws UserManagementException, MailException;
|
||||
|
||||
void validateEmail(String username, String validationSecret) throws UserManagementException;
|
||||
|
||||
SuccessInfo deleteUser(String username);
|
||||
|
||||
SuccessInfo logout();
|
||||
|
||||
+2
@@ -20,6 +20,8 @@ public interface UserManagementServiceAsync {
|
||||
void updateSimpleUserPassword(String name, String oldPassword, String newPassword, AsyncCallback<Void> callback);
|
||||
|
||||
void resetPassword(String username, AsyncCallback<Void> callback);
|
||||
|
||||
void validateEmail(String username, String validationSecret, AsyncCallback<Void> markedAsyncCallback);
|
||||
|
||||
void updateSimpleUserEmail(String username, String newEmail, AsyncCallback<Void> callback);
|
||||
|
||||
|
||||
+1
-1
@@ -81,7 +81,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
}
|
||||
DBObject accountsMap = (DBObject) userDBObject.get(FieldNames.User.ACCOUNTS.name());
|
||||
Map<AccountType, Account> accounts = createAccountMapFromdDBObject(accountsMap);
|
||||
User result = new User(name, email, emailValidated, validationSecret, accounts.values());
|
||||
User result = new User(name, email, emailValidated==null?false:emailValidated, validationSecret, accounts.values());
|
||||
for (String role : roles) {
|
||||
result.addRole(role);
|
||||
}
|
||||
|
||||
@@ -80,4 +80,6 @@ public interface SecurityService {
|
||||
*/
|
||||
void resetPassword(String username) throws UserManagementException, MailException;
|
||||
|
||||
boolean validateEmail(String username, String validationSecret) throws UserManagementException;
|
||||
|
||||
}
|
||||
|
||||
@@ -225,6 +225,7 @@ public class SecurityServiceImpl extends RemoteServiceServlet implements Securit
|
||||
UsernamePasswordAccount upa = new UsernamePasswordAccount(name, hashedPasswordBase64, salt);
|
||||
final User result = store.createUser(name, email, upa);
|
||||
startEmailValidation(result);
|
||||
store.updateUser(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -271,6 +272,15 @@ public class SecurityServiceImpl extends RemoteServiceServlet implements Securit
|
||||
startEmailValidation(user);
|
||||
store.updateUser(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validateEmail(String username, String validationSecret) throws UserManagementException {
|
||||
final User user = store.getUserByName(username);
|
||||
if (user == null) {
|
||||
throw new UserManagementException(UserManagementException.USER_DOES_NOT_EXIST);
|
||||
}
|
||||
return user.validate(validationSecret);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link User#startEmailValidation() Triggers} e-mail validation for the <code>user</code> object and
|
||||
@@ -279,7 +289,7 @@ public class SecurityServiceImpl extends RemoteServiceServlet implements Securit
|
||||
private void startEmailValidation(User user) throws MailException {
|
||||
String secret = user.startEmailValidation();
|
||||
sendMail(user.getName(), "e-Mail Validation", "Please click on the link below to validate your e-mail address.\n "+
|
||||
"http://127.0.0.1:8888/security/ui/EmailValidation.html?gwt.codesvr=127.0.0.1:9997&v="+secret);
|
||||
"http://127.0.0.1:8888/security/ui/EmailValidation.html?gwt.codesvr=127.0.0.1:9997&u="+user.getName()+"&v="+secret);
|
||||
}
|
||||
|
||||
protected String hashPassword(String password, Object salt) {
|
||||
|
||||
Reference in New Issue
Block a user