public String sendPasswordResetLinkToMail()

in study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/LoginServiceImpl.java [382:580]


  public String sendPasswordResetLinkToMail(
      HttpServletRequest request,
      String email,
      String oldEmail,
      String type,
      AuditLogEventRequest auditRequest) {
    logger.entry("begin sendPasswordResetLinkToMail");
    Map<String, String> propMap = FdahpStudyDesignerUtil.getAppProperties();
    String passwordResetToken = null;
    String message = propMap.get("user.forgot.error.msg");
    boolean flag = false;
    UserBO userdetails = null;
    Map<String, String> keyValueForSubject = null;
    Map<String, String> keyValueForSubject2 = null;
    String dynamicContent = "";
    String anotherdynamicContent = "";
    String acceptLinkMail = "";
    int passwordResetLinkExpirationInDay =
        Integer.parseInt(propMap.get("password.resetLink.expiration.in.hour"));
    String customerCareMail = "";
    String contact = "";
    final Integer MAX_ATTEMPTS = Integer.valueOf(propMap.get("max.login.attempts"));
    final Integer USER_LOCK_DURATION =
        Integer.valueOf(propMap.get("user.lock.duration.in.minutes"));
    final String lockMsg = propMap.get("user.lock.msg");
    try {
      passwordResetToken = RandomStringUtils.randomAlphanumeric(10);
      if (!StringUtils.isEmpty(passwordResetToken)) {
        userdetails = loginDAO.getValidUserByEmail(email);
        if ("".equals(type) && userdetails != null && userdetails.isEnabled()) {
          auditRequest.setUserAccessLevel(
              StringUtils.defaultIfBlank(userdetails.getAccessLevel(), ""));
          auditRequest.setUserId(String.valueOf(userdetails.getUserId()));
          auditLogEventHelper.logEvent(PASSWORD_HELP_REQUESTED, auditRequest);
        }
        if ("".equals(type) && userdetails.getEmailChanged().equals(1)) {
          userdetails = null;
        }
        UserAttemptsBo userAttempts = loginDAO.getUserAttempts(email);
        // Restricting the user to login for specified minutes if the
        // user has max fails attempts
        if ((type != null)
            && "".equals(type)
            && (userAttempts != null)
            && (userAttempts.getAttempts() >= MAX_ATTEMPTS)
            && new SimpleDateFormat(FdahpStudyDesignerConstants.DB_SDF_DATE_TIME)
                .parse(
                    FdahpStudyDesignerUtil.addMinutes(
                        userAttempts.getLastModified(), USER_LOCK_DURATION))
                .after(
                    new SimpleDateFormat(FdahpStudyDesignerConstants.DB_SDF_DATE_TIME)
                        .parse(FdahpStudyDesignerUtil.getCurrentDateTime()))) {
          message = lockMsg;
          flag = false;
        } else {
          flag = true;
        }

        if (flag) {
          flag = false;
          if (null != userdetails) {
            userdetails.setSecurityToken(passwordResetToken);
            userdetails.setTokenUsed(false);
            userdetails.setTokenExpiryDate(
                FdahpStudyDesignerUtil.addHours(
                    FdahpStudyDesignerUtil.getCurrentDateTime(), passwordResetLinkExpirationInDay));

            if (!"USER_UPDATE".equals(type)) {
              message = loginDAO.updateUser(userdetails);
            } else {
              message = FdahpStudyDesignerConstants.SUCCESS;
            }
            if (FdahpStudyDesignerConstants.SUCCESS.equals(message)) {
              if ("USER_EMAIL_UPDATE".equalsIgnoreCase(type)) {
                acceptLinkMail = propMap.get("emailChangeLink").trim();
              } else {
                acceptLinkMail = propMap.get("acceptLinkMail").trim();
              }
              keyValueForSubject = new HashMap<String, String>();
              keyValueForSubject2 = new HashMap<String, String>();
              keyValueForSubject.put("$firstName", userdetails.getFirstName());
              keyValueForSubject2.put("$firstName", userdetails.getFirstName());
              keyValueForSubject.put("$lastName", userdetails.getLastName());
              keyValueForSubject.put(
                  "$passwordResetLinkExpirationInDay",
                  String.valueOf(passwordResetLinkExpirationInDay));
              keyValueForSubject2.put(
                  "$passwordResetLinkExpirationInDay",
                  String.valueOf(passwordResetLinkExpirationInDay));
              keyValueForSubject.put("$passwordResetLink", acceptLinkMail + passwordResetToken);

              customerCareMail = propMap.get("email.address.customer.service");
              keyValueForSubject.put("$customerCareMail", customerCareMail);
              keyValueForSubject2.put("$customerCareMail", customerCareMail);
              keyValueForSubject.put("$newUpdatedMail", userdetails.getUserEmail());
              keyValueForSubject2.put("$newUpdatedMail", userdetails.getUserEmail());
              keyValueForSubject.put("$oldMail", oldEmail);
              contact = propMap.get("phone.number.to");
              keyValueForSubject.put("$contact", contact);
              keyValueForSubject.put("$orgName", propMap.get("orgName"));
              keyValueForSubject2.put("$orgName", propMap.get("orgName"));
              if ("USER".equals(type) && !userdetails.isEnabled()) {
                dynamicContent =
                    FdahpStudyDesignerUtil.genarateEmailContent(
                        "userRegistrationContent", keyValueForSubject);
                flag =
                    emailNotification.sendEmailNotification(
                        "userRegistrationSubject", dynamicContent, email, null, null);

                Map<String, String> values = new HashMap<>();
                values.put(StudyBuilderConstants.USER_ID, String.valueOf(userdetails.getUserId()));
                if (!flag) {
                  auditLogEventHelper.logEvent(
                      NEW_USER_INVITATION_EMAIL_FAILED, auditRequest, values);
                }

              } else if ("USER_UPDATE".equals(type) && userdetails.isEnabled()) {
                dynamicContent =
                    FdahpStudyDesignerUtil.genarateEmailContent(
                        "mailForUserUpdateContent", keyValueForSubject2);
                flag =
                    emailNotification.sendEmailNotification(
                        "mailForUserUpdateSubject", dynamicContent, email, null, null);
              } else if ("USER_EMAIL_UPDATE".equals(type)) {
                // Email to old email address
                dynamicContent =
                    FdahpStudyDesignerUtil.genarateEmailContent(
                        "mailToOldEmailForUserEmailUpdateContent", keyValueForSubject2);
                flag =
                    emailNotification.sendEmailNotification(
                        "mailToOldEmailForUserEmailUpdateSubject",
                        dynamicContent,
                        oldEmail,
                        null,
                        null);
                // Email to new email address
                anotherdynamicContent =
                    FdahpStudyDesignerUtil.genarateEmailContent(
                        "mailToNewEmailForUserEmailUpdateContent", keyValueForSubject);
                flag =
                    emailNotification.sendEmailNotification(
                        "mailToNewEmailForUserEmailUpdateSubject",
                        anotherdynamicContent,
                        email,
                        null,
                        null);
              } else if ("enforcePasswordChange".equals(type)) {
                dynamicContent =
                    FdahpStudyDesignerUtil.genarateEmailContent(
                        "mailForEnforcePasswordChangeContent", keyValueForSubject);
                flag =
                    emailNotification.sendEmailNotification(
                        "mailForEnforcePasswordChangeSubject", dynamicContent, email, null, null);
              } else if ("ReactivateMailAfterEnforcePassChange".equals(type)
                  && userdetails.isEnabled()) {
                dynamicContent =
                    FdahpStudyDesignerUtil.genarateEmailContent(
                        "mailForReactivatingUserAfterEnforcePassChangeContent", keyValueForSubject);
                flag =
                    emailNotification.sendEmailNotification(
                        "mailForReactivatingUserAfterEnforcePassChangeSubject",
                        dynamicContent,
                        email,
                        null,
                        null);
              } else if ("".equals(type) && userdetails.isEnabled()) {
                dynamicContent =
                    FdahpStudyDesignerUtil.genarateEmailContent(
                        "passwordResetLinkContent", keyValueForSubject);
                flag =
                    emailNotification.sendEmailNotification(
                        "passwordResetLinkSubject", dynamicContent, email, null, null);
                StudyBuilderAuditEvent auditLogEvent =
                    flag ? PASSWORD_HELP_EMAIL_SENT : PASSWORD_HELP_EMAIL_FAILED;
                auditLogEventHelper.logEvent(auditLogEvent, auditRequest);
              } else if ("USER_UPDATE".equals(type) && !userdetails.isEnabled()) {
                flag = true;
              }

              message =
                  flag ? FdahpStudyDesignerConstants.SUCCESS : FdahpStudyDesignerConstants.FAILURE;

              if ("".equals(type) && (!userdetails.isEnabled())) {
                message = propMap.get("user.inactive.msg");
              }
              if ("".equals(type) && StringUtils.isEmpty(userdetails.getUserPassword())) {
                message = propMap.get("user.not.found.msg");
              }
            }
          }
        }
      }
    } catch (Exception e) {
      logger.error("LoginServiceImpl - sendPasswordResetLinkToMail - ERROR ", e);
      auditLogEventHelper.logEvent(PASSWORD_HELP_EMAIL_FAILED, auditRequest);
    }
    logger.exit("sendPasswordResetLinkToMail - Ends");
    return message;
  }