Add XML objects for DelegationRestriction and EntityAttributes extensions.
[shibboleth/cpp-opensaml.git] / saml / saml2 / core / impl / Assertions20SchemaValidators.cpp
index 458b5b1..70b02e5 100644 (file)
@@ -72,6 +72,22 @@ namespace opensaml {
             }
         END_XMLOBJECTVALIDATOR;
 
+        BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Delegate);
+            int count=0;
+            if (ptr->getBaseID())
+                count++;
+            if (ptr->getNameID())
+                count++;
+            if (ptr->getEncryptedID())
+                count++;
+            if (count != 1)
+                throw ValidationException("Delegate must contain exactly one identifier element.");
+        END_XMLOBJECTVALIDATOR;
+
+        BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,DelegationRestrictionType);
+            XMLOBJECTVALIDATOR_NONEMPTY(DelegationRestrictionType,Delegate);
+        END_XMLOBJECTVALIDATOR;
+
         BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Conditions);
             if (!ptr->hasChildren()) {
                 XMLOBJECTVALIDATOR_ONEOF(Conditions,NotBefore,NotOnOrAfter);
@@ -249,4 +265,15 @@ void opensaml::saml2::registerAssertionClasses() {
     REGISTER_TYPE(Subject);
     REGISTER_TYPE(SubjectConfirmation);
     REGISTER_TYPE(SubjectLocality);
+
+    q=xmltooling::QName(samlconstants::SAML20_DELEGATION_CONDITION_NS,Delegate::LOCAL_NAME);
+    XMLObjectBuilder::registerBuilder(q,new DelegateBuilder());
+    SchemaValidators.registerValidator(q,new DelegateSchemaValidator());
+    q=xmltooling::QName(samlconstants::SAML20_DELEGATION_CONDITION_NS,Delegate::TYPE_NAME);
+    XMLObjectBuilder::registerBuilder(q,new DelegateBuilder());
+    SchemaValidators.registerValidator(q,new DelegateSchemaValidator());
+
+    q=xmltooling::QName(samlconstants::SAML20_DELEGATION_CONDITION_NS,DelegationRestrictionType::TYPE_NAME);
+    XMLObjectBuilder::registerBuilder(q,new DelegationRestrictionTypeBuilder());
+    SchemaValidators.registerValidator(q,new DelegationRestrictionTypeSchemaValidator());
 }