47f5e7025eb310e44b7745e1db7fb9064aeb7222
[shibboleth/cpp-sp.git] / shibsp / SPConfig.h
1 /*
2  *  Copyright 2001-2006 Internet2
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * @file shibsp/SPConfig.h
19  * 
20  * Library configuration 
21  */
22
23 #ifndef __shibsp_config_h__
24 #define __shibsp_config_h__
25
26 #include <shibsp/base.h>
27 #include <xmltooling/PluginManager.h>
28 #include <xercesc/dom/DOM.hpp>
29
30 /**
31  * @namespace shibsp
32  * Shibboleth Service Provider Library
33  */
34 namespace shibsp {
35
36     class SHIBSP_API AccessControl;
37     class SHIBSP_API Handler;
38     class SHIBSP_API ListenerService;
39     class SHIBSP_API RequestMapper;
40     class SHIBSP_API ServiceProvider;
41
42 #if defined (_MSC_VER)
43     #pragma warning( push )
44     #pragma warning( disable : 4250 4251 )
45 #endif
46
47     /**
48      * Singleton object that manages library startup/shutdown.
49      */
50     class SHIBSP_API SPConfig
51     {
52     MAKE_NONCOPYABLE(SPConfig);
53     public:
54         virtual ~SPConfig() {}
55
56         /**
57          * Returns the global configuration object for the library.
58          * 
59          * @return reference to the global library configuration object
60          */
61         static SPConfig& getConfig();
62
63         /**
64          * Bitmask values representing subsystems of the library.
65          */
66         enum components_t {
67             Listener = 1,
68             Caching = 2,
69             Metadata = 4,
70             Trust = 8,
71             Credentials = 16,
72             AAP = 32,
73             RequestMapping = 64,
74             OutOfProcess = 128,
75             InProcess = 256,
76             Logging = 512
77         };
78         
79         /**
80          * Set a bitmask of subsystems to activate.
81          * 
82          * @param enabled   bitmask of component constants
83          */
84         void setFeatures(unsigned long enabled) {
85             m_features = enabled;
86         }
87
88         /**
89          * Test whether a subsystem is enabled.
90          * 
91          * @param feature   subsystem/component to test
92          * @return true iff feature is enabled
93          */
94         bool isEnabled(components_t feature) {
95             return (m_features & feature)>0;
96         }
97         
98         /**
99          * Initializes library
100          * 
101          * Each process using the library MUST call this function exactly once
102          * before using any library classes.
103          * 
104          * @param catalog_path  delimited set of schema catalog files to load
105          * @return true iff initialization was successful 
106          */
107         virtual bool init(const char* catalog_path)=0;
108         
109         /**
110          * Shuts down library
111          * 
112          * Each process using the library SHOULD call this function exactly once
113          * before terminating itself.
114          */
115         virtual void term()=0;
116         
117         /**
118          * Sets the global ServiceProvider instance.
119          * This method must be externally synchronized with any code that uses the object.
120          * Any previously set object is destroyed.
121          * 
122          * @param serviceProvider   new ServiceProvider instance to store
123          */
124         void setServiceProvider(ServiceProvider* serviceProvider);
125         
126         /**
127          * Returns the global ServiceProvider instance.
128          * 
129          * @return  global ServiceProvider or NULL
130          */
131         ServiceProvider* getServiceProvider() const {
132             return m_serviceProvider;
133         }
134
135         /**
136          * Manages factories for AccessControl plugins.
137          */
138         xmltooling::PluginManager<AccessControl,const xercesc::DOMElement*> AccessControlManager;
139
140         /**
141          * Manages factories for Handler plugins that implement AssertionConsumerService functionality.
142          */
143         xmltooling::PluginManager<Handler,const xercesc::DOMElement*> AssertionConsumerServiceManager;
144
145         /**
146          * Manages factories for Handler plugins that implement customized functionality.
147          */
148         xmltooling::PluginManager<Handler,const xercesc::DOMElement*> HandlerManager;
149
150         /**
151          * Manages factories for ListenerService plugins.
152          */
153         xmltooling::PluginManager<ListenerService,const xercesc::DOMElement*> ListenerServiceManager;
154
155         /**
156          * Manages factories for Handler plugins that implement ManageNameIDService functionality.
157          */
158         xmltooling::PluginManager<Handler,const xercesc::DOMElement*> ManageNameIDServiceManager;
159
160         /**
161          * Manages factories for RequestMapper plugins.
162          */
163         xmltooling::PluginManager<RequestMapper,const xercesc::DOMElement*> RequestMapperManager;
164
165         /**
166          * Manages factories for ServiceProvider plugins.
167          */
168         xmltooling::PluginManager<ServiceProvider,const xercesc::DOMElement*> ServiceProviderManager;
169
170         /**
171          * Manages factories for Handler plugins that implement SessionInitiator functionality.
172          */
173         xmltooling::PluginManager<Handler,const xercesc::DOMElement*> SessionInitiatorManager;
174
175         /**
176          * Manages factories for Handler plugins that implement SingleLogoutService functionality.
177          */
178         xmltooling::PluginManager<Handler,const xercesc::DOMElement*> SingleLogoutServiceManager;
179
180     protected:
181         SPConfig() : m_serviceProvider(NULL) {}
182         
183         /** Global ServiceProvider instance. */
184         ServiceProvider* m_serviceProvider;
185
186     private:
187         unsigned long m_features;
188     };
189
190 #if defined (_MSC_VER)
191     #pragma warning( pop )
192 #endif
193
194 };
195
196 #endif /* __shibsp_config_h__ */