/** * Here we will have the initial credentials for a user be created * * @param user */ @Override public void createPassword(UserDTO user) { ResetPasswordCodeDAS resetCodeDAS = new ResetPasswordCodeDAS(); ResetPasswordCodeDTO resetCode = new ResetPasswordCodeDTO(); resetCode.setUser(user); resetCode.setDateCreated(new Date()); resetCode.setToken(RandomStringUtils.random(32, true, true)); resetCodeDAS.save(resetCode); try { new UserBL() .sendCredentials( user.getCompany().getId(), user.getId(), 1, generateLink(resetCode.getToken())); } catch (SessionInternalError e) { LOG.error(e.getMessage(), e); throw new SessionInternalError("Exception while sending notification : " + e.getMessage()); } catch (NotificationNotFoundException e) { LOG.error(e.getMessage(), e); throw new SessionInternalError("createCredentials.notification.not.found"); } }
/** * This method sends an email to the given user with the link to reset his password * * @param user the user */ @Override public void resetPassword(UserDTO user) { ResetPasswordCodeDAS resetCodeDAS = new ResetPasswordCodeDAS(); // find previous passwordCode ResetPasswordCodeDTO resetCode = resetCodeDAS.findByUser(user); if (resetCode == null) { resetCode = new ResetPasswordCodeDTO(); resetCode.setUser(user); resetCode.setDateCreated(new Date()); resetCode.setToken(RandomStringUtils.random(32, true, true)); resetCodeDAS.save(resetCode); resetCodeDAS.flush(); } else { DateTime dateResetCode = new DateTime(resetCode.getDateCreated()); DateTime today = DateTime.now(); Duration duration = new Duration(dateResetCode, today); Long minutesDifference = duration.getStandardMinutes(); Long expirationMinutes = PreferenceBL.getPreferenceValueAsIntegerOrZero( user.getEntity().getId(), CommonConstants.PREFERENCE_FORGOT_PASSWORD_EXPIRATION) .longValue() * 60; if (minutesDifference > expirationMinutes) { resetCodeDAS.delete(resetCode); resetCodeDAS.flush(); resetCode = new ResetPasswordCodeDTO(); resetCode.setUser(user); resetCode.setDateCreated(new Date()); resetCode.setToken(RandomStringUtils.random(32, true, true)); resetCodeDAS.save(resetCode); } } try { new UserBL() .sendLostPassword( user.getCompany().getId(), user.getId(), 1, generateLink(resetCode.getToken())); } catch (SessionInternalError e) { LOG.error("Exception while sending notification : " + e.getMessage()); throw new SessionInternalError("forgotPassword.notification.not.found"); } catch (NotificationNotFoundException e) { e.printStackTrace(); } }