package marubinotto.piggydb.ui.page; import marubinotto.piggydb.model.auth.User; import marubinotto.piggydb.ui.page.common.AbstractBorderPage; import net.sf.click.control.Checkbox; import net.sf.click.control.Form; import net.sf.click.control.HiddenField; import net.sf.click.control.PasswordField; import net.sf.click.control.Submit; import net.sf.click.control.TextField; import org.apache.commons.lang.StringUtils; public class LoginPage extends AbstractBorderPage { @Override protected boolean needsAuthentication() { return false; } @Override protected User autoLoginAsAnonymous() { return null; // Disable anonymous auto login } // // Input // public String original; // // Control // public Form loginForm = new Form(); private TextField userNameField = new TextField("userName", true); private PasswordField passwordField = new PasswordField("password", true); private Checkbox rememberMeField = new Checkbox("rememberMe", false); private HiddenField originalPathField = new HiddenField("original", String.class); @Override public void onInit() { super.onInit(); initControls(); } private void initControls() { this.loginForm.add(this.originalPathField); this.userNameField.setLabel(getMessage("LoginPage-userName")); this.userNameField.setSize(30); this.loginForm.add(this.userNameField); this.passwordField.setLabel(getMessage("LoginPage-password")); this.passwordField.setSize(30); this.loginForm.add(this.passwordField); this.rememberMeField.setLabel(getMessage("LoginPage-rememberMe")); this.loginForm.add(this.rememberMeField); this.loginForm.add(new Submit("ok", " Log In ", this, "onOkClick")); } public boolean onOkClick() throws Exception { if (!this.loginForm.isValid()) return true; getSession().invalidateIfExists(); User user = getDomain().getAuthentication(). authenticate(this.userNameField.getValue(), this.passwordField.getValue()); if (user == null) { this.loginForm.setError(getMessage("LoginPage-login-error")); return true; } getSession().start(user, this.rememberMeField.isChecked()); String originalPath = this.originalPathField.getValue(); // Avoid redirecting to external unknown URLs if (StringUtils.isNotBlank(originalPath) && originalPath.startsWith("/")) { setRedirect(originalPath); } else { setRedirect(HomePage.class); } return false; } @Override public void onGet() { super.onGet(); if (isAuthenticated()) { if (this.user.isAnonymous()) { getSession().invalidateIfExists(); this.user = null; getLogger().info("Invalidated an anonymous session."); } else { setRedirect(HomePage.class); } } } @Override public void onRender() { super.onRender(); if (this.original != null) this.originalPathField.setValue(this.original); } }