SAML 2.0 Core protocol namespace interfaces (header) and impl placeholder
[shibboleth/cpp-opensaml.git] / saml / saml2 / core / Protocols.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 Protocols.h
19  * 
20  * XMLObjects representing the SAML 2.0 Protocols schema
21  */
22
23 #ifndef __saml2_protocols_h__
24 #define __saml2_protocols_h__
25
26 #include <saml/saml2/core/Assertions.h>
27
28
29 #define DECL_SAML2POBJECTBUILDER(cname) \
30     DECL_XMLOBJECTBUILDER(SAML_API,cname,opensaml::SAMLConstants::SAML20P_NS,opensaml::SAMLConstants::SAML20P_PREFIX)
31
32 namespace opensaml {
33
34     /**
35      * @namespace saml2p
36      * SAML 2.0 protocol namespace
37      */
38     namespace saml2p {
39
40         DECL_XMLOBJECT_SIMPLE(SAML_API,Artifact,Artifact,SAML 2.0 Artifact element);
41         DECL_XMLOBJECT_SIMPLE(SAML_API,GetComplete,GetComplete,SAML 2.0 GetComplete element);
42         DECL_XMLOBJECT_SIMPLE(SAML_API,NewID,NewID,SAML 2.0 NewID element);
43         DECL_XMLOBJECT_SIMPLE(SAML_API,RequesterID,RequesterID,SAML 2.0 RequesterID element);
44         DECL_XMLOBJECT_SIMPLE(SAML_API,SessionIndex,SessionIndex,SAML 2.0 SessionIndex element);
45         DECL_XMLOBJECT_SIMPLE(SAML_API,StatusMessage,Message,SAML 2.0 StatusMessage element);
46
47         BEGIN_XMLOBJECT(SAML_API,Extensions,xmltooling::ElementProxy,SAML 2.0 protocol Extensions element);
48             /** ExtensionsType local name */
49             static const XMLCh TYPE_NAME[];
50         END_XMLOBJECT;
51
52         BEGIN_XMLOBJECT(SAML_API,Request,SignableObject,SAML 2.0 Request element);
53             DECL_STRING_ATTRIB(ID,ID);
54             DECL_STRING_ATTRIB(Version,VER);
55             DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
56             DECL_STRING_ATTRIB(Destination,DESTINATION);
57             DECL_STRING_ATTRIB(Consent,CONSENT);
58             DECL_TYPED_FOREIGN_CHILD(Issuer,saml2);
59             DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
60             DECL_TYPED_CHILD(Extensions);
61             /** RequestAbstractType local name */
62             static const XMLCh TYPE_NAME[];
63         END_XMLOBJECT;
64
65         BEGIN_XMLOBJECT(SAML_API,StatusCode,xmltooling::XMLObject,SAML 2.0 StatusCode element);
66             DECL_STRING_ATTRIB(Value,VALUE);
67             DECL_TYPED_CHILD(StatusCode);
68             /** StatusCodeType local name */
69             static const XMLCh TYPE_NAME[];
70         END_XMLOBJECT;
71
72         BEGIN_XMLOBJECT(SAML_API,StatusDetail,xmltooling::ElementProxy,SAML 2.0 StatusDetail element);
73             /** StatusDetailType local name */
74             static const XMLCh TYPE_NAME[];
75         END_XMLOBJECT;
76
77         BEGIN_XMLOBJECT(SAML_API,Status,xmltooling::XMLObject,SAML 2.0 Status element);
78             DECL_TYPED_CHILD(StatusCode);
79             DECL_TYPED_CHILD(StatusMessage);
80             DECL_TYPED_CHILD(StatusDetail);
81             /** StatusType local name */
82             static const XMLCh TYPE_NAME[];
83         END_XMLOBJECT;
84
85         BEGIN_XMLOBJECT(SAML_API,StatusResponse,SignableObject,SAML 2.0 StatusResponse element);
86             DECL_STRING_ATTRIB(ID,ID);
87             DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
88             DECL_STRING_ATTRIB(Version,VER);
89             DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
90             DECL_STRING_ATTRIB(Destination,DESTINATION);
91             DECL_STRING_ATTRIB(Consent,CONSENT);
92             DECL_TYPED_FOREIGN_CHILD(Issuer,saml2);
93             DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
94             DECL_TYPED_CHILD(Extensions);
95             DECL_TYPED_CHILD(Status);
96             /** StatusResponseType local name */
97             static const XMLCh TYPE_NAME[];
98         END_XMLOBJECT;
99
100         BEGIN_XMLOBJECT(SAML_API,AssertionIDRequest,Request,SAML 2.0 AssertionIDRequest element);
101             DECL_TYPED_FOREIGN_CHILDREN(AssertionIDRef,saml2);
102             /** AssertionIDRequest local name */
103             static const XMLCh TYPE_NAME[];
104         END_XMLOBJECT;
105
106         BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Request,SAML 2.0 SubjectQuery element);
107             DECL_TYPED_FOREIGN_CHILD(Subject,saml2);
108             /** SubjectQueryType local name */
109             static const XMLCh TYPE_NAME[];
110         END_XMLOBJECT;
111
112         BEGIN_XMLOBJECT(SAML_API,RequestedAuthnContext,xmltooling::XMLObject,SAML 2.0 RequestedAuthnContext element);
113             //TODO whether, and how, to enforce the controlled vocabulary (schema enumeration) for the Comparison attrib, as in the Java ? 
114             DECL_STRING_ATTRIB(Comparison,COMPARISON);
115             DECL_TYPED_FOREIGN_CHILDREN(AuthnContextClassRef,saml2);
116             DECL_TYPED_FOREIGN_CHILDREN(AuthnContextDeclRef,saml2);
117             /** exact Comparison */
118             static const XMLCh COMPARISON_EXACT[];
119             /** minimum Comparison */
120             static const XMLCh COMPARISON_MINIMUM[];
121             /** maximum Comparison */
122             static const XMLCh COMPARISON_MAXIMUM[];
123             /** better Comparison */
124             static const XMLCh COMPARISON_BETTER[];
125             /** RequestedAuthnContextType local name */
126             static const XMLCh TYPE_NAME[];
127         END_XMLOBJECT;
128
129         BEGIN_XMLOBJECT(SAML_API,AuthnQuery,SubjectQuery,SAML 2.0 AuthnQuery element);
130             DECL_STRING_ATTRIB(SessionIndex,SESSIONINDEX);
131             DECL_TYPED_CHILD(RequestedAuthnContext);
132             /** AuthnQueryType local name */
133             static const XMLCh TYPE_NAME[];
134         END_XMLOBJECT;
135
136         BEGIN_XMLOBJECT(SAML_API,AttributeQuery,SubjectQuery,SAML 2.0 AttributeQuery element);
137             DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
138             /** AttributeQueryType local name */
139             static const XMLCh TYPE_NAME[];
140         END_XMLOBJECT;
141         
142         BEGIN_XMLOBJECT(SAML_API,AuthzDecisionQuery,SubjectQuery,SAML 2.0 AuthzDecisionQuery element);
143             DECL_STRING_ATTRIB(Resource,RESOURCE);
144             DECL_TYPED_FOREIGN_CHILDREN(Action,saml2);
145             DECL_TYPED_FOREIGN_CHILD(Evidence,saml2);
146             /** AuthzDecisionQueryType local name */
147             static const XMLCh TYPE_NAME[];
148         END_XMLOBJECT;
149
150         BEGIN_XMLOBJECT(SAML_API,NameIDPolicy,xmltooling::XMLObject,SAML 2.0 NameIDPolicy element);
151             DECL_STRING_ATTRIB(Format,FORMAT);
152             DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
153             DECL_BOOLEAN_ATTRIB(AllowCreate,ALLOWCREATE);
154             /** NameIDPolicyType local name */
155             static const XMLCh TYPE_NAME[];
156         END_XMLOBJECT;
157
158         BEGIN_XMLOBJECT(SAML_API,IDPEntry,xmltooling::XMLObject,SAML2.0 IDPEntry element);
159             DECL_STRING_ATTRIB(ProviderID,PROVIDERID);
160             DECL_STRING_ATTRIB(Name,NAME);
161             DECL_STRING_ATTRIB(Loc,LOC);
162             /** IDPEntryType local name */
163             static const XMLCh TYPE_NAME[];
164         END_XMLOBJECT;
165
166         BEGIN_XMLOBJECT(SAML_API,IDPList,xmltooling::XMLObject,SAML 2.0 IDPList element);
167             DECL_TYPED_CHILD(IDPEntry);
168             DECL_TYPED_CHILD(GetComplete);
169             /** IDPListType local name */
170             static const XMLCh TYPE_NAME[];
171         END_XMLOBJECT;
172
173         BEGIN_XMLOBJECT(SAML_API,Scoping,xmltooling::XMLObject,SAML 2.0 Scoping element);
174             DECL_INTEGER_ATTRIB(ProxyCount,PROXYCOUNT);
175             DECL_TYPED_CHILD(IDPList);
176             DECL_TYPED_CHILDREN(RequesterID);
177             /** ScopingType local name */
178             static const XMLCh TYPE_NAME[];
179         END_XMLOBJECT;
180
181         BEGIN_XMLOBJECT(SAML_API,AuthnRequest,Request,SAML 2.0 AuthnRequest element);
182             DECL_BOOLEAN_ATTRIB(ForceAuthn,FORCEAUTHN);
183             DECL_BOOLEAN_ATTRIB(IsPassive,ISPASSIVE);
184             DECL_STRING_ATTRIB(ProtocolBinding,PROTOCOLBINDING);
185             DECL_INTEGER_ATTRIB(AssertionConsumerServiceIndex,ASSERTIONCONSUMERSERVICEINDEX);
186             DECL_STRING_ATTRIB(AssertionConsumerServiceURL,ASSERTIONCONSUMERSERVICEURL);
187             DECL_INTEGER_ATTRIB(AttributeConsumingServiceIndex,ATTRIBUTECONSUMINGSERVICEINDEX);
188             DECL_STRING_ATTRIB(ProviderName,PROVIDERNAME);
189
190             DECL_TYPED_FOREIGN_CHILD(Subject,saml2);
191             DECL_TYPED_CHILD(NameIDPolicy);
192             DECL_TYPED_FOREIGN_CHILD(Conditions,saml2);
193             DECL_TYPED_CHILD(RequestedAuthnContext);
194             DECL_TYPED_CHILD(Scoping);
195             /** AuthnRequestType local name */
196             static const XMLCh TYPE_NAME[];
197         END_XMLOBJECT;
198
199         BEGIN_XMLOBJECT(SAML_API,Response,StatusResponse,SAML 2.0 Response element);
200             DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml2);
201             DECL_TYPED_FOREIGN_CHILDREN(EncryptedAssertion,saml2);
202             /** ResponseType local name */
203             static const XMLCh TYPE_NAME[];
204         END_XMLOBJECT;
205
206         BEGIN_XMLOBJECT(SAML_API,ArtifactResolve,Request,SAML 2.0 ArtifactResolve element);
207             DECL_TYPED_CHILD(Artifact);
208             /** ArtifiactResolveType local name */
209             static const XMLCh TYPE_NAME[];
210         END_XMLOBJECT;
211
212         BEGIN_XMLOBJECT(SAML_API,ArtifactResponse,StatusResponse,SAML 2.0 ArtifactResponse element);
213             /** ArtifiactResponseType local name */
214             static const XMLCh TYPE_NAME[];
215         END_XMLOBJECT;
216
217         BEGIN_XMLOBJECT(SAML_API,Terminate,xmltooling::XMLObject,SAML 2.0 Terminate element);
218             /** TerminateType local name */
219             static const XMLCh TYPE_NAME[];
220         END_XMLOBJECT;
221
222         BEGIN_XMLOBJECT(SAML_API,NewEncryptedID,saml2::EncryptedElementType,SAML 2.0 EncryptedNewID element);
223         END_XMLOBJECT;
224
225         BEGIN_XMLOBJECT(SAML_API,ManageNameIDRequest,Request,SAML 2.0 ManageNameIDRequest element);
226             DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
227             DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
228             DECL_TYPED_CHILD(NewID);
229             DECL_TYPED_CHILD(NewEncryptedID);
230             DECL_TYPED_CHILD(Terminate);
231             /** ManageNameIDRequestType local name */
232             static const XMLCh TYPE_NAME[];
233         END_XMLOBJECT;
234
235         BEGIN_XMLOBJECT(SAML_API,ManageNameIDResponse,StatusResponse,SAML 2.0 ManageNameIDResponse element);
236         END_XMLOBJECT;
237         
238         BEGIN_XMLOBJECT(SAML_API,LogoutRequest,Request,SAML 2.0 LogoutRequest element);
239             DECL_STRING_ATTRIB(Reason,REASON);
240             DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
241             DECL_TYPED_FOREIGN_CHILD(BaseID,saml2);
242             DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
243             DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
244             DECL_TYPED_CHILDREN(SessionIndex);
245             /** LogoutRequestType local name */
246             static const XMLCh TYPE_NAME[];
247         END_XMLOBJECT;
248
249         BEGIN_XMLOBJECT(SAML_API,LogoutResponse,StatusResponse,SAML 2.0 LogoutResponse element);
250         END_XMLOBJECT;
251
252         BEGIN_XMLOBJECT(SAML_API,NameIDMappingRequest,Request,SAML 2.0 NameIDMappingRequest element);
253             DECL_TYPED_FOREIGN_CHILD(BaseID,saml2);
254             DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
255             DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
256             DECL_TYPED_CHILD(NameIDPolicy);
257             /** NameIDMappingRequestType local name */
258             static const XMLCh TYPE_NAME[];
259         END_XMLOBJECT;
260
261         BEGIN_XMLOBJECT(SAML_API,NameIDMappingResponse,StatusResponse,SAML 2.0 NameIDMappingResponse element);
262             DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
263             DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
264             /** NameIDMappingResponseType local name */
265             static const XMLCh TYPE_NAME[];
266         END_XMLOBJECT;
267
268         //TODO custom builders, if any
269
270         // Builders
271         DECL_SAML2POBJECTBUILDER(Artifact);
272         DECL_SAML2POBJECTBUILDER(ArtifactResolve);
273         DECL_SAML2POBJECTBUILDER(ArtifactResponse);
274         DECL_SAML2POBJECTBUILDER(AssertionIDRequest);
275         DECL_SAML2POBJECTBUILDER(AttributeQuery);
276         DECL_SAML2POBJECTBUILDER(AuthnQuery);
277         DECL_SAML2POBJECTBUILDER(AuthnRequest);
278         DECL_SAML2POBJECTBUILDER(AuthzDecisionQuery);
279         DECL_SAML2POBJECTBUILDER(Extensions);
280         DECL_SAML2POBJECTBUILDER(GetComplete);
281         DECL_SAML2POBJECTBUILDER(IDPEntry);
282         DECL_SAML2POBJECTBUILDER(IDPList);
283         DECL_SAML2POBJECTBUILDER(LogoutRequest);
284         DECL_SAML2POBJECTBUILDER(LogoutResponse);
285         DECL_SAML2POBJECTBUILDER(ManageNameIDRequest);
286         DECL_SAML2POBJECTBUILDER(ManageNameIDResponse);
287         DECL_SAML2POBJECTBUILDER(NameIDMappingRequest);
288         DECL_SAML2POBJECTBUILDER(NameIDMappingResponse);
289         DECL_SAML2POBJECTBUILDER(NameIDPolicy);
290         DECL_SAML2POBJECTBUILDER(NewEncryptedID);
291         DECL_SAML2POBJECTBUILDER(NewID);
292         DECL_SAML2POBJECTBUILDER(RequestedAuthnContext);
293         DECL_SAML2POBJECTBUILDER(RequesterID);
294         DECL_SAML2POBJECTBUILDER(Response);
295         DECL_SAML2POBJECTBUILDER(Scoping);
296         DECL_SAML2POBJECTBUILDER(SessionIndex);
297         DECL_SAML2POBJECTBUILDER(Status);
298         DECL_SAML2POBJECTBUILDER(StatusCode);
299         DECL_SAML2POBJECTBUILDER(StatusDetail);
300         DECL_SAML2POBJECTBUILDER(StatusMessage);
301         DECL_SAML2POBJECTBUILDER(Terminate);
302
303         
304         /**
305          * Registers builders and validators for Protocol classes into the runtime.
306          */
307         void SAML_API registerProtocolClasses();
308     };
309 };
310
311 #endif /* __saml2_protocols_h__ */