2 * Copyright 2001-2007 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/XMLObjectBuilder.h>
30 #include <xmltooling/signature/KeyInfo.h>
31 #include <xmltooling/signature/Signature.h>
32 #include <xmltooling/util/DateTime.h>
34 #define DECL_SAML1POBJECTBUILDER(cname) \
35 DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML1P_NS,samlconstants::SAML1P_PREFIX)
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;
49 * @namespace opensaml::saml1p
50 * SAML 1.x protocol namespace
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);
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;
64 BEGIN_XMLOBJECT(SAML_API,Query,xmltooling::XMLObject,SAML 1.x Query element);
67 BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Query,SAML 1.x SubjectQuery element);
68 DECL_TYPED_FOREIGN_CHILD(Subject,saml1);
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[];
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[];
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[];
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 /** RequestAbstractType local name */
98 static const XMLCh TYPE_NAME[];
101 BEGIN_XMLOBJECT(SAML_API,Request,RequestAbstractType,SAML 1.x Request element);
102 DECL_TYPED_CHILD(Query);
103 DECL_TYPED_CHILD(SubjectQuery);
104 DECL_TYPED_CHILD(AuthenticationQuery);
105 DECL_TYPED_CHILD(AttributeQuery);
106 DECL_TYPED_CHILD(AuthorizationDecisionQuery);
107 DECL_TYPED_FOREIGN_CHILDREN(AssertionIDReference,saml1);
108 DECL_TYPED_CHILDREN(AssertionArtifact);
109 /** RequestType local name */
110 static const XMLCh TYPE_NAME[];
113 BEGIN_XMLOBJECT(SAML_API,StatusCode,xmltooling::XMLObject,SAML 1.x StatusCode element);
114 DECL_XMLOBJECT_ATTRIB(Value,VALUE,xmltooling::QName);
115 DECL_TYPED_CHILD(StatusCode);
116 /** StatusCodeType local name */
117 static const XMLCh TYPE_NAME[];
118 /** Success Status Code */
119 static xmltooling::QName SUCCESS;
120 /** Requester Error Status Code */
121 static xmltooling::QName REQUESTER;
122 /** Responder Error Status Code */
123 static xmltooling::QName RESPONDER;
124 /** Version Mismatch Error Status Code */
125 static xmltooling::QName VERSIONMISMATCH;
128 BEGIN_XMLOBJECT(SAML_API,StatusDetail,xmltooling::ElementExtensibleXMLObject,SAML 1.x StatusDetail element);
129 /** StatusDetailType local name */
130 static const XMLCh TYPE_NAME[];
133 BEGIN_XMLOBJECT(SAML_API,Status,xmltooling::XMLObject,SAML 1.x Status element);
134 DECL_TYPED_CHILD(StatusCode);
135 DECL_TYPED_CHILD(StatusMessage);
136 DECL_TYPED_CHILD(StatusDetail);
137 /** StatusType local name */
138 static const XMLCh TYPE_NAME[];
141 BEGIN_XMLOBJECT(SAML_API,ResponseAbstractType,RootObject,SAML 1.x ResponseAbstractType base type);
142 DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
143 DECL_STRING_ATTRIB(ResponseID,RESPONSEID);
144 DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
145 DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
146 DECL_STRING_ATTRIB(Recipient,RECIPIENT);
147 /** ResponseAbstractType local name */
148 static const XMLCh TYPE_NAME[];
151 BEGIN_XMLOBJECT(SAML_API,Response,ResponseAbstractType,SAML 1.x Response element);
152 DECL_TYPED_CHILD(Status);
153 DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml1);
154 /** ResponseType local name */
155 static const XMLCh TYPE_NAME[];
158 DECL_SAML1POBJECTBUILDER(AssertionArtifact);
159 DECL_SAML1POBJECTBUILDER(AttributeQuery);
160 DECL_SAML1POBJECTBUILDER(AuthenticationQuery);
161 DECL_SAML1POBJECTBUILDER(AuthorizationDecisionQuery);
162 DECL_SAML1POBJECTBUILDER(Request);
163 DECL_SAML1POBJECTBUILDER(RespondWith);
164 DECL_SAML1POBJECTBUILDER(Response);
165 DECL_SAML1POBJECTBUILDER(Status);
166 DECL_SAML1POBJECTBUILDER(StatusCode);
167 DECL_SAML1POBJECTBUILDER(StatusDetail);
168 DECL_SAML1POBJECTBUILDER(StatusMessage);
171 * Builder for Query extension objects.
173 * This is customized to force the schema type to be specified.
175 class SAML_API QueryBuilder : public xmltooling::XMLObjectBuilder {
177 virtual ~QueryBuilder() {}
178 /** Builder that allows element/type override. */
179 #ifdef HAVE_COVARIANT_RETURNS
180 virtual Query* buildObject(
182 virtual xmltooling::XMLObject* buildObject(
184 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
187 /** Singleton builder. */
188 static Query* buildQuery(const xmltooling::QName& schemaType) {
189 const QueryBuilder* b = dynamic_cast<const QueryBuilder*>(
190 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML1P_NS,Query::LOCAL_NAME))
193 #ifdef HAVE_COVARIANT_RETURNS
194 return b->buildObject(samlconstants::SAML1P_NS, Query::LOCAL_NAME, samlconstants::SAML1P_PREFIX, &schemaType);
196 return dynamic_cast<Query*>(b->buildObject(samlconstants::SAML1P_NS, Query::LOCAL_NAME, samlconstants::SAML1P_PREFIX, &schemaType));
199 throw xmltooling::XMLObjectException("Unable to obtain typed builder for Query.");
204 * Registers builders and validators for SAML 1.x Protocol classes into the runtime.
206 void SAML_API registerProtocolClasses();
210 #endif /* __saml1_protocols_h__ */