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