Project

General

Profile

1
package eu.dnetlib.goldoa.service;
2

    
3

    
4
import eu.dnetlib.goldoa.domain.*;
5

    
6
import eu.dnetlib.goldoa.service.dao.UserDAO;
7
import eu.dnetlib.goldoa.service.utils.EmailUtils;
8
import org.apache.commons.codec.digest.DigestUtils;
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.stereotype.Service;
11
import org.springframework.transaction.annotation.Transactional;
12

    
13
import javax.mail.MessagingException;
14
import java.math.BigInteger;
15
import java.nio.charset.Charset;
16
import java.security.SecureRandom;
17
import java.util.ArrayList;
18
import java.util.List;
19
import java.util.UUID;
20
import java.util.concurrent.ExecutorService;
21

    
22
//import eu.dnetlib.goldoa.service.utils.EmailUtils;
23

    
24
/**
25
 * Created by antleb on 3/4/15.
26
 */
27
@Service("userManager")
28
@Transactional
29
public class UserManagerImpl implements UserManager {
30

    
31
	@Autowired
32
	private UserDAO userDAO;
33

    
34
	@Autowired
35
	private EmailUtils emailUtils;
36
	
37
	@Autowired
38
	ExecutorService executorService;
39

    
40
	private int tokenTTL = 30;
41

    
42
	public static int generateId(Affiliation affiliation) {
43
		StringBuilder sb = new StringBuilder();
44

    
45
		if (affiliation.getUsers().get(0) != null)
46
			sb.append(affiliation.getUsers().get(0).getId());
47
		if (affiliation.getOrganization() != null)
48
			sb.append(affiliation.getOrganization().getId());
49

    
50
		return DigestUtils.md5Hex(sb.toString()).hashCode();
51
	}
52

    
53
	@Override
54
	public User getById(String personId) throws PersonManagerException {
55
		return userDAO.getUserById(personId);
56
	}
57

    
58
	@Override
59
	public User getByEmail(final String email) throws PersonManagerException {
60
		return userDAO.getUserByEmail(email);
61
	}
62

    
63
	@Override
64
	// register or update
65
	public User saveUser(final User user) throws PersonManagerException {
66
		final List<UserRole> previousRoles;
67

    
68
		if (user.getId() == null) {
69
			user.setId(generateId(user));
70
			user.setSource("portal");
71

    
72
			previousRoles = new ArrayList<UserRole>();
73
		} else {
74
			previousRoles = user.getRoles();
75
		}
76
		
77
		userDAO.saveUser(user);
78

    
79
		executorService.submit(new Runnable() {
80
			@Override
81
			public void run() {
82
				/*try {
83
					List<Role> roles = new ArrayList<>();
84

    
85
					for (UserRole pRole : user.getRoles()) {
86
						if (!previousRoles.contains(pRole) && !pRole.isApproved())
87
							roles.add(pRole.getPk().getRole());
88
					}
89

    
90
					if (roles.size() > 0) {
91
						List<User> moderators = getModerators();
92

    
93
						emailUtils.sendUserRoleRequestedEmail(user, roles);
94

    
95
						for (User moderator : moderators)
96
							emailUtils.sendModeratorRoleRequestedEmail(moderator, user, roles);
97
					}
98
				} catch (MessagingException e) {
99
					e.printStackTrace();
100
				}*/
101
			}
102
		});
103

    
104
		return user;
105
	}
106

    
107
	@Override
108
	public void register(final User user) throws PersonManagerException {
109
		final String token = UUID.randomUUID().toString();
110
		
111
		try {
112
			User u = userDAO.getUserByEmail(user.getEmail());
113
			if (u != null)
114
				throw new PersonManagerException(PersonManagerException.ErrorCause.ALREADY_EXISTS);
115
		} catch (PersonManagerException e) {
116
			throw e;
117
		} catch (RuntimeException e) {
118
			e.printStackTrace();
119
			throw e;
120
		}
121

    
122
		user.setPassword(org.springframework.util.DigestUtils.md5DigestAsHex( user.getPassword().getBytes(Charset.forName("UTF-8"))));
123
		this.saveUser(user);
124
		userDAO.saveToken(user.getEmail(), token, tokenTTL);
125

    
126
		executorService.submit(new Runnable() {
127
			@Override
128
			public void run() {
129
				/*try {
130
					emailUtils.sendActivationEmail(user, token);
131
				} catch (MessagingException e) {
132
					e.printStackTrace();
133
				}*/
134
			}
135
		});
136
	}
137

    
138
	@Override
139
	public User login(String email, String password) throws PersonManagerException {
140

    
141
		if (userDAO.verifyLogin(email, password)) {
142
			User user = getByEmail(email);
143
			if (user.isActive())
144
				return user;
145
			else
146
				throw new PersonManagerException(PersonManagerException.ErrorCause.NOT_ACTIVATED);
147
		} else {
148
			throw new PersonManagerException(PersonManagerException.ErrorCause.WRONG_EMAIL_OR_PASSWORD);
149
		}
150
	}
151

    
152
	@Override
153
	public User activate(final String email, final String token) throws PersonManagerException {
154

    
155
		if (!userDAO.verifyToken(email, token))
156
			throw new PersonManagerException(PersonManagerException.ErrorCause.NOT_EXISTS);
157
		else {
158
			User user = userDAO.getUserByEmail(email);
159
			userDAO.activateUser(user.getEmail());
160
			userDAO.deleteToken(user.getEmail(), token);
161
		}
162
		return getByEmail(email);
163
	}
164

    
165
	@Override
166
	public void resetPassword(final String email) throws PersonManagerException {
167
		SecureRandom random = new SecureRandom();
168
		final String newPassword = new BigInteger(50, random).toString(32);
169

    
170
		if (!userDAO.updatePassword(newPassword, email)) {
171
			throw new PersonManagerException(PersonManagerException.ErrorCause.NOT_EXISTS);
172
		}
173
		executorService.submit(new Runnable() {
174
			@Override
175
			public void run() {
176
				User user = userDAO.getUserByEmail(email);
177

    
178
				/*try {
179
					emailUtils.sendResetPasswordEmail(user, newPassword);
180
				} catch (MessagingException e) {
181
					e.printStackTrace();
182
				}*/
183
			}
184
		});
185
	}
186

    
187
	@Override
188
	public List<Role> getRoles() {
189
		return userDAO.getRoles();
190
	}
191

    
192
	@Override
193
	public List<User> getModerators() {
194
		return userDAO.getModerators();
195
	}
196

    
197
	@Override
198
	public List<User> getAccountingOfficers() {
199
		return userDAO.getAccountingOfficers();
200
	}
201

    
202
	@Override
203
	public void activateUser(String email) {
204
		userDAO.activateUser(email);
205
	}
206

    
207
	@Override
208
	public void activateUsers(List<String> userIds) {
209
		for (String userId : userIds) {
210
			userDAO.activateUser(userId);
211
		}
212
	}
213

    
214
	@Override
215
	public void deactivateUser(String email) {
216
		userDAO.deactivateUser(email);
217
	}
218

    
219
	@Override
220
	public void deactivateUsers(List<String> emails) {
221
		for (String email : emails) {
222
			userDAO.deactivateUser(email);
223
		}
224
	}
225

    
226
	@Override
227
	public void acceptUserRole(final String email, final String roleId) {
228
		userDAO.acceptUserRole(email, roleId);
229

    
230
		executorService.submit(new Runnable() {
231
			@Override
232
			public void run() {
233
				/*User user = userDAO.getUserByEmail(email);
234
				Role role = userDAO.getRole(roleId);
235
				List<User> moderators = getModerators();
236

    
237
				try {
238
					emailUtils.sendUserRoleAcceptedEmail(user, role);
239

    
240
					for (User moderator : moderators)
241
						emailUtils.sendModeratorRoleAcceptedEmail(moderator, user, role);
242
				} catch (MessagingException e) {
243
					e.printStackTrace();
244
				}*/
245
			}
246
		});
247
	}
248

    
249
	@Override
250
	public void rejectRole(final String email, final String roleId) {
251
		userDAO.rejectUserRole(email, roleId);
252

    
253
		executorService.submit(new Runnable() {
254
			@Override
255
			public void run() {
256
				/*User user = userDAO.getUserByEmail(email);
257
				Role role = getRole(roleId);
258
				List<User> moderators = getModerators();
259

    
260
				try {
261
					emailUtils.sendUserRoleRejectedEmail(user, role);
262

    
263
					for (User moderator : moderators)
264
						emailUtils.sendModeratorRoleRejectedEmail(moderator, user, role);
265
				} catch (MessagingException e) {
266
					e.printStackTrace();
267
				}*/
268
			}
269
		});
270
	}
271

    
272
	@Override
273
	public List<User> getUsers() {
274
		return userDAO.getUsers();
275
	}
276

    
277
	@Override
278
	public String generateId(User user) {
279
		StringBuilder sb = new StringBuilder();
280

    
281
		sb.append(user.getFirstname()).append(user.getLastname()).append(user.getEmail());
282
		return "portal::" + DigestUtils.md5Hex(sb.toString());
283
	}
284

    
285
	public int getTokenTTL() {
286
		return tokenTTL;
287
	}
288

    
289
	public void setTokenTTL(int tokenTTL) {
290
		this.tokenTTL = tokenTTL;
291
	}
292

    
293
	@Override
294
	public Role getRole(String roleId){
295
		return userDAO.getRole(roleId);
296
	}
297
}
(29-29/29)