8491d0f0258f0f18496e25a378ed758ed195b995
[shibboleth/cpp-opensaml.git] / saml / SAMLConfig.h
1 /*\r
2  *  Copyright 2001-2006 Internet2\r
3  * \r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 /**\r
18  * @file saml/SAMLConfig.h\r
19  * \r
20  * Library configuration \r
21  */\r
22 \r
23 #ifndef __saml_config_h__\r
24 #define __saml_config_h__\r
25 \r
26 #include <saml/base.h>\r
27 \r
28 #include <xmltooling/PluginManager.h>\r
29 #include <xmltooling/XMLToolingConfig.h>\r
30 \r
31 #include <string>\r
32 \r
33 /**\r
34  * @namespace opensaml\r
35  * Common classes for OpenSAML library\r
36  */\r
37 namespace opensaml {\r
38 \r
39     class SAML_API ArtifactMap;\r
40     class SAML_API MessageEncoder;\r
41     class SAML_API MessageDecoder;\r
42     class SAML_API ReplayCache;\r
43     class SAML_API SAMLArtifact;\r
44     class SAML_API TrustEngine;\r
45     class SAML_API URLEncoder;\r
46 \r
47     namespace saml2md {\r
48         class SAML_API MetadataProvider;\r
49         class SAML_API MetadataFilter;\r
50     };\r
51 \r
52 #if defined (_MSC_VER)\r
53     #pragma warning( push )\r
54     #pragma warning( disable : 4250 4251 )\r
55 #endif\r
56 \r
57     /**\r
58      * Singleton object that manages library startup/shutdown.configuration.\r
59      */\r
60     class SAML_API SAMLConfig\r
61     {\r
62     MAKE_NONCOPYABLE(SAMLConfig);\r
63     public:\r
64         virtual ~SAMLConfig() {}\r
65 \r
66         /**\r
67          * Returns the global configuration object for the library.\r
68          * \r
69          * @return reference to the global library configuration object\r
70          */\r
71         static SAMLConfig& getConfig();\r
72         \r
73         /**\r
74          * Initializes library\r
75          * \r
76          * Each process using the library MUST call this function exactly once\r
77          * before using any library classes. The flag controls whether this is the\r
78          * "dominant" library or not and can allow the SAML library to be loaded\r
79          * as an extension of XMLTooling rather than subsuming it.\r
80          * \r
81          * @param initXMLTooling true iff this method should initialize the XMLTooling layer\r
82          * @return true iff initialization was successful \r
83          */\r
84         virtual bool init(bool initXMLTooling=true)=0;\r
85         \r
86         /**\r
87          * Shuts down library\r
88          * \r
89          * Each process using the library SHOULD call this function exactly once\r
90          * before terminating itself. The flag controls whether this is the\r
91          * "dominant" library or not and can allow the SAML library to be loaded\r
92          * as an extension of XMLTooling rather than subsuming it.\r
93          * \r
94          * @param termXMLTooling true iff this method should shutdown the XMLTooling layer\r
95          */\r
96         virtual void term(bool termXMLTooling=true)=0;\r
97         \r
98         /**\r
99          * Sets the global ArtifactMap instance.\r
100          * This method must be externally synchronized with any code that uses the object.\r
101          * Any previously set object is destroyed.\r
102          * \r
103          * @param artifactMap   new ArtifactMap instance to store\r
104          */\r
105         void setArtifactMap(ArtifactMap* artifactMap);\r
106         \r
107         /**\r
108          * Returns the global ArtifactMap instance.\r
109          * \r
110          * @return  global ArtifactMap or NULL\r
111          */\r
112         ArtifactMap* getArtifactMap() const {\r
113             return m_artifactMap;\r
114         }\r
115 \r
116         /**\r
117          * Sets the global URLEncoder instance.\r
118          * This method must be externally synchronized with any code that uses the object.\r
119          * Any previously set object is destroyed.\r
120          * \r
121          * @param urlEncoder   new URLEncoder instance to store\r
122          */\r
123         void setURLEncoder(URLEncoder* urlEncoder);\r
124         \r
125         /**\r
126          * Returns the global URLEncoder instance.\r
127          * \r
128          * @return  global URLEncoder or NULL\r
129          */\r
130         URLEncoder* getURLEncoder() const {\r
131             return m_urlEncoder;\r
132         }\r
133         \r
134         /**\r
135          * Sets the global ReplayCache instance.\r
136          * This method must be externally synchronized with any code that uses the object.\r
137          * Any previously set object is destroyed.\r
138          * \r
139          * @param replayCache   new ReplayCache instance to store\r
140          */\r
141         void setReplayCache(ReplayCache* replayCache);\r
142 \r
143         /**\r
144          * Returns the global ReplayCache instance.\r
145          * \r
146          * @return  global ReplayCache or NULL\r
147          */\r
148         ReplayCache* getReplayCache() const {\r
149             return m_replayCache;\r
150         }\r
151         \r
152         /**\r
153          * Generate random information using the underlying security library\r
154          * \r
155          * @param buf   buffer for the information\r
156          * @param len   number of bytes to write into buffer\r
157          */\r
158         virtual void generateRandomBytes(void* buf, unsigned int len)=0;\r
159 \r
160         /**\r
161          * Generate random information using the underlying security library\r
162          * \r
163          * @param buf   string buffer for the information\r
164          * @param len   number of bytes to write into buffer\r
165          */\r
166         virtual void generateRandomBytes(std::string& buf, unsigned int len)=0;\r
167 \r
168         /**\r
169          * Generate a valid XML identifier of the form _X{32} where X is a\r
170          * random hex character. The caller is responsible for freeing the result.\r
171          * \r
172          * @return a valid null-terminated XML ID\r
173          */\r
174         virtual XMLCh* generateIdentifier()=0;\r
175         \r
176         /**\r
177          * Generate the SHA-1 hash of a string\r
178          * \r
179          * @param s     NULL-terminated string to hash\r
180          * @param toHex true iff the result should be encoded in hexadecimal form or left as raw bytes\r
181          *  \r
182          * @return  SHA-1 hash of the data\r
183          */\r
184         virtual std::string hashSHA1(const char* s, bool toHex=false)=0;\r
185 \r
186         /**\r
187          * Manages factories for MessageDecoder plugins.\r
188          */\r
189         xmltooling::PluginManager<MessageDecoder,const DOMElement*> MessageDecoderManager;\r
190 \r
191         /**\r
192          * Manages factories for MessageEncoder plugins.\r
193          */\r
194         xmltooling::PluginManager<MessageEncoder,const DOMElement*> MessageEncoderManager;        \r
195 \r
196         /**\r
197          * Manages factories for SAMLArtifact plugins.\r
198          */\r
199         xmltooling::PluginManager<SAMLArtifact,const char*> SAMLArtifactManager;\r
200 \r
201         /**\r
202          * Manages factories for TrustEngine plugins.\r
203          */\r
204         xmltooling::PluginManager<TrustEngine,const DOMElement*> TrustEngineManager;\r
205 \r
206         /**\r
207          * Manages factories for MetadataProvider plugins.\r
208          */\r
209         xmltooling::PluginManager<saml2md::MetadataProvider,const DOMElement*> MetadataProviderManager;\r
210         \r
211         /**\r
212          * Manages factories for MetadataFilter plugins.\r
213          */\r
214         xmltooling::PluginManager<saml2md::MetadataFilter,const DOMElement*> MetadataFilterManager;\r
215 \r
216     protected:\r
217         SAMLConfig() : m_artifactMap(NULL), m_urlEncoder(NULL), m_replayCache(NULL) {}\r
218         \r
219         /** Global ArtifactMap instance for use by artifact-related functions. */\r
220         ArtifactMap* m_artifactMap;\r
221 \r
222         /** Global URLEncoder instance for use by URL-related functions. */\r
223         URLEncoder* m_urlEncoder;\r
224         \r
225         /** Global ReplayCache instance. */\r
226         ReplayCache* m_replayCache;\r
227     };\r
228 \r
229 #if defined (_MSC_VER)\r
230     #pragma warning( pop )\r
231 #endif\r
232     \r
233 };\r
234 \r
235 #endif /* __saml_config_h__ */\r