package org.fcrepo.server.security; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.jboss.security.xacml.sunxacml.PDPConfig; import org.jboss.security.xacml.sunxacml.attr.AttributeFactory; import org.jboss.security.xacml.sunxacml.attr.AttributeProxy; import org.jboss.security.xacml.sunxacml.attr.BaseAttributeFactory; import org.jboss.security.xacml.sunxacml.attr.StandardAttributeFactory; import org.jboss.security.xacml.sunxacml.combine.BaseCombiningAlgFactory; import org.jboss.security.xacml.sunxacml.combine.CombiningAlgFactory; import org.jboss.security.xacml.sunxacml.combine.CombiningAlgorithm; import org.jboss.security.xacml.sunxacml.combine.StandardCombiningAlgFactory; import org.jboss.security.xacml.sunxacml.cond.BaseFunctionFactory; import org.jboss.security.xacml.sunxacml.cond.BasicFunctionFactoryProxy; import org.jboss.security.xacml.sunxacml.cond.Function; import org.jboss.security.xacml.sunxacml.cond.FunctionFactory; import org.jboss.security.xacml.sunxacml.cond.FunctionFactoryProxy; import org.jboss.security.xacml.sunxacml.cond.FunctionProxy; import org.jboss.security.xacml.sunxacml.cond.StandardFunctionFactory; import org.jboss.security.xacml.sunxacml.cond.cluster.FunctionCluster; import org.jboss.security.xacml.sunxacml.finder.AttributeFinder; import org.jboss.security.xacml.sunxacml.finder.AttributeFinderModule; import org.jboss.security.xacml.sunxacml.finder.PolicyFinder; import org.jboss.security.xacml.sunxacml.finder.PolicyFinderModule; import org.jboss.security.xacml.sunxacml.finder.ResourceFinder; import org.jboss.security.xacml.sunxacml.finder.ResourceFinderModule; public class PDPConfigurationFactory { public PDPConfigurationFactory() { } public AttributeFactory useStandardDatatypes(){ return StandardAttributeFactory.getNewFactory(); } public AttributeFactory useAttributeProxies(Map<String,AttributeProxy> proxies) { AttributeFactory result = new BaseAttributeFactory(); for (String id:proxies.keySet()){ result.addDatatype(id, proxies.get(id)); } return result; } public CombiningAlgFactory useStandardAlgorithms(){ return StandardCombiningAlgFactory.getNewFactory(); } /** * * @param algorithms accepts a Set of CombiningAlgorithm impls * @return CombiningAlgFactory */ public CombiningAlgFactory useAlgorithms(Set<CombiningAlgorithm> algorithms) { CombiningAlgFactory result = new BaseCombiningAlgFactory(); for (CombiningAlgorithm algorithm: algorithms){ result.addAlgorithm(algorithm); } return result; } public FunctionFactoryProxy useStandardFunctions(){ return StandardFunctionFactory.getNewFactoryProxy(); } public FunctionFactory useGeneralFunctions(Set<Function> functions, Map<String,FunctionProxy> proxies, List<FunctionCluster> clusters) throws URISyntaxException { return functionFactory(null,functions,proxies,clusters); } public FunctionFactory useConditionFunctions(FunctionFactory general, Set<Function> functions, Map<String,FunctionProxy> proxies, List<FunctionCluster> clusters) throws URISyntaxException { return functionFactory(general,functions,proxies,clusters); } public FunctionFactory useTargetFunctions(FunctionFactory conditions, Set<Function> functions, Map<String,FunctionProxy> proxies, List<FunctionCluster> clusters) throws URISyntaxException { return functionFactory(conditions,functions,proxies,clusters); } private FunctionFactory functionFactory(FunctionFactory base, Set<Function> functions, Map<String,FunctionProxy> proxies, List<FunctionCluster> clusters) throws URISyntaxException { FunctionFactory result = (base != null) ? new BaseFunctionFactory(base) : new BaseFunctionFactory(); for (Function function:functions){ result.addFunction(function); } for (String id:proxies.keySet()){ result.addAbstractFunction(proxies.get(id), new URI(id)); } for (FunctionCluster cluster:clusters){ for (Object function:cluster.getSupportedFunctions()){ result.addFunction((Function)function); } } return result; } public FunctionFactoryProxy useFunctionFactories(FunctionFactory target, FunctionFactory condition, FunctionFactory general){ FunctionFactoryProxy result = new BasicFunctionFactoryProxy(target, condition, general); return result; } public PDPConfig getPDPConfig(List<AttributeFinderModule> attributeFinders, Set<PolicyFinderModule> policyFinders, List<ResourceFinderModule> resourceFinders) { AttributeFinder attr = new AttributeFinder(); attr.setModules(attributeFinders); PolicyFinder policy = new PolicyFinder(); policy.setModules(policyFinders); ResourceFinder rsrc = new ResourceFinder(); rsrc.setModules(resourceFinders); return new PDPConfig(attr, policy, rsrc); } public PDPConfig getDefaultPDPConfig() { List<AttributeFinderModule> attributeFinders = new ArrayList<AttributeFinderModule>(); Set<PolicyFinderModule> policyFinders = new HashSet<PolicyFinderModule>(); List<ResourceFinderModule> resourceFinders = new ArrayList<ResourceFinderModule>(); // defaults? return getPDPConfig(attributeFinders, policyFinders, resourceFinders); } }