/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security; import org.geoserver.catalog.CatalogInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.Predicates; import org.geoserver.catalog.ResourceInfo; import org.geoserver.ows.Dispatcher; import org.geoserver.ows.Request; import org.opengis.filter.Filter; /** * Makes sure disabled layers/resources cannot be accessed from outside regardless of the service * * @author Andrea Aime - GeoSolutions * */ public class DisabledResourceFilter extends AbstractCatalogFilter { private boolean shouldApplyFilter() { Request request = Dispatcher.REQUEST.get(); // for the moment, match any recognized OGC request return request != null && request.getService() != null && request.getRequest() != null; } @Override public Filter getSecurityFilter(Class<? extends CatalogInfo> clazz) { if (shouldApplyFilter()) { if (LayerInfo.class.isAssignableFrom(clazz)) { return Predicates.and(Predicates.equal("enabled", true), Predicates.equal("resource.enabled", true), Predicates.equal("resource.store.enabled", true)); } else if (ResourceInfo.class.isAssignableFrom(clazz)) { return Predicates.and(Predicates.equal("enabled", true), Predicates.equal("store.enabled", true)); } } return Filter.INCLUDE; } @Override public boolean hideLayer(LayerInfo layer) { if (shouldApplyFilter()) { return !layer.enabled(); } return false; } @Override public boolean hideResource(ResourceInfo resource) { if (shouldApplyFilter()) { return !resource.enabled(); } return false; } }