2 * Copyright 2001-2006 Internet2
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @file saml/SAMLConfig.h
20 * Library configuration
23 #ifndef __saml_config_h__
24 #define __saml_config_h__
26 #include <saml/base.h>
28 #include <xmltooling/PluginManager.h>
29 #include <xmltooling/XMLToolingConfig.h>
35 * Common classes for OpenSAML library
39 class SAML_API ArtifactMap;
40 class SAML_API MessageEncoder;
41 class SAML_API MessageDecoder;
42 class SAML_API SAMLArtifact;
43 class SAML_API SecurityPolicyRule;
44 class SAML_API TrustEngine;
45 class SAML_API URLEncoder;
48 class SAML_API MetadataProvider;
49 class SAML_API MetadataFilter;
52 #if defined (_MSC_VER)
53 #pragma warning( push )
54 #pragma warning( disable : 4250 4251 )
58 * Singleton object that manages library startup/shutdown.configuration.
60 class SAML_API SAMLConfig
62 MAKE_NONCOPYABLE(SAMLConfig);
64 virtual ~SAMLConfig() {}
67 * Returns the global configuration object for the library.
69 * @return reference to the global library configuration object
71 static SAMLConfig& getConfig();
76 * Each process using the library MUST call this function exactly once
77 * before using any library classes. The flag controls whether this is the
78 * "dominant" library or not and can allow the SAML library to be loaded
79 * as an extension of XMLTooling rather than subsuming it.
81 * @param initXMLTooling true iff this method should initialize the XMLTooling layer
82 * @return true iff initialization was successful
84 virtual bool init(bool initXMLTooling=true)=0;
89 * Each process using the library SHOULD call this function exactly once
90 * before terminating itself. The flag controls whether this is the
91 * "dominant" library or not and can allow the SAML library to be loaded
92 * as an extension of XMLTooling rather than subsuming it.
94 * @param termXMLTooling true iff this method should shutdown the XMLTooling layer
96 virtual void term(bool termXMLTooling=true)=0;
99 * Sets the global ArtifactMap instance.
100 * This method must be externally synchronized with any code that uses the object.
101 * Any previously set object is destroyed.
103 * @param artifactMap new ArtifactMap instance to store
105 void setArtifactMap(ArtifactMap* artifactMap);
108 * Returns the global ArtifactMap instance.
110 * @return global ArtifactMap or NULL
112 ArtifactMap* getArtifactMap() const {
113 return m_artifactMap;
117 * Sets the global URLEncoder instance.
118 * This method must be externally synchronized with any code that uses the object.
119 * Any previously set object is destroyed.
121 * @param urlEncoder new URLEncoder instance to store
123 void setURLEncoder(URLEncoder* urlEncoder);
126 * Returns the global URLEncoder instance.
128 * @return global URLEncoder or NULL
130 URLEncoder* getURLEncoder() const {
135 * Generate random information using the underlying security library
137 * @param buf buffer for the information
138 * @param len number of bytes to write into buffer
140 virtual void generateRandomBytes(void* buf, unsigned int len)=0;
143 * Generate random information using the underlying security library
145 * @param buf string buffer for the information
146 * @param len number of bytes to write into buffer
148 virtual void generateRandomBytes(std::string& buf, unsigned int len)=0;
151 * Generate a valid XML identifier of the form _X{32} where X is a
152 * random hex character. The caller is responsible for freeing the result.
154 * @return a valid null-terminated XML ID
156 virtual XMLCh* generateIdentifier()=0;
159 * Generate the SHA-1 hash of a string
161 * @param s NULL-terminated string to hash
162 * @param toHex true iff the result should be encoded in hexadecimal form or left as raw bytes
164 * @return SHA-1 hash of the data
166 virtual std::string hashSHA1(const char* s, bool toHex=false)=0;
168 /** Manages factories for MessageDecoder plugins. */
169 xmltooling::PluginManager<MessageDecoder,const DOMElement*> MessageDecoderManager;
171 /** Manages factories for MessageEncoder plugins. */
172 xmltooling::PluginManager<MessageEncoder,const DOMElement*> MessageEncoderManager;
174 /** Manages factories for SAMLArtifact plugins. */
175 xmltooling::PluginManager<SAMLArtifact,const char*> SAMLArtifactManager;
177 /** Manages factories for SecurityPolicyRule plugins. */
178 xmltooling::PluginManager<SecurityPolicyRule,const DOMElement*> SecurityPolicyRuleManager;
180 /** Manages factories for TrustEngine plugins. */
181 xmltooling::PluginManager<TrustEngine,const DOMElement*> TrustEngineManager;
183 /** Manages factories for MetadataProvider plugins. */
184 xmltooling::PluginManager<saml2md::MetadataProvider,const DOMElement*> MetadataProviderManager;
186 /** Manages factories for MetadataFilter plugins. */
187 xmltooling::PluginManager<saml2md::MetadataFilter,const DOMElement*> MetadataFilterManager;
190 SAMLConfig() : m_artifactMap(NULL), m_urlEncoder(NULL) {}
192 /** Global ArtifactMap instance for use by artifact-related functions. */
193 ArtifactMap* m_artifactMap;
195 /** Global URLEncoder instance for use by URL-related functions. */
196 URLEncoder* m_urlEncoder;
199 #if defined (_MSC_VER)
200 #pragma warning( pop )
205 #endif /* __saml_config_h__ */