/* (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.usergroup;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.form.CheckBox;
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.StringResourceModel;
import org.geoserver.security.GeoServerUserGroupService;
import org.geoserver.security.config.SecurityUserGroupServiceConfig;
import org.geoserver.security.impl.Util;
import org.geoserver.security.web.SecurityNamedServicePanel;
import org.geoserver.security.web.SecurityNamedServiceTabbedPanel;
import org.geoserver.security.web.group.GroupPanel;
import org.geoserver.security.web.passwd.PasswordEncoderChoice;
import org.geoserver.security.web.passwd.PasswordPolicyChoice;
import org.geoserver.security.web.user.UserPanel;
/**
* Base class for user group service panels.
*
* @author Justin Deoliveira, OpenGeo
*
* @param <T>
*/
public class UserGroupServicePanel<T extends SecurityUserGroupServiceConfig>
extends SecurityNamedServicePanel<T> implements SecurityNamedServiceTabbedPanel<T> {
CheckBox recodeCheckBox=null;
public UserGroupServicePanel(String id, IModel<T> model) {
super(id, model);
add(new PasswordEncoderChoice("passwordEncoderName").add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
if (recodeCheckBox.isVisible()) {
recodeCheckBox.setEnabled(true);
target.add(recodeCheckBox);
}
}
}));
boolean canCreateStore=false;
SecurityUserGroupServiceConfig config = model.getObject();
try {
GeoServerUserGroupService s =
(GeoServerUserGroupService) Class.forName(config.getClassName()).newInstance();
canCreateStore=s.canCreateStore();
} catch (Exception e) {
// do nothing
}
recodeCheckBox= new CheckBox("recodeExistingPasswords", Model.of(false));
recodeCheckBox.setOutputMarkupId(true);
recodeCheckBox.setVisible(canCreateStore);
recodeCheckBox.setEnabled(false);
add(recodeCheckBox);
add(new PasswordPolicyChoice("passwordPolicyName"));
}
@Override
public List<ITab> createTabs(final IModel<T> model) {
List<ITab> tabs = new ArrayList<ITab>();
tabs.add(new AbstractTab(new StringResourceModel("users", this, null)) {
@Override
public Panel getPanel(String panelId) {
return new UserPanel(panelId, model.getObject().getName());
}
});
tabs.add(new AbstractTab(new StringResourceModel("groups", this, null)) {
@Override
public Panel getPanel(String panelId) {
return new GroupPanel(panelId, model.getObject().getName());
}
});
return tabs;
}
@Override
public void doSave(T config) throws Exception {
getSecurityManager().saveUserGroupService(config);
if (recodeCheckBox.getModelObject()) {
GeoServerUserGroupService s = getSecurityManager().loadUserGroupService(config.getName());
if (s.canCreateStore()) {
Util.recodePasswords(s.createStore());
}
}
}
public void doLoad(T config) throws Exception {
getSecurityManager().loadUserGroupServiceConfig(config.getName());
}
}