package sushi.application.pages.user; import org.apache.wicket.Session; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.PasswordTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.model.Model; import sushi.application.SushiAuthenticatedSession; import sushi.application.components.form.BlockingAjaxButton; import sushi.application.components.form.WarnOnExitForm; import sushi.application.pages.AbstractSushiPage; import sushi.application.pages.main.MainPage; /** * A page to render a login form for authenticate users. * @author micha */ public class LoginPage extends AbstractSushiPage { private static final long serialVersionUID = -7896431319431474548L; private Form<Void> loginForm; private TextField<String> nameInput; private PasswordTextField passwordInput; private Form<?> logoutForm; /** * Constructor for a page to render a login form for authenticate users. */ public LoginPage() { super(); buildMainLayout(); } private void buildMainLayout() { loginForm = new WarnOnExitForm("loginForm"); nameInput = new TextField<String>("nameInput", Model.of("")); loginForm.add(nameInput); passwordInput = new PasswordTextField("passwordInput", Model.of("")); loginForm.add(passwordInput); addLoginButton(); addRegisterLink(); add(loginForm); logoutForm = new Form<Object>("logoutForm"); addLogoutButton(); add(logoutForm); if(((SushiAuthenticatedSession)Session.get()).getUser() != null){ loginForm.setVisible(false); } else { logoutForm.setVisible(false); } } private void addRegisterLink() { loginForm.add(new Link<Object>("registerLink"){ private static final long serialVersionUID = 1L; @Override public void onClick() { setResponsePage(RegisterPage.class); }; }); } private void addLoginButton() { Button applyButton = new BlockingAjaxButton("loginButton", loginForm) { private static final long serialVersionUID = 1L; @Override public void onSubmit(AjaxRequestTarget target, Form<?> form) { super.onSubmit(target, form); String userName = nameInput.getValue(); String password = passwordInput.getValue(); if(login(userName, password)){ setResponsePage(LoginPage.class); } } }; loginForm.add(applyButton); } private void addLogoutButton() { Button applyButton = new BlockingAjaxButton("logoutButton", logoutForm) { private static final long serialVersionUID = 1L; @Override public void onSubmit(AjaxRequestTarget target, Form<?> form) { super.onSubmit(target, form); getSession().invalidate(); setResponsePage(MainPage.class); } }; logoutForm.add(applyButton); } private boolean login(String userName, String password){ SushiAuthenticatedSession session = getMySession(); // Sign the user in if(session.signIn(userName, password)){ continueToOriginalDestination(); return true; } else { // Register the error message with the feedback panel getFeedbackPanel().error("Unable to log you in"); return false; } } private SushiAuthenticatedSession getMySession(){ return (SushiAuthenticatedSession) getSession(); } }