2 * Copyright 2001-2009 Internet2
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @file saml/saml1/core/Protocols.h
20 * XMLObjects representing the SAML 1.x Protocols schema.
23 #ifndef __saml1_protocols_h__
24 #define __saml1_protocols_h__
26 #include <saml/RootObject.h>
27 #include <saml/util/SAMLConstants.h>
29 #include <xmltooling/ConcreteXMLObjectBuilder.h>
30 #include <xmltooling/ElementExtensibleXMLObject.h>
32 #define DECL_SAML1POBJECTBUILDER(cname) \
33 DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML1P_NS,samlconstants::SAML1P_PREFIX)
35 namespace xmltooling {
36 class XMLTOOL_API DateTime;
39 namespace xmlsignature {
40 class XMLTOOL_API KeyInfo;
41 class XMLTOOL_API Signature;
47 class SAML_API Action;
48 class SAML_API Assertion;
49 class SAML_API AssertionIDReference;
50 class SAML_API AttributeDesignator;
51 class SAML_API Evidence;
52 class SAML_API Subject;
56 * @namespace opensaml::saml1p
57 * SAML 1.x protocol namespace
61 DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionArtifact,Artifact,SAML 1.x AssertionArtifact element);
62 DECL_XMLOBJECT_SIMPLE(SAML_API,StatusMessage,Message,SAML 1.x StatusMessage element);
64 BEGIN_XMLOBJECT(SAML_API,RespondWith,xmltooling::XMLObject,SAML 1.x RespondWith element);
65 /** Gets the QName content of the element. */
66 virtual xmltooling::QName* getQName() const=0;
67 /** Sets the QName content of the element. */
68 virtual void setQName(const xmltooling::QName* qname)=0;
71 BEGIN_XMLOBJECT(SAML_API,Query,xmltooling::XMLObject,SAML 1.x Query element);
74 BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Query,SAML 1.x SubjectQuery element);
75 DECL_TYPED_FOREIGN_CHILD(Subject,saml1);
78 BEGIN_XMLOBJECT(SAML_API,AuthenticationQuery,SubjectQuery,SAML 1.x AuthenticationQuery element);
79 DECL_STRING_ATTRIB(AuthenticationMethod,AUTHENTICATIONMETHOD);
80 /** AuthenticationQueryType local name */
81 static const XMLCh TYPE_NAME[];
84 BEGIN_XMLOBJECT(SAML_API,AttributeQuery,SubjectQuery,SAML 1.x AttributeQuery element);
85 DECL_STRING_ATTRIB(Resource,RESOURCE);
86 DECL_TYPED_FOREIGN_CHILDREN(AttributeDesignator,saml1);
87 /** AttributeQueryType local name */
88 static const XMLCh TYPE_NAME[];
91 BEGIN_XMLOBJECT(SAML_API,AuthorizationDecisionQuery,SubjectQuery,SAML 1.x AuthorizationDecisionQuery element);
92 DECL_STRING_ATTRIB(Resource,RESOURCE);
93 DECL_TYPED_FOREIGN_CHILDREN(Action,saml1);
94 DECL_TYPED_FOREIGN_CHILD(Evidence,saml1);
95 /** AuthorizationDecisionQueryType local name */
96 static const XMLCh TYPE_NAME[];
99 BEGIN_XMLOBJECT(SAML_API,RequestAbstractType,RootObject,SAML 1.x RequestAbstractType base type);
100 DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
101 DECL_STRING_ATTRIB(RequestID,REQUESTID);
102 DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
103 DECL_TYPED_CHILDREN(RespondWith);
104 /** RequestAbstractType local name */
105 static const XMLCh TYPE_NAME[];
108 BEGIN_XMLOBJECT(SAML_API,Request,RequestAbstractType,SAML 1.x Request element);
109 DECL_TYPED_CHILD(Query);
110 DECL_TYPED_CHILD(SubjectQuery);
111 DECL_TYPED_CHILD(AuthenticationQuery);
112 DECL_TYPED_CHILD(AttributeQuery);
113 DECL_TYPED_CHILD(AuthorizationDecisionQuery);
114 DECL_TYPED_FOREIGN_CHILDREN(AssertionIDReference,saml1);
115 DECL_TYPED_CHILDREN(AssertionArtifact);
116 /** RequestType local name */
117 static const XMLCh TYPE_NAME[];
120 BEGIN_XMLOBJECT(SAML_API,StatusCode,xmltooling::XMLObject,SAML 1.x StatusCode element);
121 DECL_XMLOBJECT_ATTRIB(Value,VALUE,xmltooling::QName);
122 DECL_TYPED_CHILD(StatusCode);
123 /** StatusCodeType local name */
124 static const XMLCh TYPE_NAME[];
125 /** Success Status Code */
126 static xmltooling::QName SUCCESS;
127 /** Requester Error Status Code */
128 static xmltooling::QName REQUESTER;
129 /** Responder Error Status Code */
130 static xmltooling::QName RESPONDER;
131 /** Version Mismatch Error Status Code */
132 static xmltooling::QName VERSIONMISMATCH;
135 BEGIN_XMLOBJECT(SAML_API,StatusDetail,xmltooling::ElementExtensibleXMLObject,SAML 1.x StatusDetail element);
136 /** StatusDetailType local name */
137 static const XMLCh TYPE_NAME[];
140 BEGIN_XMLOBJECT(SAML_API,Status,xmltooling::XMLObject,SAML 1.x Status element);
141 DECL_TYPED_CHILD(StatusCode);
142 DECL_TYPED_CHILD(StatusMessage);
143 DECL_TYPED_CHILD(StatusDetail);
144 /** StatusType local name */
145 static const XMLCh TYPE_NAME[];
148 BEGIN_XMLOBJECT(SAML_API,ResponseAbstractType,RootObject,SAML 1.x ResponseAbstractType base type);
149 DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
150 DECL_STRING_ATTRIB(ResponseID,RESPONSEID);
151 DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
152 DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
153 DECL_STRING_ATTRIB(Recipient,RECIPIENT);
154 /** ResponseAbstractType local name */
155 static const XMLCh TYPE_NAME[];
158 BEGIN_XMLOBJECT(SAML_API,Response,ResponseAbstractType,SAML 1.x Response element);
159 DECL_TYPED_CHILD(Status);
160 DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml1);
161 /** ResponseType local name */
162 static const XMLCh TYPE_NAME[];
165 DECL_SAML1POBJECTBUILDER(AssertionArtifact);
166 DECL_SAML1POBJECTBUILDER(AttributeQuery);
167 DECL_SAML1POBJECTBUILDER(AuthenticationQuery);
168 DECL_SAML1POBJECTBUILDER(AuthorizationDecisionQuery);
169 DECL_SAML1POBJECTBUILDER(Request);
170 DECL_SAML1POBJECTBUILDER(RespondWith);
171 DECL_SAML1POBJECTBUILDER(Response);
172 DECL_SAML1POBJECTBUILDER(Status);
173 DECL_SAML1POBJECTBUILDER(StatusCode);
174 DECL_SAML1POBJECTBUILDER(StatusDetail);
175 DECL_SAML1POBJECTBUILDER(StatusMessage);
178 * Builder for Query extension objects.
180 * This is customized to force the schema type to be specified.
182 class SAML_API QueryBuilder : public xmltooling::XMLObjectBuilder {
184 virtual ~QueryBuilder() {}
185 /** Builder that allows element/type override. */
186 #ifdef HAVE_COVARIANT_RETURNS
187 virtual Query* buildObject(
189 virtual xmltooling::XMLObject* buildObject(
191 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
194 /** Singleton builder. */
195 static Query* buildQuery(const xmltooling::QName& schemaType) {
196 const QueryBuilder* b = dynamic_cast<const QueryBuilder*>(
197 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML1P_NS,Query::LOCAL_NAME))
200 #ifdef HAVE_COVARIANT_RETURNS
201 return b->buildObject(samlconstants::SAML1P_NS, Query::LOCAL_NAME, samlconstants::SAML1P_PREFIX, &schemaType);
203 return dynamic_cast<Query*>(b->buildObject(samlconstants::SAML1P_NS, Query::LOCAL_NAME, samlconstants::SAML1P_PREFIX, &schemaType));
206 throw xmltooling::XMLObjectException("Unable to obtain typed builder for Query.");
211 * Registers builders and validators for SAML 1.x Protocol classes into the runtime.
213 void SAML_API registerProtocolClasses();
217 #endif /* __saml1_protocols_h__ */