Metadata filters, filter auto-registration, and unit tests.
[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/unicode.h>\r
30 #include <xmltooling/XMLToolingConfig.h>\r
31 \r
32 #include <string>\r
33 \r
34 /**\r
35  * @namespace opensaml\r
36  * Common classes for OpenSAML library\r
37  */\r
38 namespace opensaml {\r
39 \r
40     namespace saml2md {\r
41         class SAML_API MetadataProvider;\r
42         class SAML_API MetadataFilter;\r
43     };\r
44 \r
45 #if defined (_MSC_VER)\r
46     #pragma warning( push )\r
47     #pragma warning( disable : 4250 4251 )\r
48 #endif\r
49 \r
50     /**\r
51      * Singleton object that manages library startup/shutdown.configuration.\r
52      */\r
53     class SAML_API SAMLConfig\r
54     {\r
55     MAKE_NONCOPYABLE(SAMLConfig);\r
56     public:\r
57         virtual ~SAMLConfig() {}\r
58 \r
59         /**\r
60          * Returns the global configuration object for the library.\r
61          * \r
62          * @return reference to the global library configuration object\r
63          */\r
64         static SAMLConfig& getConfig();\r
65         \r
66         /**\r
67          * Initializes library\r
68          * \r
69          * Each process using the library MUST call this function exactly once\r
70          * before using any library classes.\r
71          * \r
72          * @return true iff initialization was successful \r
73          */\r
74         virtual bool init()=0;\r
75         \r
76         /**\r
77          * Shuts down library\r
78          * \r
79          * Each process using the library SHOULD call this function exactly once\r
80          * before terminating itself\r
81          */\r
82         virtual void term()=0;\r
83         \r
84         /**\r
85          * Generate random information using the underlying security library\r
86          * \r
87          * @param buf   buffer for the information\r
88          * @param len   number of bytes to write into buffer\r
89          */\r
90         virtual void generateRandomBytes(void* buf, unsigned int len)=0;\r
91 \r
92         /**\r
93          * Generate random information using the underlying security library\r
94          * \r
95          * @param buf   string buffer for the information\r
96          * @param len   number of bytes to write into buffer\r
97          */\r
98         virtual void generateRandomBytes(std::string& buf, unsigned int len)=0;\r
99 \r
100         /**\r
101          * Generate a valid XML identifier of the form _X{32} where X is a\r
102          * random hex character. The caller is responsible for freeing the result.\r
103          * \r
104          * @return a valid null-terminated XML ID\r
105          */\r
106         virtual XMLCh* generateIdentifier()=0;\r
107         \r
108         /**\r
109          * Manages factories for MetadataProvider plugins.\r
110          */\r
111         xmltooling::PluginManager<saml2md::MetadataProvider,const DOMElement*> MetadataProviderManager;\r
112         \r
113         /**\r
114          * Manages factories for MetadataFilter plugins.\r
115          */\r
116         xmltooling::PluginManager<saml2md::MetadataFilter,const DOMElement*> MetadataFilterManager;\r
117 \r
118     protected:\r
119         SAMLConfig() {}\r
120     };\r
121 \r
122 #if defined (_MSC_VER)\r
123     #pragma warning( pop )\r
124 #endif\r
125     \r
126 };\r
127 \r
128 #endif /* __saml_config_h__ */\r