7dbfdf437d2bd18c28d1411744e276914c862225
[proteocache.git] / server / compbio / controllers / UserController.java
1 package compbio.controllers;
2
3 import java.util.Date;
4 import java.util.regex.Pattern;
5
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;
18
19 import compbio.proteocache.users.User;
20 import compbio.proteocache.users.UserManager;
21 import compbio.cassandra.CassandraUserManager;
22
23 @Controller
24 public class UserController {
25
26         // @Inject
27         // JavaMailSender mailSender;
28         private final Pattern EMAIL = Pattern.compile("[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");
29
30         @RequestMapping(value = "/register/query", method = RequestMethod.POST)
31         public String RegisterForm(ModelMap model) {
32                 User user = new User();
33                 model.addAttribute(user);
34                 return "Register";
35         }
36
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);
46                 return "Edit";
47         }
48
49         @RequestMapping(value = "/register/do", method = RequestMethod.POST)
50         public String addUser(Model model, @ModelAttribute("user") User user, BindingResult bindingResult) {
51
52                 if (bindingResult.hasErrors()) {
53                         return "Register";
54                 }
55
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");
60                         return "Register";
61                 }
62
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");
66                         return "Register";
67                 }
68
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");
73                         return "Register";
74                 }
75
76                 int organisation = 0;
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");
82                         return "Register";
83                 }
84
85                 user.setRegistrationDate(new Date());
86                 UserManager cm = new CassandraUserManager();
87                 try {
88                         cm.addUser(user);
89                 } catch (DataIntegrityViolationException e) {
90                         bindingResult.addError(new FieldError("user", "email", "This email (username) is already in use!"));
91                         model.addAttribute("error", "used email");
92                         return "Register";
93                 }
94                 if (user.isUpdateByEmail()) {
95                         subscribeToList(user.getEmail());
96                 }
97                 /*
98                  * Account.autoLogin(user, request, authenticationManager);
99                  */
100                 return "redirect:/index";
101         }
102
103         @RequestMapping(value = "/register/edit/do", method = RequestMethod.POST)
104         public String editUser(Model model, @ModelAttribute("user") User user, BindingResult bindingResult) {
105
106                 if (bindingResult.hasErrors()) {
107                         return "Register";
108                 }
109
110                 user.setRegistrationDate(new Date());
111                 UserManager cm = new CassandraUserManager();
112                 try {
113                         cm.addUser(user);
114                 } catch (DataIntegrityViolationException e) {
115                         bindingResult.addError(new FieldError("user", "email", "This email (username) is already in use!"));
116                         return "Register";
117                 }
118                 if (user.isUpdateByEmail()) {
119                         subscribeToList(user.getEmail());
120                 }
121
122                 return "redirect:/index";
123         }
124
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);
132         }
133
134 }