View Javadoc

1   package com.panogenesis.webapp.action;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import javax.servlet.http.HttpServletRequest;
7   import javax.servlet.http.HttpServletResponse;
8   
9   import org.apache.commons.logging.Log;
10  import org.apache.commons.logging.LogFactory;
11  
12  import com.panogenesis.Constants;
13  import com.panogenesis.model.User;
14  import com.panogenesis.service.MailEngine;
15  import com.panogenesis.service.UserManager;
16  import com.panogenesis.webapp.util.RequestUtil;
17  
18  import org.springframework.context.MessageSource;
19  import org.springframework.context.support.MessageSourceAccessor;
20  import org.springframework.mail.SimpleMailMessage;
21  import org.springframework.web.servlet.ModelAndView;
22  import org.springframework.web.servlet.mvc.Controller;
23  import org.springframework.web.servlet.view.RedirectView;
24  
25  /***
26   * Simple class to retrieve and send a password hint to users.
27   *
28   * <p>
29   * <a href="PasswordHintController.java.html"><i>View Source</i></a>
30   * </p>
31   *
32   * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
33   */
34  public class PasswordHintController implements Controller {
35      private transient final Log log = LogFactory.getLog(PasswordHintController.class);
36      private UserManager mgr = null;
37      private MessageSource messageSource = null;
38      protected MailEngine mailEngine = null;
39      protected SimpleMailMessage message = null;
40      
41      public void setUserManager(UserManager userManager) {
42          this.mgr = userManager;
43      }
44  
45      public void setMessageSource(MessageSource messageSource) {
46          this.messageSource = messageSource;
47      }
48  
49      public void setMailEngine(MailEngine mailEngine) {
50          this.mailEngine = mailEngine;
51      }
52      
53      public void setMessage(SimpleMailMessage message) {
54          this.message = message;
55      }
56      
57      public ModelAndView handleRequest(HttpServletRequest request,
58                                        HttpServletResponse response)
59      throws Exception {
60          if (log.isDebugEnabled()) {
61              log.debug("entering 'handleRequest' method...");
62          }
63  
64          String username = request.getParameter("username");
65          MessageSourceAccessor text = 
66              new MessageSourceAccessor(messageSource, request.getLocale());
67  
68          // ensure that the username has been sent
69          if (username == null) {
70              log.warn("Username not specified, notifying user that it's a required field.");
71  
72              request.setAttribute("error",
73                                   text.getMessage("errors.required",
74                                                   new Object[] {
75                                                       text.getMessage("user.username")
76                                                   }));
77  
78              return new ModelAndView("login");
79          }
80  
81          if (log.isDebugEnabled()) {
82              log.debug("Processing Password Hint...");
83          }
84  
85          // look up the user's information
86          try {
87              User user = (User) mgr.getUser(username);
88  
89              StringBuffer msg = new StringBuffer();
90              msg.append("Your password hint is: " + user.getPasswordHint());
91              msg.append("\n\nLogin at: " + RequestUtil.getAppURL(request));
92  
93              message.setTo(user.getEmail());
94              String subject = text.getMessage("webapp.prefix") + 
95                               text.getMessage("user.passwordHint");
96              message.setSubject(subject);
97              message.setText(msg.toString());
98              mailEngine.send(message);
99  
100             saveMessage(request,
101                         text.getMessage("login.passwordHint.sent",
102                                         new Object[] { username, user.getEmail() }));
103         } catch (Exception e) {
104             saveError(request,
105                       text.getMessage("login.passwordHint.error",
106                                       new Object[] { username }));
107         }
108 
109         return new ModelAndView(new RedirectView(request.getContextPath()));
110     }
111 
112     public void saveError(HttpServletRequest request, String error) {
113         List errors = (List) request.getSession().getAttribute("errors");
114         if (errors == null) {
115             errors = new ArrayList();
116         }
117         errors.add(error);
118         request.getSession().setAttribute("errors", errors);
119     }
120 
121     // this method is also in BaseForm Controller
122     public void saveMessage(HttpServletRequest request, String msg) {
123         List messages = (List) request.getSession().getAttribute("messages");
124         if (messages == null) {
125             messages = new ArrayList();
126         }
127         messages.add(msg);
128         request.getSession().setAttribute("messages", messages);
129     }
130 }