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
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
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
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 }