Class ResetPasswordHandler
- java.lang.Object
-
- com.jalios.jcms.context.JcmsContext
-
- com.jalios.jcms.context.JcmsJspContext
-
- com.jalios.jcms.handler.JcmsFormHandler
-
- com.jalios.jcms.handler.ResetPasswordHandler
-
- All Implemented Interfaces:
JcmsConstants
,JaliosConstants
public class ResetPasswordHandler extends JcmsFormHandler
Handle lost password request from end user.Also provides API to obtain valid password reset link for user :
getPasswordResetUrl(HttpServletRequest, Member)
- Since:
- jcms-7.1
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ResetPasswordHandler.ResetPasswordSecurityAlertBuilder
Alert builder to send reset password request to a user.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
EXPIRATION_DURATION_PROP
Property key that defines the password reset link validity duration.-
Fields inherited from class com.jalios.jcms.handler.JcmsFormHandler
contextMap, csrfValidationEnabled, editFieldSet, formStep, noRedirect, noSendRedirect, op, opFinish, opNext, opPrevious, popupEdition, redirect, redirectOnClosePopup, workspaceForced
-
Fields inherited from class com.jalios.jcms.context.JcmsJspContext
AJAX_REQUEST_ATTRIBUTES, BODY_HEADER, CSS_FOOTER, CSS_HEADER, cssboMap, cssfoMap, CUSTOM_HEADER, editIcon, HTTPEQUIV_HEADER, httpequivMap, HTTPNAME_HEADER, httpnameMap, initEditIcon, JAVASCRIPT_CODE_SET_ATTRIBUTE, JAVASCRIPT_SET_ATTRIBUTE, jsboSet, jsfoSet, out, pageContext, SHOW_EDIT_ICON, STYLE_HEADER
-
Fields inherited from class com.jalios.jcms.context.JcmsContext
browser, caddy, channel, inFO, initDone, initWorkspace, isAdmin, isAjaxRequest, isDBMember, isDebug, isDebugTemplatePath, isLogged, loggedMember, request, response, userCountry, userLang, userLocale, userZoneId, workspace
-
Fields inherited from interface com.jalios.util.JaliosConstants
CRLF, MILLIS_IN_ONE_DAY, MILLIS_IN_ONE_HOUR, MILLIS_IN_ONE_MINUTE, MILLIS_IN_ONE_MONTH, MILLIS_IN_ONE_SECOND, MILLIS_IN_ONE_WEEK, MILLIS_IN_ONE_YEAR
-
Fields inherited from interface com.jalios.jcms.JcmsConstants
ADATE_SEARCH, ADMIN_NOTES_PROP, ADVANCED_TAB, AJAX_MODE_ATTR, ARCHIVES_DIR, ASCII_WIDTH, CATEGORY_TAB, CDATE_SEARCH, CLASS_PROPERTY, COMMON_ALARM, CONTENT_TAB, COOKIE_MAX_AGE, COUNTRY_SPRITE, CS_TYPOLOGY_ROOT_CAT_VID, CTRL_TOPIC_INTERNAL, CTRL_TOPIC_REF, CTRL_TOPIC_VALUE, CTRL_TOPIC_WRITE, CUSTOM_PROP, DATA_DIRECTORY, DEFAULT_PHOTO_PROP, DOCCHOOSER_HEIGHT, DOCCHOOSER_WIDTH, DOCS_DIR, EDATE_SEARCH, EMAIL_REGEXP, ERROR_MSG, FORBIDDEN_FILE_ACCESS, FORBIDDEN_REDIRECT, FORCE_REDIRECT, GLYPH_ICON_PREFIX, ICON_ARCHIVE, ICON_ICON_PREFIX, ICON_LOCK, ICON_LOCK_STRONG, ICON_PREFIX_PROP, ICON_WARN, ICON_WH_BOOK_CLOSED, ICON_WH_BOOK_OPEN, INFORMATION_MSG, IS_IN_FRONT_OFFICE, JALIOS_JUNIT_PROP, JCMS_CADDY, JCMS_MSG_LIST, JCMS_TOASTR_COLLECTION, JSYNC_DOWNLOAD_DIR, JSYNC_SYNC_ALARM, LANG_SPRITE, LOG_FILE, LOG_TOPIC_SECURITY, LOGGER_PROP, LOGGER_XMLPROP, MBR_PHOTO_DIR, MDATE_SEARCH, MONITOR_XML, OP_CREATE, OP_CREATE_STR, OP_DEEP_COPY, OP_DEEP_COPY_STR, OP_DEEP_DELETE, OP_DEEP_DELETE_STR, OP_DELETE, OP_DELETE_STR, OP_MERGE, OP_MERGE_STR, OP_UPDATE, OP_UPDATE_STR, ORGANIZATION_ROOT_GROUP_PROP, PDATE_SEARCH, PHOTO_DIR, PHOTO_ICON, PHOTO_ICON_HEIGHT, PHOTO_ICON_PROP_PREFIX, PHOTO_ICON_WIDTH, PHOTO_LARGE, PHOTO_LARGE_HEIGHT, PHOTO_LARGE_PROP_PREFIX, PHOTO_LARGE_WIDTH, PHOTO_MINI, PHOTO_MINI_HEIGHT, PHOTO_MINI_PROP_PREFIX, PHOTO_MINI_WIDTH, PHOTO_NORMAL, PHOTO_NORMAL_HEIGHT, PHOTO_NORMAL_PROP_PREFIX, PHOTO_NORMAL_WIDTH, PHOTO_SMALL, PHOTO_SMALL_HEIGHT, PHOTO_SMALL_PROP_PREFIX, PHOTO_SMALL_WIDTH, PHOTO_TINY, PHOTO_TINY_HEIGHT, PHOTO_TINY_PROP_PREFIX, PHOTO_TINY_WIDTH, PREVIOUS_TAB, PRINT_VIEW, PRIVATE_FILE_ACCESS, PUBLIC_FILE_ACCESS, RAW_CONTENT_ICON_PREFIX, READ_RIGHT_TAB, SDATE_SEARCH, SEARCHENGINE_ALARM, SECURITY_LOG_FILE, SESSION_AUTHORIZED_FILENAMES_SET, SPRITE_ICON_PREFIX, STATS_REPORT_DIR, STATUS_PROP, STORE_DIR, STORE_XML, SUCCESS_MSG, SVG_ICON_PREFIX, SVGINLINE_ICON_PREFIX, TEMPLATE_TAB, THUMBNAIL_LARGE_HEIGHT, THUMBNAIL_LARGE_WIDTH, THUMBNAIL_SMALL_HEIGHT, THUMBNAIL_SMALL_WIDTH, TTCARD_MEDIA_HEIGHT, TTCARD_MEDIA_WIDTH, TYPES_ICON_ALT_PROP, TYPES_ICON_SUFFIX_PROP, TYPES_ICON_TITLE_PROP, TYPES_PREFIX_PROP, TYPES_THUMB_SUFFIX_PROP, UDATE_SEARCH, UPDATE_RIGHT_TAB, UPLOAD_DIR, UPLOAD_PERMISSION_COUNT_PROP_PREFIX, UPLOAD_PERMISSION_SIZE_PROP_PREFIX, URL_REGEXP, VID_LOGGED_MEMBER, WARNING_MSG, WEBAPP_PROP, WFEXPRESS_ALARM, WFREMINDER_ALARM, WORKFLOW_TAB, WORKFLOW_XML
-
-
Constructor Summary
Constructors Constructor Description ResetPasswordHandler()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static java.lang.String
generatePasswordResetToken(Member member, long tokenDuration)
Compute and generate a password reset token suitable for a password reset modificationjava.lang.String
getEmail()
The email as entered by the user.static long
getExpirationDuration()
Member
getMember()
Retrieve the member for which a password reset is performed.static Member
getMemberFromPasswordResetToken(java.lang.String token)
Validate a password reset token and retrieve the corresponding member.java.lang.String
getPasswordResetToken()
Retrieve the internal security token used to validate the password reset.static java.lang.String
getPasswordResetUrl(javax.servlet.http.HttpServletRequest request, Member mbr)
Retrieve an absolute URL suitable for the specified member to change his password.static java.lang.String
getPasswordResetUrl(javax.servlet.http.HttpServletRequest request, Member mbr, long tokenDuration)
Retrieve an absolute URL suitable for the specified member to change his password.static java.lang.String
getPasswordResetUrl(javax.servlet.http.HttpServletRequest request, Member mbr, long tokenDuration, boolean selfRequest)
Retrieve an absolute URL suitable for the specified member to change his password.boolean
isResetFormDisplayed()
Check if the "reset password" form should be displayed.boolean
isResetRequestFormDisplayed()
Check if the "request reset password" form should be displayed.boolean
isSelfResetRequest()
Check the origin of this password reset requestboolean
performRequestReset()
Perform the password reset request for the specified emailboolean
performReset()
Perform the password reset request for the specified emailboolean
processAction()
Method to be implemented to check/validate action to be performed and process them.void
setEmail(java.lang.String email)
The the email for which a password reset request will be sentvoid
setOpRequestReset(java.lang.String value)
Set this parameter to trigger a password request reset.void
setOpReset(java.lang.String value)
Set this parameter to trigger a password reset.void
setPassword1(java.lang.String password)
Set the new password to usevoid
setPassword2(java.lang.String password)
Set the new password confirmationvoid
setPasswordResetToken(java.lang.String token)
Set the internal security token validating the password reset.void
setSelfResetRequest(boolean isSelfResetRequest)
Set a purely informative field for the reset process in progress.boolean
validateRequestReset()
Check all information required for a password reset request have been providedboolean
validateReset()
Check all information required for a password reset have been provided-
Methods inherited from class com.jalios.jcms.handler.JcmsFormHandler
afterValidation, canStartProcess, checkMissingField, getAvailableMainLanguage, getBackgroundProcess, getClosePopupUrl, getControllerContext, getEditFieldSet, getFormStep, getFormStepCount, getFormStepFinishLabel, getFormStepHiddenFields, getFormStepLabels, getFormStepPrefixProp, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenField, getHiddenFieldML, getMainLangValue, getMainLangValueArray, getMLMap, getMLMapArray, getModalRedirect, getMonolingualValue, getMonolingualValueArray, getMultilingualMainValue, getMultilingualMainValueArray, getMultilingualMLMap, getMultilingualMLMapArray, getRedirect, getRedirectOnClosePopup, getWorkspace, init, isFieldEdition, isFieldMissing, isFormStepClickable, isPartialFieldEdition, isPopupEdition, isWorkspaceForced, mapStringArrayToMapStringList, mapStringListToMapStringArray, mustSendForbiddenOnCSRF, performFinish, performNext, performPrevious, processStatus, sanitize, sanitize, sendRedirect, sendRedirect, setEditField, setFormStep, setNoRedirect, setNoSendRedirect, setOpFinish, setOpNext, setOpPrevious, setPopupEdition, setRedirect, setRedirectOnClosePopup, setWorkspace, setWs, showCancelButton, showFinishButton, showNextButton, showPreviousButton, startProcess, updateUploadedField, updateUploadedFields, updateUploadedFields, validate, validateCSRF, validateFinish, validateNext, validatePrevious
-
Methods inherited from class com.jalios.jcms.context.JcmsJspContext
addAvoidanceLink, addBodyAttributes, addCSSHeader, addCSSHeader, addCSSHeader, addCSSHeader, addCustomHeader, addHandlebarTemplate, addHttpEquivHeader, addHttpNameHeader, addJavaScript, addJavaScript, addJavaScript, addJavaScriptCode, addPrefetchHeader, addStyleHeader, addStyleHeader, addWebAssets, checkAccess, checkAccess, checkCSRF, debugDisplayContext, disablePacker, forceEditIcon, forceUpdate, getAjaxRequestAttribute, getAjaxRequestId, getAllHeadersDiffMap, getAllHeadersMap, getAvoidanceLinks, getBackOfficeCSSHeader, getBackOfficeJavaScriptSet, getBodyAttributes, getContentForm, getCSSHeaders, getCtxCategories, getCurrentCategory, getCustomHeaders, getDocType, getFinalCSSFooterMap, getFinalCSSMap, getFinalJavaScriptSet, getFrontOfficeCSSHeader, getFrontOfficeJavaScriptSet, getHandlebarTemplates, getHttpEquivHeaders, getHttpNameHeaders, getJavaScriptCodeSet, getJavaScriptSet, getJSONBridge, getPageContext, getPageTitle, getPageZone, getPortal, getPortalCategory, getPortlet, getPublication, getStyleHeaders, getTemplateUsage, internalSetupEmptyHeader, isEditIcon, isEditIcon, isEditIconForPublish, isEditIconForPublish, isPrintView, registerDisplayContext, removeAjaxRequestAttribute, setAjaxRequestAttribute, setAjaxRequestId, setAllHeadersDiffMap, setDocType, setEditIcon, setPageContext, setPageTitle, setPageZone, setShowEditIcon, setTemplateUsage, showEditIcon, showEditIcon, showEditIcon, workaroundBrowserBaseHrefBug
-
Methods inherited from class com.jalios.jcms.context.JcmsContext
addCookie, addMsg, addMsg, addMsgSession, addMsgSession, addToastr, addToastr, addToastrSession, addToastrSession, applySelector, copyMsgListToMsgSessionList, forceWorkspaceUpdate, getBaseUrl, getBrowser, getCaddy, getContextPath, getErrorMsg, getErrorMsgList, getErrorMsgSession, getErrorMsgSessionList, getInfoMsg, getInfoMsgList, getInfoMsgSession, getInfoMsgSessionList, getLoggedMember, getMsgList, getMsgSessionList, getRequest, getResponse, getSession, getSuccessMsg, getSuccessMsgList, getSuccessMsgSession, getSuccessMsgSessionList, getToastrCollection, getToastrSessionCollection, getUploadedFile, getUploadedFileList, getUploadedFiles, getUploadedFiles, getUrlWithCommonUpdatedParams, getUserCountry, getUserLang, getUserLocale, getUserZoneId, getWarningMsg, getWarningMsgList, getWarningMsgSession, getWarningMsgSessionList, glp, isAdmin, isAdminZone, isAjaxRequest, isDBMember, isDebug, isDebugTemplate, isInFrontOffice, isLogged, isWebdavAccess, isWorkZone, removeMessage, removeMessage, removeMsg, retrieveUploadedFile, select, sendError, sendError, sendForbidden, sendForbidden, sendRedirect, sendRedirect, sendRedirect, setErrorMsg, setErrorMsg, setErrorMsgSession, setErrorMsgSession, setInfoMsg, setInfoMsg, setInfoMsgSession, setInfoMsgSession, setLoggedMember, setRequest, setResponse, setSuccessMsg, setSuccessMsg, setSuccessMsgSession, setSuccessMsgSession, setWarningMsg, setWarningMsg, setWarningMsgSession, setWarningMsgSession, updateWorkspace, validateRegexp, validateSchedule
-
-
-
-
Field Detail
-
EXPIRATION_DURATION_PROP
public static final java.lang.String EXPIRATION_DURATION_PROP
Property key that defines the password reset link validity duration. (See JCMS-3940)- Since:
- jcms-7.1.4, jcms-8.0.3, jcms-9.0.0
- See Also:
- Constant Field Values
-
-
Method Detail
-
processAction
public boolean processAction() throws java.io.IOException
Description copied from class:JcmsFormHandler
Method to be implemented to check/validate action to be performed and process them.Default implementation is to return false. No need to call super method.
This method may NOT be invoked at all if security validation are not met.
You must ensure your handler and JSP can work properly without any code invoked in this method.
- Overrides:
processAction
in classJcmsFormHandler
- Returns:
- false if no redirection is needed, true otherwise
- Throws:
java.io.IOException
- IO Exception
-
validateRequestReset
public boolean validateRequestReset()
Check all information required for a password reset request have been provided- Returns:
- true if password reset request operation can be performed, false otherwise
-
performRequestReset
public boolean performRequestReset() throws java.io.IOException
Perform the password reset request for the specified email- Returns:
- true if a redirect is needed, false otherwise
- Throws:
java.io.IOException
- on redirect error
-
getPasswordResetUrl
public static java.lang.String getPasswordResetUrl(javax.servlet.http.HttpServletRequest request, Member mbr)
Retrieve an absolute URL suitable for the specified member to change his password.The returned URL will be valid during the default duration defined by property "channel.reset-password-link.duration".
The specified member MUST be a member authorized to update his password, that is :
- It must be enabled
- It must not be an LDAP account
- It must not be a Contact
- It must not have en empty password
- It must be persisted
- Parameters:
request
- optional current request to retrieve base url (site's base url is used if null)mbr
- required member- Returns:
- an absolute URL
- Throws:
java.lang.IllegalArgumentException
- if member does not match any of the expected constraints
-
getPasswordResetUrl
public static java.lang.String getPasswordResetUrl(javax.servlet.http.HttpServletRequest request, Member mbr, long tokenDuration)
Retrieve an absolute URL suitable for the specified member to change his password.The specified member MUST be a member authorized to update his password, that is :
- It must be enabled
- It must not be an LDAP account
- It must not be a Contact
- It must not have en empty password
- It must be persisted
- Parameters:
request
- optional current request to retrieve base url (site's base url is used if null)mbr
- required membertokenDuration
- a duration in millisecond during which the URL is valid, after this duration the token won't be accepted. Specify 0 or a negative value to use the default duration.
Default duration is defined by property "channel.reset-password-link.duration".
If this property does not represent a valid long, 24 hours will be used as fallback.- Returns:
- an absolute URL
- Throws:
java.lang.IllegalArgumentException
- if member does not match any of the expected constraints- Since:
- jcms-7.1.1
-
getPasswordResetUrl
public static java.lang.String getPasswordResetUrl(javax.servlet.http.HttpServletRequest request, Member mbr, long tokenDuration, boolean selfRequest)
Retrieve an absolute URL suitable for the specified member to change his password.The specified member MUST be a member authorized to update his password, that is :
- It must be enabled
- It must not be an LDAP account
- It must not be a Contact
- It must not have en empty password
- It must be persisted
- Parameters:
request
- optional current request to retrieve base url (site's base url is used if null)mbr
- required membertokenDuration
- a duration in millisecond during which the URL is valid, after this duration the token won't be accepted. Specify 0 or a negative value to use the default duration.
Default duration is defined by property "channel.reset-password-link.duration".
If this property does not represent a valid long, 24 hours will be used as fallback.selfRequest
- true if reset is requested by user himself, false when reset is requested by admin- Returns:
- an absolute URL
- Throws:
java.lang.IllegalArgumentException
- if member does not match any of the expected constraints- Since:
- jcms-10.0.4 / JCMS-7614
-
validateReset
public boolean validateReset()
Check all information required for a password reset have been provided- Returns:
- true if password reset operation can be performed, false otherwise
-
performReset
public boolean performReset() throws java.io.IOException
Perform the password reset request for the specified email- Returns:
- true if a redirect is needed, false otherwise
- Throws:
java.io.IOException
- on redirect error
-
generatePasswordResetToken
public static java.lang.String generatePasswordResetToken(Member member, long tokenDuration)
Compute and generate a password reset token suitable for a password reset modification- Parameters:
member
- the member for which token is generated, must not be nulltokenDuration
- a duration in millisecond during which the token is valid, after this duration the token won't be accepted. Specify 0 or a negative value to use the default duration.
Default duration is defined by property "channel.reset-password-link.duration".
If this property does not represent a valid long, 24 hours will be used as fallback.- Returns:
- a digest suitable for use as parameter passwordResetToken
- Throws:
java.lang.IllegalArgumentException
- if member is disabled, or does not have any password, or is not persisted
-
getMemberFromPasswordResetToken
public static Member getMemberFromPasswordResetToken(java.lang.String token)
Validate a password reset token and retrieve the corresponding member.- Parameters:
token
- the password reset token value as computed bygeneratePasswordResetToken(Member, long)
- Returns:
- the Member for which password token can be used, null if token is invalid or expired
-
setOpRequestReset
public void setOpRequestReset(java.lang.String value)
Set this parameter to trigger a password request reset.Fields which must be specified : email.
- Parameters:
value
- any value
-
setOpReset
public void setOpReset(java.lang.String value)
Set this parameter to trigger a password reset.Fields which must be specified : mbrId, password1, password2, passwordResetToken.
- Parameters:
value
- any value
-
isResetRequestFormDisplayed
public boolean isResetRequestFormDisplayed()
Check if the "request reset password" form should be displayed.- Returns:
- true if the "request reset" form must be displayed, false otherwise
-
isResetFormDisplayed
public boolean isResetFormDisplayed()
Check if the "reset password" form should be displayed.- Returns:
- true if the "reset" form must be displayed, false otherwise
-
setEmail
public void setEmail(java.lang.String email)
The the email for which a password reset request will be sent- Parameters:
email
- a valid email
-
getEmail
public java.lang.String getEmail()
The email as entered by the user.- Returns:
- the same value retrieved by the handler.
-
getMember
public Member getMember()
Retrieve the member for which a password reset is performed.- Returns:
- a Member, or null if no member was specified
-
setPassword1
public void setPassword1(java.lang.String password)
Set the new password to use- Parameters:
password
- the clear text password to use for the member
-
setPassword2
public void setPassword2(java.lang.String password)
Set the new password confirmation- Parameters:
password
- the clear text password, which must match password1
-
setPasswordResetToken
public void setPasswordResetToken(java.lang.String token)
Set the internal security token validating the password reset.This parameter has several purpose : - storing the token in handler for access in form - reading member for which operation is performed - trigger the "reset" form and hide the "request reset" form.
- Parameters:
token
- a security token internally build by this handler and specified in the validation email
-
setSelfResetRequest
public void setSelfResetRequest(boolean isSelfResetRequest)
Set a purely informative field for the reset process in progress.- set to
true
, to indicate password reset was requested by the user himself - set to
false
(the default), to indicate reset was initially sent by an administrator
- Parameters:
isSelfResetRequest
- true if reset is requested by user himself, false when reset is requested by admin- Since:
- jcms-10.0.4 / JCMS-7614
- set to
-
isSelfResetRequest
public boolean isSelfResetRequest()
Check the origin of this password reset request- Returns:
- true if reset is requested by user himself, false when reset is requested by admin
- Since:
- jcms-10.0.4 / JCMS-7614
-
getPasswordResetToken
public java.lang.String getPasswordResetToken()
Retrieve the internal security token used to validate the password reset.- Returns:
- a security token as sent in the validation email
-
getExpirationDuration
public static long getExpirationDuration()
- Returns:
- the default validity duration of a Password reset request (in millisecond).
It is defined by property
EXPIRATION_DURATION_PROP
="channel.reset-password-link.duration".
If this property does not represent a valid long number, 24 Hours will be used as fallback. - Since:
- jcms-7.1.4, jcms-8.0.3, jcms-9.0.0
-
-