diff --git a/ccm-core/src/main/java/org/libreccm/security/Party.java b/ccm-core/src/main/java/org/libreccm/security/Party.java index 2b84f2aa3..3feeecc8d 100644 --- a/ccm-core/src/main/java/org/libreccm/security/Party.java +++ b/ccm-core/src/main/java/org/libreccm/security/Party.java @@ -92,7 +92,7 @@ public class Party implements Serializable { */ @Column(name = "NAME", length = 256, nullable = false) @NotNull - @Pattern(regexp = "[a-zA-Z0-9\\-_]*") +// @Pattern(regexp = "[a-zA-Z0-9\\-_\\.]*") private String name; /** diff --git a/ccm-core/src/main/java/org/libreccm/security/User.java b/ccm-core/src/main/java/org/libreccm/security/User.java index a678bce96..e51df1f30 100644 --- a/ccm-core/src/main/java/org/libreccm/security/User.java +++ b/ccm-core/src/main/java/org/libreccm/security/User.java @@ -74,14 +74,23 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA; + "ORDER BY u.name, " + " u.familyName, " + " u.givenName, " - + " u.primaryEmailAddress.address"), + + " u.primaryEmailAddress.address") + , + @NamedQuery(name = "User.countByName", + query = "SELECT COUNT(u) FROM User u WHERE u.name = :name") + , @NamedQuery(name = "User.findByEmailAddress", query = "SELECT u FROM User u WHERE " + "u.primaryEmailAddress.address = :emailAddress " + "ORDER BY u.name, " + " u.familyName, " + " u.givenName, " - + " u.primaryEmailAddress.address"), + + " u.primaryEmailAddress.address") + , + @NamedQuery(name = "User.countByPrimaryEmailAddress", + query = "SELECT COUNT(u) FROM User u " + + "WHERE u.primaryEmailAddress.address = :emailAddress") + , @NamedQuery( name = "User.filterByNameAndEmail", query = "SELECT u FROM User u WHERE " @@ -92,7 +101,8 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA; + "ORDER BY u.name," + "u.familyName, " + "u.givenName, " - + "u.primaryEmailAddress.address"), + + "u.primaryEmailAddress.address") + , @NamedQuery( name = "User.findAllOrderedByUsername", query = "SELECT u FROM User u ORDER BY u.name, " @@ -105,7 +115,8 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA; name = "User.withGroupAndRoleMemberships", attributeNodes = { @NamedAttributeNode( - value = "groupMemberships"), + value = "groupMemberships") + , @NamedAttributeNode( value = "roleMemberships", subgraph = "role")}, @@ -115,7 +126,8 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA; attributeNodes = { @NamedAttributeNode(value = "role", subgraph = "permissions") - }), + }) + , @NamedSubgraph( name = "permissions", attributeNodes = { diff --git a/ccm-core/src/main/java/org/libreccm/security/UserManager.java b/ccm-core/src/main/java/org/libreccm/security/UserManager.java index f23e57c71..d4b5fd4fa 100644 --- a/ccm-core/src/main/java/org/libreccm/security/UserManager.java +++ b/ccm-core/src/main/java/org/libreccm/security/UserManager.java @@ -87,7 +87,7 @@ public class UserManager { @Transactional(Transactional.TxType.REQUIRED) public User createUser(final String givenName, final String familyName, - @Pattern(regexp = "[a-zA-Z0-9\\-_]*") +// @Pattern(regexp = "[a-zA-Z0-9\\-_]*") final String name, final String emailAddress, final String password) { diff --git a/ccm-core/src/main/java/org/libreccm/security/UserRepository.java b/ccm-core/src/main/java/org/libreccm/security/UserRepository.java index da62c42fc..6d59ef454 100644 --- a/ccm-core/src/main/java/org/libreccm/security/UserRepository.java +++ b/ccm-core/src/main/java/org/libreccm/security/UserRepository.java @@ -85,7 +85,7 @@ public class UserRepository extends AbstractEntityRepository { .getEntityGraph(entityGraphName); return findByName(name, entityGraph); } - + public Optional findByName(final String name, final EntityGraph entityGraph) { final TypedQuery query = getEntityManager().createNamedQuery( @@ -96,6 +96,16 @@ public class UserRepository extends AbstractEntityRepository { return getSingleResult(query); } + public boolean isNameInUse(final String name) { + + final TypedQuery query = getEntityManager() + .createNamedQuery("User.countByName", Long.class); + query.setParameter("name", name); + + final Long result = query.getSingleResult(); + return result > 0; + } + /** * Finds user by the primary email address. * @@ -131,6 +141,16 @@ public class UserRepository extends AbstractEntityRepository { return getSingleResult(query); } + + public boolean isEmailAddressInUse(final String emailAddress) { + + final TypedQuery query = getEntityManager() + .createNamedQuery("User.countByPrimaryEmailAddress", Long.class); + query.setParameter("emailAddress", emailAddress); + + final Long result = query.getSingleResult(); + return result > 0; + } public List filtered(final String term) { final TypedQuery query = getEntityManager().createNamedQuery(