Project

General

Profile

1
package eu.dnetlib.goldoa.service.dao;
2

    
3
import eu.dnetlib.goldoa.domain.AccountAction;
4
import eu.dnetlib.goldoa.domain.Role;
5
import eu.dnetlib.goldoa.domain.User;
6
import eu.dnetlib.goldoa.domain.UserRole;
7
import org.apache.commons.codec.digest.DigestUtils;
8
import org.apache.commons.logging.Log;
9
import org.apache.commons.logging.LogFactory;
10
import org.hibernate.Criteria;
11
import org.hibernate.criterion.Order;
12
import org.hibernate.criterion.Restrictions;
13
import org.hibernate.transform.Transformers;
14
import org.springframework.stereotype.Repository;
15

    
16
import java.math.BigInteger;
17
import java.sql.Timestamp;
18
import java.util.List;
19

    
20
/**
21
 * Created by antleb on 3/13/15.
22
 */
23
@Repository
24
public class UserDAO extends AbstractDao<String, User> {
25
    private Log log = LogFactory.getLog(UserDAO.class);
26

    
27
    /**
28
     * Returns the person with the given id. Objects of different type are placeholders containing only their id.
29
     * Objects representing relations are fully initialized, with placeholders for other main entities.
30
     *
31
     * @param userId
32
     * @return
33
     */
34
    public User getUserById(String userId) {
35
        return (User) createEntityCriteria().add(Restrictions.eq("id", userId)).list().get(0);
36
    }
37

    
38
    /**
39
     * Returns the person with the given email. Objects of different type are placeholders containing only their id.
40
     * Objects representing relations are fully initialized, with placeholders for other main entities.
41
     *
42
     * @param email
43
     * @return
44
     */
45
    @SuppressWarnings("unchecked")
46
    public User getUserByEmail(String email) {
47
        List<User> users = createEntityCriteria().add(Restrictions.eq("email", email)).list();
48
        if (users.size() == 0)
49
            return null;
50
        User u = users.get(0);
51
        return u;
52
    }
53

    
54
    @SuppressWarnings("unchecked")
55
    public List<Role> getUserRoles(String email) {
56
        Criteria cr = getSession().createCriteria(UserRole.class);
57
        return cr.add(Restrictions.eq("pk.user",email))
58
                .setResultTransformer( Transformers.aliasToBean(Role.class)).list();
59
    }
60

    
61
    public void saveToken(final String email, final String token, final int tokenTTL) {
62
        AccountAction acc_action = new AccountAction();
63
        acc_action.setUser(getUserByEmail(email));
64
        acc_action.setType("activation");
65
        acc_action.setToken(token);
66
        acc_action.setDate(new Timestamp(System.currentTimeMillis()));
67
        acc_action.setExpires(new Timestamp(System.currentTimeMillis() + 1000L * 60L * 60L * 24L * tokenTTL));
68
        BigInteger id = (BigInteger) getSession().createSQLQuery("select nextval('account_action_seq') as id").list().get(0);
69
        acc_action.setId(id);
70
        getSession().persist(acc_action);
71
    }
72

    
73
    @SuppressWarnings("unchecked")
74
    public boolean verifyLogin(String email, String password) {
75

    
76
        List<User> users = createEntityCriteria().add(Restrictions.eq("email", email))
77
        		.add(Restrictions.eq("password", DigestUtils.md5Hex(password))).list();
78

    
79
        if (users.size() != 0)
80
            return true;
81
        return false;
82
    }
83

    
84
    @SuppressWarnings("unchecked")
85
    public boolean verifyToken(final String email, final String token) {
86
        Criteria cr = getSession().createCriteria(AccountAction.class);
87
        List<AccountAction> ac = cr.createAlias("user","u").add(Restrictions.eq("u.email", email))
88
                .add(Restrictions.eq("token", token)).list();
89
        if (ac.size() > 0)
90
            return true;
91
        return false;
92
    }
93

    
94
    public void activateUser(final String email) {
95
        User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
96
        user.setActive(true);
97
        getSession().update(user);
98
    }
99

    
100
    public void deleteToken(final String email, final String token) {
101
        Criteria cr = getSession().createCriteria(AccountAction.class);
102
        AccountAction ac = (AccountAction) cr.createAlias("user","u").add(Restrictions.eq("u.email", email))
103
                .add(Restrictions.eq("token", token))
104
                .add(Restrictions.eq("type", "activation")).list().get(0);
105
        getSession().delete(ac);
106
    }
107

    
108
    @SuppressWarnings("unchecked")
109
    public boolean updatePassword(final String newPassword, final String email) {
110
        List<User> rs = createEntityCriteria().add(Restrictions.eq("email", email)).list();
111
        if (rs.get(0) != null) {
112
            User user = rs.get(0);
113
            user.setPassword(DigestUtils.md5Hex(newPassword));
114
            User user_merged = (User) getSession().merge(user);
115
            return true;
116
        }
117
        return false;
118

    
119
    }
120

    
121
    @SuppressWarnings("unchecked")
122
    public List<Role> getRoles() {
123
        return (List<Role>)getSession().createCriteria(Role.class).list();
124
    }
125

    
126
    @SuppressWarnings("unchecked")
127
    public void saveUser(final User user) {
128
        User u = getUserByEmail(user.getEmail());
129
        if (u != null) {
130
            if(u.getPublisher() != null && u.getPublisher() == user.getPublisher())
131
                user.setPublisher(u.getPublisher());
132
            if(user.getPassword() == null)
133
                user.setPassword(u.getPassword());
134
            if (user.getPassword() != null && !user.getPassword().equals(u.getPassword()))
135
                user.setPassword(DigestUtils.md5Hex(user.getPassword()));
136
            if(u.isActive())
137
                user.setActive(true);
138
            User user_merged = (User) getSession().merge(user);
139
        }else
140
            persist(user);
141
    }
142

    
143
    @SuppressWarnings("unchecked")
144
    public List<User> getUsersByRole(String role_id) {
145
        return  createEntityCriteria()
146
                .createAlias("roles" , "r")
147
                .add(Restrictions.eq("r.pk.role.id",role_id))
148
                .list();
149
    }
150

    
151
    public List<User> getModerators() {
152
        return getUsersByRole("moderator");
153
    }
154

    
155
    public List<User> getAccountingOfficers() {
156
        return getUsersByRole("accounting");
157
    }
158

    
159
    public Role getRole(final String roleId) {
160
        Criteria cr = getSession().createCriteria(Role.class);
161
        cr.add(Restrictions.eq("id", roleId));
162
        return (Role)cr.list().get(0);
163
    }
164

    
165
    public void deactivateUser(String email) {
166
        User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
167
        user.setActive(false);
168
        User user_merged = (User) getSession().merge(user);
169
    }
170

    
171
    public void acceptUserRole(String email, String roleId) {
172
        User user = getUserByEmail(email);
173
        for (UserRole ur : user.getRoles()) {
174
            if (ur.getPk().getRole().getId().equals(roleId)) {
175
                ur.setApproved(true);
176
                getSession().update(user);
177
            }
178
        }
179
    }
180

    
181
    public void rejectUserRole(String email, String roleId) {
182
        User user = getUserByEmail(email);
183
        UserRole ur = null;
184
        for (UserRole u : user.getRoles()) {
185
            if (u.getPk().getRole().getId().equals(roleId))
186
                ur = u;
187
        }
188
        user.getRoles().remove(ur);
189
        getSession().update(user);
190
        getSession().delete(ur);
191
    }
192

    
193

    
194
    @SuppressWarnings("unchecked")
195
    public List<User> getUsers() {
196
        return createEntityCriteria()
197
                .addOrder(Order.asc("email"))
198
               // .setCacheable(true)
199
               // .setCacheRegion("user")
200
                .list();
201
    }
202
}
(12-12/12)