public String resetPassword() { if (checkResetPasswdErrors()) { return INPUT; } try { User usr = this.userService.getUserById(user.getId()); // can't find user, means the reset password link has been expired if (usr == null) { addActionError("reset.password.user.account.information.invalid"); return INPUT; } // reset password hash code is null, means the reset password link has been expired if (usr.getResetPasswdHashCode() == null) { // The reset password link has been expired addActionError(getText("reset.password.user.account.information.expired")); return INPUT; } if (usr.getResetPasswdHashCode() != null && (!usr.getResetPasswdHashCode().equals(user.getResetPasswdHashCode()))) { addActionError(getText("reset.password.user.account.information.expired")); return INPUT; } // usr.setPassword(MD5.hash(user.getPassword())); usr.setResetPasswdHashCode(null); this.userService.updateUser(usr); // sign a persistent User user = usr; // find any previous blocked ip, if find, just remove it. String ipAddress = request.getRemoteAddr(); this.blockIPService.deleteBlockIPByIp(ipAddress); // set action finished messsage addActionMessage( getText( "reset.password.new.password.reset.success.msg", new String[] {user.getDisplayName()})); // set page title and navigation label setNavBarAndTitleForResetPwd(); } catch (Exception e) { logger.error(e.getMessage()); addActionError(getText("reset.password.new.password.reset.failed")); return ERROR; } return SUCCESS; }
public String forgotPassword() { try { // security code error. just return immediately, not go further. if (isSecurityCodeError(securityCode)) { addFieldError("securityCode", getText("security.code.invalid")); return INPUT; } User foundUser = this.userService.getUserByNameEmail( user.getFirstName(), user.getLastName(), user.getEmail()); // can find the user in the database if (foundUser == null) { addActionError(getText("forgot.password.user.name.or.email.invalid")); return INPUT; } // user account is inactive if (!foundUser.isActivated()) { addActionError(getText("forgot.password.user.account.inactive")); return INPUT; } if (foundUser.getPassword().equals("ldap")) { addActionError(getText("forgot.password.cannot.reset.ldap.account")); return INPUT; } String displayName = foundUser.getDisplayName(); String userFullName = user.getFirstName() + " " + user.getLastName(); // user first name and last name is not the same first name and last name as the registered if (!StringUtils.equals(userFullName, displayName)) { addActionError(getText("forgot.password.user.name.or.email.invalid")); return INPUT; } String resetPasswdCode = generateSecurityHash(foundUser.getEmail()); foundUser.setResetPasswdHashCode(resetPasswdCode); this.userService.updateUser(foundUser); // construct a reset password url for email String resetPwdUrl = constructResetPwdUrl( foundUser.getId(), foundUser.getUidHashCode(), foundUser.getResetPasswdHashCode()); // site name String serverQName = getServerQName(); // start to send an email to user sendResetPasswdEmailToUser(serverQName, foundUser.getEmail(), resetPwdUrl); // set action finished messsage addActionMessage( getText( "forgot.password.request.for.reset.password.finished.msg", new String[] {displayName})); // set the page title and nav label setNavBarAndTitleForForgotPwd(); } catch (Exception e) { logger.error(e.getMessage()); addActionError(getText("forgot.password.request.for.reset.password.failed")); return ERROR; } return SUCCESS; }