/* (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.decorators; import java.io.IOException; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.security.AccessLevel; import org.geoserver.security.SecureCatalogImpl; import org.geoserver.security.WrapperPolicy; import org.geotools.data.DataAccess; import org.opengis.feature.Feature; import org.opengis.feature.type.FeatureType; import org.opengis.util.ProgressListener; /** * Given a {@link DataStoreInfo} makes sure no write operations can be performed * through it * * @author Andrea Aime - TOPP * * @param <T> * @param <F> */ @SuppressWarnings("serial") public class SecuredDataStoreInfo extends DecoratingDataStoreInfo { WrapperPolicy policy; public SecuredDataStoreInfo(DataStoreInfo delegate, WrapperPolicy policy) { super(delegate); this.policy = policy; } @Override public DataAccess<? extends FeatureType, ? extends Feature> getDataStore(ProgressListener listener) throws IOException { final DataAccess<? extends FeatureType, ? extends Feature> ds = super .getDataStore(listener); if (ds == null) return null; else if(policy.level == AccessLevel.METADATA) throw SecureCatalogImpl.unauthorizedAccess(this.getName()); else return (DataAccess<? extends FeatureType, ? extends Feature>) SecuredObjects.secure(ds, policy); } }