1 package com.panogenesis.webapp.action;
2
3 import java.util.Locale;
4
5 import javax.servlet.http.HttpServletRequest;
6 import javax.servlet.http.HttpServletResponse;
7
8 import com.panogenesis.Constants;
9 import com.panogenesis.model.Role;
10 import com.panogenesis.model.User;
11 import com.panogenesis.service.RoleManager;
12 import com.panogenesis.service.UserExistsException;
13 import com.panogenesis.util.StringUtil;
14 import com.panogenesis.webapp.util.RequestUtil;
15 import org.springframework.validation.BindException;
16 import org.springframework.web.servlet.ModelAndView;
17 import org.springframework.web.servlet.view.RedirectView;
18
19
20 /***
21 * Controller to signup new users.
22 *
23 * <p>
24 * <a href="SignupController.java.html"><i>View Source</i></a>
25 * </p>
26 *
27 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
28 */
29 public class SignupController extends BaseFormController {
30 private RoleManager roleManager;
31
32 /***
33 * @param roleManager The roleManager to set.
34 */
35 public void setRoleManager(RoleManager roleManager) {
36 this.roleManager = roleManager;
37 }
38
39 public ModelAndView onSubmit(HttpServletRequest request,
40 HttpServletResponse response, Object command,
41 BindException errors)
42 throws Exception {
43 if (log.isDebugEnabled()) {
44 log.debug("entering 'onSubmit' method...");
45 }
46
47 User user = (User) command;
48 Locale locale = request.getLocale();
49
50 String algorithm =
51 (String) getConfiguration().get(Constants.ENC_ALGORITHM);
52
53 if (algorithm == null) {
54 if (log.isDebugEnabled()) {
55 log.debug("assuming testcase, setting algorithm to 'SHA'");
56 }
57 algorithm = "SHA";
58 }
59
60 user.setPassword(StringUtil.encodePassword(user.getPassword(), algorithm));
61
62
63 user.addRole(roleManager.getRole(Constants.USER_ROLE));
64
65 try {
66 mgr.saveUser(user);
67 } catch (UserExistsException e) {
68 log.warn(e.getMessage());
69
70 errors.rejectValue("username", "errors.existing.user",
71 new Object[] {
72 user.getUsername(), user.getEmail()
73 }, "duplicate user");
74
75
76 user.setPassword(user.getConfirmPassword());
77 return showForm(request, response, errors);
78 }
79
80
81 String loginCookie = mgr.createLoginCookie(user.getUsername());
82 RequestUtil.setCookie(response, Constants.LOGIN_COOKIE, loginCookie,
83 request.getContextPath());
84
85 saveMessage(request, getText("user.registered", user.getUsername(), locale));
86
87 request.getSession().setAttribute(Constants.REGISTERED, Boolean.TRUE);
88
89
90 if (log.isDebugEnabled()) {
91 log.debug("Sending user '" + user.getUsername()
92 + "' an account information e-mail");
93 }
94
95
96 message.setSubject(getText("signup.email.subject", locale));
97 sendUserMessage(user, getText("signup.email.message", locale),
98 RequestUtil.getAppURL(request));
99
100 return new ModelAndView(new RedirectView(getSuccessView()));
101 }
102
103 protected Object formBackingObject(HttpServletRequest request)
104 throws Exception {
105 return new User();
106 }
107 }