59 UserModel user = context.getUser();
60 AuthenticationSessionModel authenticationSession = context.getAuthenticationSession();
70 String actionTokenUserId = authenticationSession.getAuthNote(DefaultActionTokenKey.ACTION_TOKEN_USER_ID);
71 if (actionTokenUserId != null && Objects.equals(user.getId(), actionTokenUserId)) {
72 logger.debugf(
"Forget-password triggered when reauthenticating user after authentication via action token. Skipping " +
PROVIDER_ID +
" screen and using user '%s' ", user.getUsername());
78 EventBuilder
event = context.getEvent();
80 if (user.getEmail() == null || user.getEmail().trim().length() == 0) {
82 .detail(Details.USERNAME, username)
83 .error(Errors.INVALID_EMAIL);
89 int validityInSecs = context.getRealm().getActionTokenGeneratedByUserLifespan(ResetCredentialsActionToken.TOKEN_TYPE);
90 int absoluteExpirationInSecs = Time.currentTime() + validityInSecs;
93 String authSessionEncodedId = AuthenticationSessionCompoundId.fromAuthSession(authenticationSession).getEncodedId();
94 ResetCredentialsActionToken token =
new ResetCredentialsActionToken(user.getId(), absoluteExpirationInSecs, authSessionEncodedId, authenticationSession.getClient().getClientId());
95 String link = UriBuilder
96 .fromUri(context.getActionTokenUrl(token.serialize(context.getSession(), context.getRealm(), context.getUriInfo())))
99 long expirationInMinutes = TimeUnit.SECONDS.toMinutes(validityInSecs);
101 context.getSession().getProvider(EmailTemplateProvider.class).setRealm(context.getRealm()).setUser(user).setAuthenticationSession(authenticationSession).sendPasswordReset(link, expirationInMinutes);
103 event.clone().event(EventType.SEND_RESET_PASSWORD)
105 .detail(Details.USERNAME, username)
106 .detail(Details.EMAIL, user.getEmail()).detail(Details.CODE_ID, authenticationSession.getParentSession().getId()).success();
108 }
catch (EmailException e) {
109 event.clone().event(EventType.SEND_RESET_PASSWORD)
110 .detail(Details.USERNAME, username)
112 .error(Errors.EMAIL_SEND_FAILED);
114 Response challenge = context.form()
116 .createErrorPage(Response.Status.INTERNAL_SERVER_ERROR);
117 context.failure(AuthenticationFlowError.INTERNAL_ERROR, challenge);
static final String PROVIDER_ID
Definition: ResetCredentialEmail.java:55
static final String EMAIL_SENT
Definition: Messages.java:91
Definition: Messages.java:22
void failedToSendPwdResetEmail(@Cause EmailException e)
Definition: ServicesLogger.java:48
static final Logger logger
Definition: ResetCredentialEmail.java:53
static final String ATTEMPTED_USERNAME
Definition: AbstractUsernameFormAuthenticator.java:52
ServicesLogger LOGGER
Definition: ServicesLogger.java:50
static final String EMAIL_SENT_ERROR
Definition: Messages.java:93
Definition: AbstractUsernameFormAuthenticator.java:47