diff --git a/src/main/java/com/commafeed/backend/dao/UserService.java b/src/main/java/com/commafeed/backend/dao/UserService.java index 864dfefd..1208641e 100644 --- a/src/main/java/com/commafeed/backend/dao/UserService.java +++ b/src/main/java/com/commafeed/backend/dao/UserService.java @@ -1,17 +1,16 @@ package com.commafeed.backend.dao; import java.util.Collection; -import java.util.List; import javax.ejb.Stateless; import javax.inject.Inject; +import javax.persistence.NoResultException; +import javax.persistence.TypedQuery; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserRole; import com.commafeed.backend.model.UserRole.Role; import com.commafeed.backend.security.PasswordEncryptionService; -import com.commafeed.frontend.utils.ModelFactory.MF; -import com.google.common.collect.Iterables; @Stateless @SuppressWarnings("serial") @@ -20,9 +19,21 @@ public class UserService extends GenericDAO { @Inject PasswordEncryptionService encryptionService; + private User findByName(String name) { + TypedQuery query = em.createNamedQuery("User.byName", User.class); + query.setParameter("name", name.toLowerCase()); + + User user = null; + try { + user = query.getSingleResult(); + } catch (NoResultException e) { + user = null; + } + return user; + } + public User login(String name, String password) { - List users = findByField(MF.i(MF.p(User.class).getName()), name); - User user = Iterables.getFirst(users, null); + User user = findByName(name); if (user != null && !user.isDisabled()) { boolean authenticated = encryptionService.authenticate(password, user.getPassword(), user.getSalt()); @@ -35,8 +46,7 @@ public class UserService extends GenericDAO { } public User register(String name, String password, Collection roles) { - List users = findByField(MF.i(proxy().getName()), name); - if (!users.isEmpty()) { + if (findByName(name) != null) { return null; } User user = new User(); diff --git a/src/main/resources/META-INF/orm.xml b/src/main/resources/META-INF/orm.xml index 315854ad..e5e9eb1e 100644 --- a/src/main/resources/META-INF/orm.xml +++ b/src/main/resources/META-INF/orm.xml @@ -4,6 +4,10 @@ xsi:schemaLocation=" http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"> + + + select u FROM User u WHERE lower(u.name)=:name + select e from FeedEntry e where e.guid in (:guids) order by e.updated desc