From cb9c124951254b058820a77e666a85897c733c66 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 21 May 2013 09:17:12 +0200 Subject: [PATCH] make sure emails are unique --- .../java/com/commafeed/backend/dao/UserDAO.java | 5 +++++ .../pages/PasswordRecoveryCallbackPage.java | 2 +- .../frontend/pages/components/RegisterPanel.java | 13 ++++++++++++- .../commafeed/frontend/rest/resources/UserREST.java | 9 +++++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/commafeed/backend/dao/UserDAO.java b/src/main/java/com/commafeed/backend/dao/UserDAO.java index b67664cb..96c7b4fc 100644 --- a/src/main/java/com/commafeed/backend/dao/UserDAO.java +++ b/src/main/java/com/commafeed/backend/dao/UserDAO.java @@ -6,6 +6,8 @@ import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; +import org.apache.commons.lang3.StringUtils; + import com.commafeed.backend.model.User; import com.commafeed.backend.model.User_; @@ -45,6 +47,9 @@ public class UserDAO extends GenericDAO { } public User findByEmail(String email) { + if (StringUtils.isBlank(email)) { + return null; + } CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); query.where(builder.equal(root.get(User_.email), email)); diff --git a/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryCallbackPage.java b/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryCallbackPage.java index 7f116abf..3985e2bc 100644 --- a/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryCallbackPage.java +++ b/src/main/java/com/commafeed/frontend/pages/PasswordRecoveryCallbackPage.java @@ -66,7 +66,7 @@ public class PasswordRecoveryCallbackPage extends BasePage { userDAO.update(user); info("Password saved."); } else { - error("Password do not match"); + error("Passwords do not match."); } } }; diff --git a/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.java b/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.java index 7c02e568..180aadad 100644 --- a/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.java +++ b/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.java @@ -98,7 +98,18 @@ public class RegisterPanel extends Panel { protected String getInputType() { return "email"; } - }.add(RfcCompliantEmailAddressValidator.getInstance())); + }.add(RfcCompliantEmailAddressValidator.getInstance()).add( + new IValidator() { + @Override + public void validate(IValidatable validatable) { + String email = validatable.getValue(); + User user = userDAO.findByEmail(email); + if (user != null) { + validatable.error(new ValidationError( + "Email is already taken.")); + } + } + })); form.add(new CheckBox("import", MF.m(model, p.isGoogleImport()))); } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java b/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java index 9f1fb854..7ebaa322 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java @@ -108,6 +108,15 @@ public class UserREST extends AbstractResourceREST { public Response save( @ApiParam(required = true) ProfileModificationRequest request) { User user = getUser(); + + Preconditions.checkArgument(StringUtils.isBlank(request.getPassword()) + || request.getPassword().length() >= 6); + if (StringUtils.isNotBlank(request.getEmail())) { + User u = userDAO.findByEmail(request.getEmail()); + Preconditions.checkArgument(u == null + || user.getId().equals(u.getId())); + } + if (StartupBean.USERNAME_DEMO.equals(user.getName())) { return Response.status(Status.UNAUTHORIZED).build(); }