1: package cz.cvut.x33eja.macosond.business.user;
2:
3: import cz.cvut.x33eja.macosond.business.util.Password;
4: import cz.cvut.x33eja.macosond.persistence.entity.UserAccount;
5: import cz.cvut.x33eja.macosond.persistence.entity.UserRole;
6: import java.security.NoSuchAlgorithmException;
7: import java.util.Collection;
8: import java.util.logging.Level;
9: import java.util.logging.Logger;
10: import javax.annotation.Resource;
11: import javax.annotation.security.PermitAll;
12: import javax.annotation.security.RolesAllowed;
13: import javax.ejb.SessionContext;
14: import javax.ejb.Stateless;
15: import javax.persistence.EntityManager;
16: import javax.persistence.PersistenceContext;
17: import javax.persistence.Query;
18:
19: 20: 21: 22:
23: @Stateless
24: public class UserAccountBean implements UserAccountLocal
25: {
26: @PersistenceContext(unitName="Musico-PU")
27: private EntityManager em;
28:
29: @Resource
30: private SessionContext sc;
31:
32: @PermitAll
33: public void add(UserAccount user)
34: {
35: em.persist(user);
36: }
37:
38: @RolesAllowed({"member","admin"})
39: public void edit(UserAccount user)
40: {
41: if(sc.isCallerInRole(UserRole.ADMIN)) {
42: user = em.merge(user);
43: em.persist(user);
44: } else {
45: UserAccount current = getCurrentUser();
46: if(current.getUserAccountID().equals(user.getUserAccountID())) {
47: user = em.merge(user);
48: em.persist(user);
49: }
50: }
51: }
52:
53: @RolesAllowed({"admin"})
54: public void delete(UserAccount user)
55: {
56: user = em.merge(user);
57: em.remove(user);
58: }
59:
60: @PermitAll
61: public UserAccount get(UserAccount user)
62: {
63: return em.find(UserAccount.class, user.getUserAccountID());
64: }
65:
66: @PermitAll
67: public UserAccount get(Integer UserAccountID)
68: {
69: return em.find(UserAccount.class, UserAccountID);
70: }
71:
72: @PermitAll
73: public boolean usernameExists(String Username)
74: {
75: Query query = em.createNamedQuery("UserAccount.byUsername");
76: query.setParameter("Username", Username);
77: if(query.getSingleResult() == null) {
78: return false;
79: } else {
80: return true;
81: }
82: }
83:
84: @PermitAll
85: public boolean emailExists(String Email)
86: {
87: Query query = em.createNamedQuery("UserAccount.byEmail");
88: query.setParameter("Email", Email);
89: if(query.getSingleResult() == null) {
90: return false;
91: } else {
92: return true;
93: }
94: }
95:
96: @RolesAllowed({"member","admin"})
97: public boolean changePassword(String oldPassword, String newPassword)
98: {
99: try {
100: UserAccount userAccount = getCurrentUser();
101: if (userAccount.getPassword().equals(Password.encode(oldPassword))) {
102: userAccount.setPassword(Password.encode(newPassword));
103: em.persist(userAccount);
104: return true;
105: }
106: return false;
107: } catch (NoSuchAlgorithmException ex) {
108: Logger.getLogger(UserAccountBean.class.getName()).log(Level.SEVERE, null, ex);
109: }
110: return false;
111: }
112:
113: @PermitAll
114: public UserAccount getCurrentUser()
115: {
116: String username = sc.getCallerPrincipal().getName();
117: if(username == null) {
118: return null;
119: }
120: Query query = em.createNamedQuery("UserAccount.byUsername");
121: query.setParameter("Username", username);
122: try {
123: return (UserAccount) query.getSingleResult();
124: } catch(javax.persistence.NoResultException ex) {
125: return null;
126: }
127: }
128:
129: @RolesAllowed({"admin"})
130: public Collection<UserAccount> getAll()
131: {
132: return em.createNamedQuery("UserAccount.list").getResultList();
133: }
134: }
135: