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