Attribute filtering code.
[shibboleth/sp.git] / shibsp / SPConfig.h
index 70b46c2..4e62b8c 100644 (file)
@@ -24,6 +24,7 @@
 #define __shibsp_config_h__
 
 #include <shibsp/base.h>
+#include <saml/binding/MessageDecoder.h>
 #include <xmltooling/PluginManager.h>
 #include <xercesc/dom/DOM.hpp>
 
 namespace shibsp {
 
     class SHIBSP_API AccessControl;
+    class SHIBSP_API AttributeDecoder;
+    class SHIBSP_API AttributeExtractor;
+    class SHIBSP_API AttributeFilter;
+    class SHIBSP_API AttributeResolver;
     class SHIBSP_API Handler;
     class SHIBSP_API ListenerService;
+    class SHIBSP_API MatchFunctor;
     class SHIBSP_API RequestMapper;
     class SHIBSP_API ServiceProvider;
     class SHIBSP_API SessionCache;
+    class SHIBSP_API SessionInitiator;
 
 #if defined (_MSC_VER)
     #pragma warning( push )
@@ -70,7 +77,7 @@ namespace shibsp {
             Metadata = 4,
             Trust = 8,
             Credentials = 16,
-            AttributeResolver = 32,
+            AttributeResolution = 32,
             RequestMapping = 64,
             OutOfProcess = 128,
             InProcess = 256,
@@ -133,65 +140,115 @@ namespace shibsp {
             return m_serviceProvider;
         }
 
+        /**
+         * Sets the global ArtifactResolver instance.
+         *
+         * <p>This method must be externally synchronized with any code that uses the object.
+         * Any previously set object is destroyed.
+         * 
+         * @param artifactResolver   new ArtifactResolver instance to store
+         */
+        void setArtifactResolver(opensaml::MessageDecoder::ArtifactResolver* artifactResolver) {
+            delete m_artifactResolver;
+            m_artifactResolver = artifactResolver;
+        }
+        
+        /**
+         * Returns the global ArtifactResolver instance.
+         * 
+         * @return  global ArtifactResolver or NULL
+         */
+        opensaml::MessageDecoder::ArtifactResolver* getArtifactResolver() const {
+            return m_artifactResolver;
+        }
+
         /** Separator for serialized values of multi-valued attributes. */
         char attribute_value_delimeter;
         
         /**
          * Manages factories for AccessControl plugins.
          */
-        xmltooling::PluginManager<AccessControl,const xercesc::DOMElement*> AccessControlManager;
+        xmltooling::PluginManager<AccessControl,std::string,const xercesc::DOMElement*> AccessControlManager;
+
+        /**
+         * Manages factories for AttributeDecoder plugins.
+         */
+        xmltooling::PluginManager<AttributeDecoder,xmltooling::QName,const xercesc::DOMElement*> AttributeDecoderManager;
+
+        /**
+         * Manages factories for AttributeExtractor plugins.
+         */
+        xmltooling::PluginManager<AttributeExtractor,std::string,const xercesc::DOMElement*> AttributeExtractorManager;
+
+        /**
+         * Manages factories for AttributeFilter plugins.
+         */
+        xmltooling::PluginManager<AttributeFilter,std::string,const xercesc::DOMElement*> AttributeFilterManager;
+
+        /**
+         * Manages factories for AttributeResolver plugins.
+         */
+        xmltooling::PluginManager<AttributeResolver,std::string,const xercesc::DOMElement*> AttributeResolverManager;
 
         /**
          * Manages factories for Handler plugins that implement AssertionConsumerService functionality.
          */
-        xmltooling::PluginManager<Handler,const xercesc::DOMElement*> AssertionConsumerServiceManager;
+        xmltooling::PluginManager< Handler,std::string,std::pair<const xercesc::DOMElement*,const char*> > AssertionConsumerServiceManager;
 
         /**
          * Manages factories for Handler plugins that implement customized functionality.
          */
-        xmltooling::PluginManager<Handler,const xercesc::DOMElement*> HandlerManager;
+        xmltooling::PluginManager< Handler,std::string,std::pair<const xercesc::DOMElement*,const char*> > HandlerManager;
 
         /**
          * Manages factories for ListenerService plugins.
          */
-        xmltooling::PluginManager<ListenerService,const xercesc::DOMElement*> ListenerServiceManager;
+        xmltooling::PluginManager<ListenerService,std::string,const xercesc::DOMElement*> ListenerServiceManager;
+
+        /**
+         * Manages factories for MatchFunctor plugins.
+         */
+        xmltooling::PluginManager<MatchFunctor,xmltooling::QName,const xercesc::DOMElement*> MatchFunctorManager;
 
         /**
          * Manages factories for Handler plugins that implement ManageNameIDService functionality.
          */
-        xmltooling::PluginManager<Handler,const xercesc::DOMElement*> ManageNameIDServiceManager;
+        xmltooling::PluginManager< Handler,std::string,std::pair<const xercesc::DOMElement*,const char*> > ManageNameIDServiceManager;
 
         /**
          * Manages factories for RequestMapper plugins.
          */
-        xmltooling::PluginManager<RequestMapper,const xercesc::DOMElement*> RequestMapperManager;
+        xmltooling::PluginManager<RequestMapper,std::string,const xercesc::DOMElement*> RequestMapperManager;
 
         /**
          * Manages factories for ServiceProvider plugins.
          */
-        xmltooling::PluginManager<ServiceProvider,const xercesc::DOMElement*> ServiceProviderManager;
+        xmltooling::PluginManager<ServiceProvider,std::string,const xercesc::DOMElement*> ServiceProviderManager;
 
         /**
          * Manages factories for SessionCache plugins.
          */
-        xmltooling::PluginManager<SessionCache,const xercesc::DOMElement*> SessionCacheManager;
+        xmltooling::PluginManager<SessionCache,std::string,const xercesc::DOMElement*> SessionCacheManager;
 
         /**
          * Manages factories for Handler plugins that implement SessionInitiator functionality.
          */
-        xmltooling::PluginManager<Handler,const xercesc::DOMElement*> SessionInitiatorManager;
+        xmltooling::PluginManager< SessionInitiator,std::string,std::pair<const xercesc::DOMElement*,const char*> > SessionInitiatorManager;
 
         /**
          * Manages factories for Handler plugins that implement SingleLogoutService functionality.
          */
-        xmltooling::PluginManager<Handler,const xercesc::DOMElement*> SingleLogoutServiceManager;
+        xmltooling::PluginManager< Handler,std::string,std::pair<const xercesc::DOMElement*,const char*> > SingleLogoutServiceManager;
 
     protected:
-        SPConfig() : attribute_value_delimeter(';'), m_serviceProvider(NULL), m_features(0) {}
+        SPConfig() : attribute_value_delimeter(';'), m_serviceProvider(NULL), m_artifactResolver(NULL), m_features(0) {}
         
         /** Global ServiceProvider instance. */
         ServiceProvider* m_serviceProvider;
 
+        /** Global ArtifactResolver instance. */
+        opensaml::MessageDecoder::ArtifactResolver* m_artifactResolver;
+
     private:
         unsigned long m_features;
     };