ReplayCache, some decoder work, and merged schema validators into one suite.
[shibboleth/cpp-opensaml.git] / saml / saml1 / 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 saml/saml1/core/Protocols.h
19  * 
20  * XMLObjects representing the SAML 1.x Protocols schema
21  */
22
23 #ifndef __saml1_protocols_h__
24 #define __saml1_protocols_h__
25
26 #include <saml/saml1/core/Assertions.h>
27
28 #define DECL_SAML1POBJECTBUILDER(cname) \
29     DECL_XMLOBJECTBUILDER(SAML_API,cname,opensaml::SAMLConstants::SAML1P_NS,opensaml::SAMLConstants::SAML1P_PREFIX)
30
31 namespace opensaml {
32
33     /**
34      * @namespace opensaml::saml1p
35      * SAML 1.x protocol namespace
36      */
37     namespace saml1p {
38         
39         DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionArtifact,Artifact,SAML 1.x AssertionArtifact element);
40         DECL_XMLOBJECT_SIMPLE(SAML_API,StatusMessage,Message,SAML 1.x StatusMessage element);
41         
42         BEGIN_XMLOBJECT(SAML_API,RespondWith,xmltooling::XMLObject,SAML 1.x RespondWith element);
43             /** Gets the QName content of the element. */
44             virtual xmltooling::QName* getQName() const=0;
45             /** Sets the QName content of the element. */
46             virtual void setQName(const xmltooling::QName* qname)=0;
47         END_XMLOBJECT;
48
49         BEGIN_XMLOBJECT(SAML_API,Query,xmltooling::XMLObject,SAML 1.x Query element);
50         END_XMLOBJECT;
51
52         BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Query,SAML 1.x SubjectQuery element);
53             DECL_TYPED_FOREIGN_CHILD(Subject,saml1);
54         END_XMLOBJECT;
55
56         BEGIN_XMLOBJECT(SAML_API,AuthenticationQuery,SubjectQuery,SAML 1.x AuthenticationQuery element);
57             DECL_STRING_ATTRIB(AuthenticationMethod,AUTHENTICATIONMETHOD);
58             /** AuthenticationQueryType local name */
59             static const XMLCh TYPE_NAME[];
60         END_XMLOBJECT;
61
62         BEGIN_XMLOBJECT(SAML_API,AttributeQuery,SubjectQuery,SAML 1.x AttributeQuery element);
63             DECL_STRING_ATTRIB(Resource,RESOURCE);
64             DECL_TYPED_FOREIGN_CHILDREN(AttributeDesignator,saml1);
65             /** AttributeQueryType local name */
66             static const XMLCh TYPE_NAME[];
67         END_XMLOBJECT;
68
69         BEGIN_XMLOBJECT(SAML_API,AuthorizationDecisionQuery,SubjectQuery,SAML 1.x AuthorizationDecisionQuery element);
70             DECL_STRING_ATTRIB(Resource,RESOURCE);
71             DECL_TYPED_FOREIGN_CHILDREN(Action,saml1);
72             DECL_TYPED_FOREIGN_CHILD(Evidence,saml1);
73             /** AuthorizationDecisionQueryType local name */
74             static const XMLCh TYPE_NAME[];
75         END_XMLOBJECT;
76
77         BEGIN_XMLOBJECT(SAML_API,RequestAbstractType,SignableObject,SAML 1.x RequestAbstractType base type);
78             DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
79             DECL_STRING_ATTRIB(RequestID,REQUESTID);
80             DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
81             DECL_TYPED_CHILDREN(RespondWith);
82             DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
83             /** RequestAbstractType local name */
84             static const XMLCh TYPE_NAME[];
85         END_XMLOBJECT;
86
87         BEGIN_XMLOBJECT(SAML_API,Request,RequestAbstractType,SAML 1.x Request element);
88             DECL_TYPED_CHILD(Query);
89             DECL_TYPED_CHILD(SubjectQuery);
90             DECL_TYPED_CHILD(AuthenticationQuery);
91             DECL_TYPED_CHILD(AttributeQuery);
92             DECL_TYPED_CHILD(AuthorizationDecisionQuery);
93             DECL_TYPED_FOREIGN_CHILDREN(AssertionIDReference,saml1);
94             DECL_TYPED_CHILDREN(AssertionArtifact);
95             /** RequestType local name */
96             static const XMLCh TYPE_NAME[];
97         END_XMLOBJECT;
98
99         BEGIN_XMLOBJECT(SAML_API,StatusCode,xmltooling::XMLObject,SAML 1.x StatusCode element);
100             DECL_XMLOBJECT_ATTRIB(Value,VALUE,xmltooling::QName);
101             DECL_TYPED_CHILD(StatusCode);
102             /** StatusCodeType local name */
103             static const XMLCh TYPE_NAME[];
104             /** Success Status Code */
105             static xmltooling::QName SUCCESS;
106             /** Requester Error Status Code */
107             static xmltooling::QName REQUESTER;
108             /** Responder Error Status Code */
109             static xmltooling::QName RESPONDER;
110             /** Version Mismatch Error Status Code */
111             static xmltooling::QName VERSIONMISMATCH;
112         END_XMLOBJECT;
113
114         BEGIN_XMLOBJECT(SAML_API,StatusDetail,xmltooling::XMLObject,SAML 1.x StatusDetail element);
115             DECL_XMLOBJECT_CHILDREN(Detail);
116             /** StatusDetailType local name */
117             static const XMLCh TYPE_NAME[];
118         END_XMLOBJECT;
119
120         BEGIN_XMLOBJECT(SAML_API,Status,xmltooling::XMLObject,SAML 1.x Status element);
121             DECL_TYPED_CHILD(StatusCode);
122             DECL_TYPED_CHILD(StatusMessage);
123             DECL_TYPED_CHILD(StatusDetail);
124             /** StatusType local name */
125             static const XMLCh TYPE_NAME[];
126         END_XMLOBJECT;
127
128         BEGIN_XMLOBJECT(SAML_API,ResponseAbstractType,SignableObject,SAML 1.x ResponseAbstractType base type);
129             DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
130             DECL_STRING_ATTRIB(ResponseID,RESPONSEID);
131             DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
132             DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
133             DECL_STRING_ATTRIB(Recipient,RECIPIENT);
134             DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
135             /** ResponseAbstractType local name */
136             static const XMLCh TYPE_NAME[];
137         END_XMLOBJECT;
138
139         BEGIN_XMLOBJECT(SAML_API,Response,ResponseAbstractType,SAML 1.x Response element);
140             DECL_TYPED_CHILD(Status);
141             DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml1);
142             /** ResponseType local name */
143             static const XMLCh TYPE_NAME[];
144         END_XMLOBJECT;
145
146         DECL_SAML1POBJECTBUILDER(AssertionArtifact);
147         DECL_SAML1POBJECTBUILDER(AttributeQuery);
148         DECL_SAML1POBJECTBUILDER(AuthenticationQuery);
149         DECL_SAML1POBJECTBUILDER(AuthorizationDecisionQuery);
150         DECL_SAML1POBJECTBUILDER(Request);
151         DECL_SAML1POBJECTBUILDER(RespondWith);
152         DECL_SAML1POBJECTBUILDER(Response);
153         DECL_SAML1POBJECTBUILDER(Status);
154         DECL_SAML1POBJECTBUILDER(StatusCode);
155         DECL_SAML1POBJECTBUILDER(StatusDetail);
156         DECL_SAML1POBJECTBUILDER(StatusMessage);
157         
158         /**
159          * Registers builders and validators for SAML 1.x Protocol classes into the runtime.
160          */
161         void SAML_API registerProtocolClasses();
162     };
163 };
164
165 #endif /* __saml1_protocols_h__ */