/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security.web.passwd; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.FormComponentPanel; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.geoserver.security.config.PasswordPolicyConfig; import org.geoserver.security.web.SecurityNamedServicePanel; /** * Configuration panel for {@link PasswordPolicy}. * * @author Justin Deoliveira, OpenGeo * */ public class PasswordPolicyPanel extends SecurityNamedServicePanel<PasswordPolicyConfig> { MaxLengthPanel maxLengthPanel; public PasswordPolicyPanel(String id, IModel<PasswordPolicyConfig> model) { super(id, model); PasswordPolicyConfig pwPolicy = model.getObject(); //add(new TextField("name").setRequired(true)); add(new CheckBox("digitRequired")); add(new CheckBox("uppercaseRequired")); add(new CheckBox("lowercaseRequired")); add(new TextField<Integer>("minLength")); boolean unlimited = pwPolicy.getMaxLength() == -1; add(new AjaxCheckBox("unlimitedMaxLength", new Model(unlimited)) { @Override protected void onUpdate(AjaxRequestTarget target) { Boolean value = getModelObject(); maxLengthPanel.setVisible(!value); if (value) { maxLengthPanel.setUnlimited(); } target.add(maxLengthPanel.getParent()); } }); add(maxLengthPanel = (MaxLengthPanel) new MaxLengthPanel("maxLength").setVisible(!unlimited)); } public void doSave(PasswordPolicyConfig config) throws Exception { getSecurityManager().savePasswordPolicy(config); } @Override public void doLoad(PasswordPolicyConfig config) throws Exception { getSecurityManager().loadPasswordPolicyConfig(config.getName()); } class MaxLengthPanel extends FormComponentPanel { public MaxLengthPanel(String id) { super(id, new Model()); add(new TextField<Integer>("maxLength")); setOutputMarkupId(true); } public void setUnlimited() { get("maxLength").setDefaultModelObject(-1); } } }