package fr.openwide.maven.artifact.notifier.web.application.navigation.page;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.EmailTextField;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.openwide.core.wicket.more.link.descriptor.IPageLinkDescriptor;
import fr.openwide.core.wicket.more.link.descriptor.builder.LinkDescriptorBuilder;
import fr.openwide.core.wicket.more.markup.html.form.LabelPlaceholderBehavior;
import fr.openwide.core.wicket.more.markup.html.template.model.BreadCrumbElement;
import fr.openwide.maven.artifact.notifier.core.business.user.model.User;
import fr.openwide.maven.artifact.notifier.core.business.user.service.IUserService;
import fr.openwide.maven.artifact.notifier.web.application.common.template.MainTemplate;
public class ForgottenPasswordPage extends MainTemplate {
private static final long serialVersionUID = 289306551107177573L;
private static final Logger LOGGER = LoggerFactory.getLogger(ForgottenPasswordPage.class);
@SpringBean
private IUserService userService;
private IModel<String> userNameModel;
public static IPageLinkDescriptor linkDescriptor() {
return new LinkDescriptorBuilder()
.page(ForgottenPasswordPage.class)
.build();
}
public ForgottenPasswordPage(PageParameters parameters) {
super(parameters);
if (AuthenticatedWebSession.exists() && AuthenticatedWebSession.get().isSignedIn()) {
redirect(DashboardPage.class);
return;
}
addBreadCrumbElement(new BreadCrumbElement(new ResourceModel("forgottenPassword.pageTitle"), ForgottenPasswordPage.linkDescriptor()));
add(new Label("pageTitle", new ResourceModel("forgottenPassword.pageTitle")));
Form<Void> form = new Form<Void>("form") {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit() {
try {
User user = userService.getByUserName(userNameModel.getObject());
if (user != null) {
if (user.getRemoteIdentifier() == null) {
userService.passwordResetRequest(user);
getSession().success(getString("forgottenPassword.success"));
redirect(getApplication().getHomePage());
} else {
LOGGER.warn("The account '" + user.getUserName() + "' is not a classic account: its password can't be reset");
getSession().warn(getString("forgottenPassword.account.remote"));
}
} else {
LOGGER.error("The username '" + userNameModel.getObject() + "' does not match any existing account");
getSession().error(getString("forgottenPassword.account.notFound"));
}
} catch (RestartResponseException e) {
throw e;
} catch (Exception e) {
LOGGER.error("An error occurred while sending the forgotten password email", e);
getSession().error(getString("forgottenPassword.error"));
}
}
};
add(form);
userNameModel = Model.of("");
EmailTextField userNameField = new EmailTextField("userName", userNameModel);
userNameField.setRequired(true);
userNameField.setLabel(new ResourceModel("home.identification.classic.email"));
userNameField.add(new LabelPlaceholderBehavior());
form.add(userNameField);
form.add(new SubmitLink("submit"));
}
@Override
protected Class<? extends WebPage> getFirstMenuPage() {
return ForgottenPasswordPage.class;
}
}