View Javadoc

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) { // should only happen for test case
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          // Set the default user role on this new user
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              // redisplay the unencrypted passwords
76              user.setPassword(user.getConfirmPassword());
77              return showForm(request, response, errors);
78          }
79  
80          // Set cookies for auto-magical login ;-)
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          // Send user an e-mail
90          if (log.isDebugEnabled()) {
91              log.debug("Sending user '" + user.getUsername()
92                      + "' an account information e-mail");
93          }
94  
95          // Send an account information e-mail
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 }