2 * Copyright 2001-2006 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 * ProtocolsSchemaValidators.cpp
20 * Schema-based validators for SAML 1.x Protocols classes
24 #include "exceptions.h"
25 #include "saml1/core/Protocols.h"
27 using namespace opensaml::saml1;
28 using namespace opensaml;
29 using namespace xmltooling;
35 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,AssertionArtifact);
36 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,StatusMessage);
38 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,RespondWith);
39 XMLOBJECTVALIDATOR_REQUIRE(RespondWith,QName);
40 END_XMLOBJECTVALIDATOR;
42 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AuthenticationQuery);
43 XMLOBJECTVALIDATOR_REQUIRE(AuthenticationQuery,AuthenticationMethod);
44 XMLOBJECTVALIDATOR_REQUIRE(AuthenticationQuery,Subject);
45 END_XMLOBJECTVALIDATOR;
47 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AttributeQuery);
48 XMLOBJECTVALIDATOR_REQUIRE(AttributeQuery,Subject);
49 END_XMLOBJECTVALIDATOR;
51 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AuthorizationDecisionQuery);
52 XMLOBJECTVALIDATOR_REQUIRE(AuthorizationDecisionQuery,Subject);
53 XMLOBJECTVALIDATOR_REQUIRE(AuthorizationDecisionQuery,Resource);
54 XMLOBJECTVALIDATOR_NONEMPTY(AuthorizationDecisionQuery,Action);
55 END_XMLOBJECTVALIDATOR;
57 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Request);
58 XMLOBJECTVALIDATOR_REQUIRE(Request,RequestID);
59 XMLOBJECTVALIDATOR_REQUIRE(Request,IssueInstant);
61 if (ptr->getQuery()!=NULL)
63 if (!ptr->getAssertionIDReferences().empty())
65 if (!ptr->getAssertionArtifacts().empty())
68 throw ValidationException("Request must have either a query, >0 assertion references, or >0 artifacts.");
69 END_XMLOBJECTVALIDATOR;
71 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,StatusCode);
72 XMLOBJECTVALIDATOR_REQUIRE(StatusCode,Value);
73 END_XMLOBJECTVALIDATOR;
77 #define REGISTER_ELEMENT(cname) \
78 q=QName(SAMLConstants::SAML1P_NS,cname::LOCAL_NAME); \
79 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
80 Validator::registerValidator(q,new cname##SchemaValidator())
82 #define REGISTER_TYPE(cname) \
83 q=QName(SAMLConstants::SAML1P_NS,cname::TYPE_NAME); \
84 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
85 Validator::registerValidator(q,new cname##SchemaValidator())
87 #define REGISTER_ELEMENT_NOVAL(cname) \
88 q=QName(SAMLConstants::SAML1P_NS,cname::LOCAL_NAME); \
89 XMLObjectBuilder::registerBuilder(q,new cname##Builder());
91 #define REGISTER_TYPE_NOVAL(cname) \
92 q=QName(SAMLConstants::SAML1P_NS,cname::TYPE_NAME); \
93 XMLObjectBuilder::registerBuilder(q,new cname##Builder());
95 void opensaml::saml1::registerProtocolClasses() {
97 REGISTER_ELEMENT(AssertionArtifact);
98 REGISTER_ELEMENT(AttributeQuery);
99 REGISTER_ELEMENT(AuthenticationQuery);
100 REGISTER_ELEMENT(AuthorizationDecisionQuery);
101 REGISTER_ELEMENT(Request);
102 REGISTER_ELEMENT(RespondWith);
103 REGISTER_ELEMENT(StatusCode);
104 REGISTER_ELEMENT_NOVAL(StatusDetail);
105 REGISTER_ELEMENT(StatusMessage);
106 REGISTER_TYPE(AttributeQuery);
107 REGISTER_TYPE(AuthenticationQuery);
108 REGISTER_TYPE(AuthorizationDecisionQuery);
109 REGISTER_TYPE(Request);
110 REGISTER_TYPE(StatusCode);
111 REGISTER_TYPE_NOVAL(StatusDetail);