Change license header, remove stale pkg files.
[shibboleth/cpp-opensaml.git] / saml / saml1 / core / Protocols.h
1 /**
2  * Licensed to the University Corporation for Advanced Internet
3  * Development, Inc. (UCAID) under one or more contributor license
4  * agreements. See the NOTICE file distributed with this work for
5  * additional information regarding copyright ownership.
6  *
7  * UCAID licenses this file to you under the Apache License,
8  * Version 2.0 (the "License"); you may not use this file except
9  * in compliance with the License. You may obtain a copy of the
10  * License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17  * either express or implied. See the License for the specific
18  * language governing permissions and limitations under the License.
19  */
20
21 /**
22  * @file saml/saml1/core/Protocols.h
23  *
24  * XMLObjects representing the SAML 1.x Protocols schema.
25  */
26
27 #ifndef __saml1_protocols_h__
28 #define __saml1_protocols_h__
29
30 #include <saml/RootObject.h>
31 #include <saml/util/SAMLConstants.h>
32
33 #include <xmltooling/ConcreteXMLObjectBuilder.h>
34 #include <xmltooling/ElementExtensibleXMLObject.h>
35
36 #define DECL_SAML1POBJECTBUILDER(cname) \
37     DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML1P_NS,samlconstants::SAML1P_PREFIX)
38
39 namespace xmltooling {
40     class XMLTOOL_API DateTime;
41 };
42
43 namespace xmlsignature {
44     class XMLTOOL_API KeyInfo;
45     class XMLTOOL_API Signature;
46 };
47
48 namespace opensaml {
49
50     namespace saml1 {
51         class SAML_API Action;
52         class SAML_API Assertion;
53         class SAML_API AssertionIDReference;
54         class SAML_API AttributeDesignator;
55         class SAML_API Evidence;
56         class SAML_API Subject;
57     };
58
59     /**
60      * @namespace opensaml::saml1p
61      * SAML 1.x protocol namespace
62      */
63     namespace saml1p {
64
65         DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionArtifact,Artifact,SAML 1.x AssertionArtifact element);
66         DECL_XMLOBJECT_SIMPLE(SAML_API,StatusMessage,Message,SAML 1.x StatusMessage element);
67
68         BEGIN_XMLOBJECT(SAML_API,RespondWith,xmltooling::XMLObject,SAML 1.x RespondWith element);
69             /** Gets the QName content of the element. */
70             virtual xmltooling::QName* getQName() const=0;
71             /** Sets the QName content of the element. */
72             virtual void setQName(const xmltooling::QName* qname)=0;
73         END_XMLOBJECT;
74
75         BEGIN_XMLOBJECT(SAML_API,Query,xmltooling::XMLObject,SAML 1.x Query element);
76         END_XMLOBJECT;
77
78         BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Query,SAML 1.x SubjectQuery element);
79             DECL_TYPED_FOREIGN_CHILD(Subject,saml1);
80         END_XMLOBJECT;
81
82         BEGIN_XMLOBJECT(SAML_API,AuthenticationQuery,SubjectQuery,SAML 1.x AuthenticationQuery element);
83             DECL_STRING_ATTRIB(AuthenticationMethod,AUTHENTICATIONMETHOD);
84             /** AuthenticationQueryType local name */
85             static const XMLCh TYPE_NAME[];
86         END_XMLOBJECT;
87
88         BEGIN_XMLOBJECT(SAML_API,AttributeQuery,SubjectQuery,SAML 1.x AttributeQuery element);
89             DECL_STRING_ATTRIB(Resource,RESOURCE);
90             DECL_TYPED_FOREIGN_CHILDREN(AttributeDesignator,saml1);
91             /** AttributeQueryType local name */
92             static const XMLCh TYPE_NAME[];
93         END_XMLOBJECT;
94
95         BEGIN_XMLOBJECT(SAML_API,AuthorizationDecisionQuery,SubjectQuery,SAML 1.x AuthorizationDecisionQuery element);
96             DECL_STRING_ATTRIB(Resource,RESOURCE);
97             DECL_TYPED_FOREIGN_CHILDREN(Action,saml1);
98             DECL_TYPED_FOREIGN_CHILD(Evidence,saml1);
99             /** AuthorizationDecisionQueryType local name */
100             static const XMLCh TYPE_NAME[];
101         END_XMLOBJECT;
102
103         BEGIN_XMLOBJECT(SAML_API,RequestAbstractType,RootObject,SAML 1.x RequestAbstractType base type);
104             DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
105             DECL_STRING_ATTRIB(RequestID,REQUESTID);
106             DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
107             DECL_TYPED_CHILDREN(RespondWith);
108             /** RequestAbstractType local name */
109             static const XMLCh TYPE_NAME[];
110         END_XMLOBJECT;
111
112         BEGIN_XMLOBJECT(SAML_API,Request,RequestAbstractType,SAML 1.x Request element);
113             DECL_TYPED_CHILD(Query);
114             DECL_TYPED_CHILD(SubjectQuery);
115             DECL_TYPED_CHILD(AuthenticationQuery);
116             DECL_TYPED_CHILD(AttributeQuery);
117             DECL_TYPED_CHILD(AuthorizationDecisionQuery);
118             DECL_TYPED_FOREIGN_CHILDREN(AssertionIDReference,saml1);
119             DECL_TYPED_CHILDREN(AssertionArtifact);
120             /** RequestType local name */
121             static const XMLCh TYPE_NAME[];
122         END_XMLOBJECT;
123
124         BEGIN_XMLOBJECT(SAML_API,StatusCode,xmltooling::XMLObject,SAML 1.x StatusCode element);
125             DECL_XMLOBJECT_ATTRIB(Value,VALUE,xmltooling::QName);
126             DECL_TYPED_CHILD(StatusCode);
127             /** StatusCodeType local name */
128             static const XMLCh TYPE_NAME[];
129             /** Success Status Code */
130             static xmltooling::QName SUCCESS;
131             /** Requester Error Status Code */
132             static xmltooling::QName REQUESTER;
133             /** Responder Error Status Code */
134             static xmltooling::QName RESPONDER;
135             /** Version Mismatch Error Status Code */
136             static xmltooling::QName VERSIONMISMATCH;
137         END_XMLOBJECT;
138
139         BEGIN_XMLOBJECT(SAML_API,StatusDetail,xmltooling::ElementExtensibleXMLObject,SAML 1.x StatusDetail element);
140             /** StatusDetailType local name */
141             static const XMLCh TYPE_NAME[];
142         END_XMLOBJECT;
143
144         BEGIN_XMLOBJECT(SAML_API,Status,xmltooling::XMLObject,SAML 1.x Status element);
145             DECL_TYPED_CHILD(StatusCode);
146             DECL_TYPED_CHILD(StatusMessage);
147             DECL_TYPED_CHILD(StatusDetail);
148             /** StatusType local name */
149             static const XMLCh TYPE_NAME[];
150         END_XMLOBJECT;
151
152         BEGIN_XMLOBJECT(SAML_API,ResponseAbstractType,RootObject,SAML 1.x ResponseAbstractType base type);
153             DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
154             DECL_STRING_ATTRIB(ResponseID,RESPONSEID);
155             DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
156             DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
157             DECL_STRING_ATTRIB(Recipient,RECIPIENT);
158             /** ResponseAbstractType local name */
159             static const XMLCh TYPE_NAME[];
160         END_XMLOBJECT;
161
162         BEGIN_XMLOBJECT(SAML_API,Response,ResponseAbstractType,SAML 1.x Response element);
163             DECL_TYPED_CHILD(Status);
164             DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml1);
165             /** ResponseType local name */
166             static const XMLCh TYPE_NAME[];
167         END_XMLOBJECT;
168
169         DECL_SAML1POBJECTBUILDER(AssertionArtifact);
170         DECL_SAML1POBJECTBUILDER(AttributeQuery);
171         DECL_SAML1POBJECTBUILDER(AuthenticationQuery);
172         DECL_SAML1POBJECTBUILDER(AuthorizationDecisionQuery);
173         DECL_SAML1POBJECTBUILDER(Request);
174         DECL_SAML1POBJECTBUILDER(RespondWith);
175         DECL_SAML1POBJECTBUILDER(Response);
176         DECL_SAML1POBJECTBUILDER(Status);
177         DECL_SAML1POBJECTBUILDER(StatusCode);
178         DECL_SAML1POBJECTBUILDER(StatusDetail);
179         DECL_SAML1POBJECTBUILDER(StatusMessage);
180
181         /**
182          * Builder for Query extension objects.
183          *
184          * This is customized to force the schema type to be specified.
185          */
186         class SAML_API QueryBuilder : public xmltooling::XMLObjectBuilder {
187         public:
188             virtual ~QueryBuilder() {}
189             /** Builder that allows element/type override. */
190 #ifdef HAVE_COVARIANT_RETURNS
191             virtual Query* buildObject(
192 #else
193             virtual xmltooling::XMLObject* buildObject(
194 #endif
195                 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
196                 ) const;
197
198             /** Singleton builder. */
199             static Query* buildQuery(const xmltooling::QName& schemaType) {
200                 const QueryBuilder* b = dynamic_cast<const QueryBuilder*>(
201                     XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML1P_NS,Query::LOCAL_NAME))
202                     );
203                 if (b) {
204 #ifdef HAVE_COVARIANT_RETURNS
205                     return b->buildObject(samlconstants::SAML1P_NS, Query::LOCAL_NAME, samlconstants::SAML1P_PREFIX, &schemaType);
206 #else
207                     return dynamic_cast<Query*>(b->buildObject(samlconstants::SAML1P_NS, Query::LOCAL_NAME, samlconstants::SAML1P_PREFIX, &schemaType));
208 #endif
209                 }
210                 throw xmltooling::XMLObjectException("Unable to obtain typed builder for Query.");
211             }
212         };
213
214         /**
215          * Registers builders and validators for SAML 1.x Protocol classes into the runtime.
216          */
217         void SAML_API registerProtocolClasses();
218     };
219 };
220
221 #endif /* __saml1_protocols_h__ */