make sure emails are unique

This commit is contained in:
Athou
2013-05-21 09:17:12 +02:00
parent 9c9a315d1c
commit cb9c124951
4 changed files with 27 additions and 2 deletions

View File

@@ -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<User> {
}
public User findByEmail(String email) {
if (StringUtils.isBlank(email)) {
return null;
}
CriteriaQuery<User> query = builder.createQuery(getType());
Root<User> root = query.from(getType());
query.where(builder.equal(root.get(User_.email), email));

View File

@@ -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.");
}
}
};

View File

@@ -98,7 +98,18 @@ public class RegisterPanel extends Panel {
protected String getInputType() {
return "email";
}
}.add(RfcCompliantEmailAddressValidator.getInstance()));
}.add(RfcCompliantEmailAddressValidator.getInstance()).add(
new IValidator<String>() {
@Override
public void validate(IValidatable<String> 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())));
}

View File

@@ -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();
}