package org.appfuse.webapp.pages; import org.apache.tapestry5.EventContext; import org.apache.tapestry5.alerts.AlertManager; import org.apache.tapestry5.alerts.Duration; import org.apache.tapestry5.alerts.Severity; import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.appfuse.model.User; import org.appfuse.service.UserManager; import org.appfuse.webapp.services.EmailService; import org.appfuse.webapp.util.RequestUtil; import org.slf4j.Logger; import org.springframework.mail.MailException; import org.springframework.security.core.userdetails.UsernameNotFoundException; import javax.servlet.http.HttpServletRequest; /** * Managed Bean to send password hints to registered users. * * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a> * @author Serge Eby * @version $Id: PasswordHint.java 5 2008-08-30 09:59:21Z serge.eby $ */ public class PasswordHint { @Inject private Logger logger; @Inject private Messages messages; @Inject private UserManager userManager; @Inject private EmailService emailService; @Inject private AlertManager alertManager; @Inject private HttpServletRequest request; private String username; Object onActivate(EventContext ctx) { // ensure that the username has been set if (ctx == null || ctx.getCount() == 0) { logger.warn("Username not specified, notifying user that it's a required field."); alertManager.alert(Duration.TRANSIENT, Severity.ERROR, messages.format("errors.required", messages.get("user.username"))); return Login.class; } // Expect username is the first item in the context int userIdx = 0; this.username = ctx.get(String.class, userIdx).trim(); logger.debug("Processing Password Hint for username: " + username); // look up the user's information try { User user = userManager.getUserByUsername(username); StringBuilder msg = new StringBuilder(); msg.append("Your password hint is: ").append(user.getPasswordHint()); String subject = '[' + messages.get("webapp.name") + "] " + messages.get("user.passwordHint"); emailService.send(user, subject, msg.toString(), RequestUtil.getAppURL(request), true); alertManager.alert(Duration.TRANSIENT, Severity.SUCCESS, messages.format("login.passwordHint.sent", username, user.getEmail())); } catch (UsernameNotFoundException e) { logger.warn(e.getMessage()); // If exception is expected do not rethrow alertManager.error(messages.format("login.passwordHint.error", username)); } catch (MailException me) { alertManager.error(me.getCause().getLocalizedMessage()); } return Login.class; } }