package fr.openwide.core.basicapp.web.application.security.password.component; import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.apache.wicket.validation.validator.EmailAddressValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fr.openwide.core.basicapp.core.business.user.model.User; import fr.openwide.core.basicapp.core.business.user.model.atomic.UserPasswordRecoveryRequestInitiator; import fr.openwide.core.basicapp.core.business.user.model.atomic.UserPasswordRecoveryRequestType; import fr.openwide.core.basicapp.core.business.user.service.IUserService; import fr.openwide.core.basicapp.core.security.service.ISecurityManagementService; import fr.openwide.core.basicapp.web.application.common.typedescriptor.user.SecurityUserTypeDescriptor; import fr.openwide.core.basicapp.web.application.common.validator.EmailExistsValidator; import fr.openwide.core.wicket.more.markup.html.feedback.FeedbackUtils; import fr.openwide.core.wicket.more.markup.html.form.LabelPlaceholderBehavior; public class SecurityPasswordRecoveryContentPanel extends Panel { private static final long serialVersionUID = 547223775134254240L; private static final Logger LOGGER = LoggerFactory.getLogger(SecurityPasswordRecoveryContentPanel.class); private final IModel<String> emailModel = Model.of(""); @SpringBean private IUserService userService; @SpringBean private ISecurityManagementService securityManagementService; public SecurityPasswordRecoveryContentPanel(String wicketId) { super(wicketId); Form<?> form = new Form<Void>("form"); add(form); form.add( new RequiredTextField<>("email", emailModel) .setLabel(new ResourceModel("business.user.email")) .add(EmailAddressValidator.getInstance()) .add(EmailExistsValidator.get()) .add(new LabelPlaceholderBehavior()), new AjaxButton("validate", form) { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { try { User user = userService.getByEmailCaseInsensitive(emailModel.getObject()); securityManagementService.initiatePasswordRecoveryRequest( user, UserPasswordRecoveryRequestType.RESET, UserPasswordRecoveryRequestInitiator.USER ); getSession().success(getString("security.password.recovery.validate.success")); throw SecurityUserTypeDescriptor.USER.signInPageLinkDescriptor() .newRestartResponseException(); } catch (RestartResponseException e) { throw e; } catch (Exception e) { LOGGER.error("Error occurred while recovering password", e); getSession().error(getString("common.error.unexpected")); } FeedbackUtils.refreshFeedback(target, getPage()); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { FeedbackUtils.refreshFeedback(target, getPage()); } } ); } @Override protected void onDetach() { super.onDetach(); emailModel.detach(); } }