/* (c) 2014 - 2015 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.wps.security;
import java.util.Collections;
import java.util.List;
import org.geoserver.config.GeoServer;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.security.CatalogMode;
import org.geoserver.wps.ProcessGroupInfo;
import org.geoserver.wps.ProcessGroupInfoImpl;
import org.geoserver.wps.ProcessInfo;
import org.geoserver.wps.ProcessInfoImpl;
import org.geoserver.wps.WPSInfo;
import org.geoserver.wps.WPSTestSupport;
import org.geotools.feature.NameImpl;
import org.geotools.process.ProcessFactory;
import org.geotools.process.Processors;
import org.junit.After;
import org.junit.Before;
public abstract class AbstractWPSAccessTest extends WPSTestSupport {
@Override
protected void onSetUp(SystemTestData testData) throws Exception {
super.onSetUp(testData);
// Add test/test user with roles ROLE_TEST
addUser("test", "test", null, Collections.singletonList("ROLE_TEST"));
}
@Before
public void setUpInternal() throws Exception {
GeoServer gs = getGeoServer();
WPSInfo wps = gs.getService(WPSInfo.class);
// restrict buffer process to TEST role
ProcessInfo pai = new ProcessInfoImpl();
NameImpl bufferName = new NameImpl("JTS", "buffer");
pai.setName(bufferName);
pai.setEnabled(true);
pai.getRoles().add("ROLE_TEST");
// create group and add buffer to filtered process (buffer process is enabled but has roles)
ProcessFactory jts = Processors.createProcessFactory(bufferName);
ProcessGroupInfo jtsGroup = new ProcessGroupInfoImpl();
jtsGroup.setFactoryClass(jts.getClass());
jtsGroup.setEnabled(true);
jtsGroup.getFilteredProcesses().add(pai);
List<ProcessGroupInfo> pgs = wps.getProcessGroups();
pgs.clear();
pgs.add(jtsGroup);
wps.setCatalogMode(getMode());
gs.save(wps);
}
@After
public void cleanup() throws Exception {
GeoServer gs = getGeoServer();
WPSInfo wps = gs.getService(WPSInfo.class);
wps.getProcessGroups().clear();
gs.save(wps);
}
/**
* Enable the Spring Security auth filters
*/
@Override
protected List<javax.servlet.Filter> getFilters() {
return Collections.singletonList((javax.servlet.Filter) GeoServerExtensions
.bean("filterChainProxy"));
}
protected abstract CatalogMode getMode();
protected static final String executeRequestXml = "<wps:Execute service='WPS' version='1.0.0' xmlns:wps='http://www.opengis.net/wps/1.0.0' "
+ "xmlns:ows='http://www.opengis.net/ows/1.1'>"
+ "<ows:Identifier>JTS:buffer</ows:Identifier>"
+ "<wps:DataInputs>"
+ "<wps:Input>"
+ "<ows:Identifier>distance</ows:Identifier>"
+ "<wps:Data>"
+ "<wps:LiteralData>1</wps:LiteralData>"
+ "</wps:Data>"
+ "</wps:Input>"
+ "<wps:Input>"
+ "<ows:Identifier>geom</ows:Identifier>"
+ "<wps:Data>"
+ "<wps:ComplexData mimeType=\"text/xml; subtype=gml/2.1.2\">"
+ "<gml:Polygon xmlns:gml='http://www.opengis.net/gml'>"
+ "<gml:exterior>"
+ "<gml:LinearRing>"
+ "<gml:coordinates>1 1 2 1 2 2 1 2 1 1</gml:coordinates>"
+ "</gml:LinearRing>"
+ "</gml:exterior>"
+ "</gml:Polygon>"
+ "</wps:ComplexData>"
+ "</wps:Data>"
+ "</wps:Input>"
+ "</wps:DataInputs>"
+ "<wps:ResponseForm>"
+ "<wps:ResponseDocument storeExecuteResponse='false'>"
+ "<wps:Output>"
+ "<ows:Identifier>result</ows:Identifier>"
+ "</wps:Output>"
+ "</wps:ResponseDocument>" + "</wps:ResponseForm>" + "</wps:Execute>";
}