1 package compbio.controllers;
4 import java.util.regex.Pattern;
6 import org.springframework.dao.DataIntegrityViolationException;
7 import org.springframework.mail.SimpleMailMessage;
8 import org.springframework.mail.javamail.JavaMailSender;
9 import org.springframework.stereotype.Controller;
10 import org.springframework.ui.Model;
11 import org.springframework.ui.ModelMap;
12 import org.springframework.validation.BindingResult;
13 import org.springframework.validation.FieldError;
14 import org.springframework.web.bind.annotation.ModelAttribute;
15 import org.springframework.web.bind.annotation.RequestMapping;
16 import org.springframework.web.bind.annotation.RequestMethod;
17 import org.springframework.web.bind.annotation.RequestParam;
19 import compbio.proteocache.users.User;
20 import compbio.proteocache.users.UserManager;
21 import compbio.cassandra.CassandraUserManager;
24 public class UserController {
27 // JavaMailSender mailSender;
28 private final Pattern EMAIL = Pattern.compile("[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");
30 @RequestMapping(value = "/register/query", method = RequestMethod.POST)
31 public String RegisterForm(ModelMap model) {
32 User user = new User();
33 model.addAttribute(user);
37 @RequestMapping(value = "/register/edit/query", method = RequestMethod.GET)
38 public String AccountForm(ModelMap model) {
39 User user = new User();
40 user.setFullName("Sasha Sherstnev");
41 user.setEmail("admin@admin.com");
42 user.setOrganisation("UoD");
43 user.setPosition("cleaner");
44 user.setUpdateByEmail(true);
45 model.addAttribute("u", user);
49 @RequestMapping(value = "/register/do", method = RequestMethod.POST)
50 public String addUser(Model model, @ModelAttribute("user") User user, BindingResult bindingResult) {
52 if (bindingResult.hasErrors()) {
56 int fullName = user.getFullName().length();
57 if (fullName < 6 || 50 < fullName) {
58 bindingResult.addError(new FieldError("user", "fullName", "Your full name must be between 3 and 50 symbols long!"));
59 model.addAttribute("error", "wrong password");
63 if (!EMAIL.matcher(user.getEmail()).find()) {
64 bindingResult.addError(new FieldError("user", "email", "Email is empty or in a wrong form!"));
65 model.addAttribute("error", "wrong email");
69 int password = user.getPassword().length();
70 if (password < 6 || 20 < password) {
71 bindingResult.addError(new FieldError("user", "password", "The password must be at least 6 symbols long!"));
72 model.addAttribute("error", "wrong password");
77 if (null != user.getOrganisation())
78 organisation = user.getOrganisation().length();
79 if (organisation < 3 || 250 < organisation) {
80 bindingResult.addError(new FieldError("user", "organisation", "The organisation must be between 3 and 250 symbols long!"));
81 model.addAttribute("error", "wrong organisation name");
85 user.setRegistrationDate(new Date());
86 UserManager cm = new CassandraUserManager();
89 } catch (DataIntegrityViolationException e) {
90 bindingResult.addError(new FieldError("user", "email", "This email (username) is already in use!"));
91 model.addAttribute("error", "used email");
94 if (user.isUpdateByEmail()) {
95 subscribeToList(user.getEmail());
98 * Account.autoLogin(user, request, authenticationManager);
100 return "redirect:/index";
103 @RequestMapping(value = "/register/edit/do", method = RequestMethod.POST)
104 public String editUser(Model model, @ModelAttribute("user") User user, BindingResult bindingResult) {
106 if (bindingResult.hasErrors()) {
110 user.setRegistrationDate(new Date());
111 UserManager cm = new CassandraUserManager();
114 } catch (DataIntegrityViolationException e) {
115 bindingResult.addError(new FieldError("user", "email", "This email (username) is already in use!"));
118 if (user.isUpdateByEmail()) {
119 subscribeToList(user.getEmail());
122 return "redirect:/index";
125 private void subscribeToList(String email) {
126 SimpleMailMessage message = new SimpleMailMessage();
127 message.setFrom(email);
128 message.setTo("proteocache-discuss-subscribe@compbio.dundee.ac.uk");
129 message.setSubject("ProteoCache mailing list subscription");
130 message.setText("testing " + email);
131 // mailSender.send(message);