#include "internal.h"
#include "exceptions.h"
#include "saml2/metadata/Metadata.h"
+#include "saml2/metadata/MetadataKeyInfoIterator.h"
-#include <xmltooling/AbstractChildlessElement.h>
#include <xmltooling/AbstractComplexElement.h>
#include <xmltooling/AbstractElementProxy.h>
#include <xmltooling/AbstractSimpleElement.h>
using namespace xmlsignature;
using namespace xmltooling;
using namespace std;
+using xmlconstants::XMLSIG_NS;
+using xmlconstants::XML_BOOL_NULL;
+using samlconstants::SAML20_NS;
+using samlconstants::SAML20MD_NS;
#if defined (_MSC_VER)
#pragma warning( push )
DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,SurName);
DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,TelephoneNumber);
+ DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,ActionNamespace);
+ DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,SourceID);
+
class SAML_DLLLOCAL localizedNameTypeImpl : public virtual localizedNameType,
public AbstractSimpleElement,
- public AbstractChildlessElement,
public AbstractDOMCachingXMLObject,
public AbstractXMLObjectMarshaller,
public AbstractXMLObjectUnmarshaller
}
IMPL_XMLOBJECT_CLONE(localizedNameType);
- IMPL_XMLOBJECT_CONTENT;
IMPL_STRING_ATTRIB(Lang);
protected:
void marshallAttributes(DOMElement* domElement) const {
- MARSHALL_STRING_ATTRIB(Lang,LANG,XMLConstants::XML_NS);
+ MARSHALL_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS);
}
void processAttribute(const DOMAttr* attribute) {
- PROC_STRING_ATTRIB(Lang,LANG,XMLConstants::XML_NS);
+ PROC_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS);
AbstractXMLObjectUnmarshaller::processAttribute(attribute);
}
};
class SAML_DLLLOCAL localizedURITypeImpl : public virtual localizedURIType,
public AbstractSimpleElement,
- public AbstractChildlessElement,
public AbstractDOMCachingXMLObject,
public AbstractXMLObjectMarshaller,
public AbstractXMLObjectUnmarshaller
}
IMPL_XMLOBJECT_CLONE(localizedURIType);
- IMPL_XMLOBJECT_CONTENT;
IMPL_STRING_ATTRIB(Lang);
protected:
void marshallAttributes(DOMElement* domElement) const {
- MARSHALL_STRING_ATTRIB(Lang,LANG,XMLConstants::XML_NS);
+ MARSHALL_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS);
}
void processAttribute(const DOMAttr* attribute) {
- PROC_STRING_ATTRIB(Lang,LANG,XMLConstants::XML_NS);
+ PROC_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS);
AbstractXMLObjectUnmarshaller::processAttribute(attribute);
}
};
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
// Unknown child.
const XMLCh* nsURI=root->getNamespaceURI();
- if (!XMLString::equals(nsURI,SAMLConstants::SAML20MD_NS) && nsURI && *nsURI) {
+ if (!XMLString::equals(nsURI,SAML20MD_NS) && nsURI && *nsURI) {
getXMLObjects().push_back(childXMLObject);
return;
}
}
OrganizationImpl(const OrganizationImpl& src)
- : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ : AbstractXMLObject(src), AbstractComplexElement(src),
+ AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
init();
if (src.getExtensions())
setExtensions(src.getExtensions()->cloneExtensions());
protected:
void marshallAttributes(DOMElement* domElement) const {
- // Take care of wildcard.
- for (map<QName,XMLCh*>::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) {
- DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart());
- if (i->first.hasPrefix())
- attr->setPrefix(i->first.getPrefix());
- attr->setNodeValue(i->second);
- domElement->setAttributeNode(attr);
- }
+ marshallExtensionAttributes(domElement);
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(OrganizationName,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(OrganizationDisplayName,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(OrganizationURL,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(OrganizationName,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(OrganizationDisplayName,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(OrganizationURL,SAML20MD_NS,false);
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
void processAttribute(const DOMAttr* attribute) {
- QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix());
- setAttribute(q,attribute->getNodeValue());
+ unmarshallExtensionAttribute(attribute);
}
};
}
ContactPersonImpl(const ContactPersonImpl& src)
- : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ : AbstractXMLObject(src), AbstractComplexElement(src),
+ AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
init();
if (src.getExtensions())
setExtensions(src.getExtensions()->cloneExtensions());
IMPL_TYPED_CHILDREN(EmailAddress,m_pos_TelephoneNumber);
IMPL_TYPED_CHILDREN(TelephoneNumber,m_children.end());
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),CONTACTTYPE_ATTRIB_NAME)) {
setContactType(value);
return;
}
}
- AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value);
+ AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID);
}
protected:
void marshallAttributes(DOMElement* domElement) const {
MARSHALL_STRING_ATTRIB(ContactType,CONTACTTYPE,NULL);
-
- // Take care of wildcard.
- for (map<QName,XMLCh*>::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) {
- DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart());
- if (i->first.hasPrefix())
- attr->setPrefix(i->first.getPrefix());
- attr->setNodeValue(i->second);
- domElement->setAttributeNode(attr);
- }
+ marshallExtensionAttributes(domElement);
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILD(Company,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILD(GivenName,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILD(SurName,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(EmailAddress,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(TelephoneNumber,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false);
+ PROC_TYPED_CHILD(Company,SAML20MD_NS,false);
+ PROC_TYPED_CHILD(GivenName,SAML20MD_NS,false);
+ PROC_TYPED_CHILD(SurName,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(EmailAddress,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(TelephoneNumber,SAML20MD_NS,false);
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
void processAttribute(const DOMAttr* attribute) {
- QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix());
- setAttribute(q,attribute->getNodeValue());
+ unmarshallExtensionAttribute(attribute);
}
};
class SAML_DLLLOCAL AdditionalMetadataLocationImpl : public virtual AdditionalMetadataLocation,
public AbstractSimpleElement,
- public AbstractChildlessElement,
public AbstractDOMCachingXMLObject,
public AbstractXMLObjectMarshaller,
public AbstractXMLObjectUnmarshaller
}
IMPL_XMLOBJECT_CLONE(AdditionalMetadataLocation);
- IMPL_XMLOBJECT_CONTENT;
IMPL_STRING_ATTRIB(Namespace);
protected:
init();
}
- KeyDescriptorImpl(const KeyDescriptorImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ KeyDescriptorImpl(const KeyDescriptorImpl& src)
+ : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
init();
setUse(src.getUse());
if (src.getKeyInfo())
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature,XMLConstants::XMLSIG_NS,false);
- PROC_TYPED_FOREIGN_CHILDREN(EncryptionMethod,xmlencryption,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature,XMLSIG_NS,false);
+ PROC_TYPED_FOREIGN_CHILDREN(EncryptionMethod,xmlencryption,SAML20MD_NS,false);
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
IMPL_STRING_ATTRIB(Location);
IMPL_STRING_ATTRIB(ResponseLocation);
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),BINDING_ATTRIB_NAME)) {
setBinding(value);
return;
}
}
- AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value);
+ AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID);
}
protected:
void marshallAttributes(DOMElement* domElement) const {
MARSHALL_STRING_ATTRIB(Binding,BINDING,NULL);
MARSHALL_STRING_ATTRIB(Location,LOCATION,NULL);
MARSHALL_STRING_ATTRIB(ResponseLocation,RESPONSELOCATION,NULL);
-
- // Take care of wildcard.
- for (map<QName,XMLCh*>::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) {
- DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart());
- if (i->first.hasPrefix())
- attr->setPrefix(i->first.getPrefix());
- attr->setNodeValue(i->second);
- domElement->setAttributeNode(attr);
- }
+ marshallExtensionAttributes(domElement);
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
// Unknown child.
const XMLCh* nsURI=root->getNamespaceURI();
- if (!XMLString::equals(nsURI,SAMLConstants::SAML20MD_NS) && nsURI && *nsURI) {
+ if (!XMLString::equals(nsURI,SAML20MD_NS) && nsURI && *nsURI) {
getXMLObjects().push_back(childXMLObject);
return;
}
-
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
void processAttribute(const DOMAttr* attribute) {
- QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix());
- setAttribute(q,attribute->getNodeValue());
+ unmarshallExtensionAttribute(attribute);
}
};
{
void init() {
m_Index=NULL;
- m_isDefault=XMLConstants::XML_BOOL_NULL;
+ m_isDefault=XML_BOOL_NULL;
}
protected:
IMPL_INTEGER_ATTRIB(Index);
IMPL_BOOLEAN_ATTRIB(isDefault);
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),INDEX_ATTRIB_NAME)) {
setIndex(value);
return;
}
}
- EndpointTypeImpl::setAttribute(qualifiedName, value);
+ EndpointTypeImpl::setAttribute(qualifiedName, value, ID);
}
protected:
}
RoleDescriptorImpl(const RoleDescriptorImpl& src)
- : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ : AbstractXMLObject(src), AbstractComplexElement(src),
+ AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
init();
setID(src.getID());
setProtocolSupportEnumeration(src.getProtocolSupportEnumeration());
}
}
- const XMLCh* getId() const {
- return getID();
- }
-
//IMPL_TYPED_CHILD(Signature);
// Need customized setter.
protected:
m_Signature->setContentReference(new opensaml::ContentReference(*this));
}
- IMPL_STRING_ATTRIB(ID);
+ KeyInfoIterator* getKeyInfoIterator() const {
+ return new MetadataKeyInfoIterator(*this);
+ }
+
+ std::string getName() const {
+ const EntityDescriptor* parent = dynamic_cast<const EntityDescriptor*>(getParent());
+ if (parent) {
+ char* ch = toUTF8(parent->getEntityID());
+ if (ch) {
+ string s(ch);
+ delete[] ch;
+ return s;
+ }
+ }
+ return "";
+ }
+
+ IMPL_ID_ATTRIB(ID);
IMPL_STRING_ATTRIB(ProtocolSupportEnumeration);
IMPL_STRING_ATTRIB(ErrorURL);
- IMPL_DATETIME_ATTRIB(ValidUntil,LLONG_MAX);
+ IMPL_DATETIME_ATTRIB(ValidUntil,SAMLTIME_MAX);
IMPL_DATETIME_ATTRIB(CacheDuration,0);
IMPL_TYPED_CHILD(Extensions);
IMPL_TYPED_CHILDREN(KeyDescriptor,m_pos_Organization);
return false;
}
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),ID_ATTRIB_NAME)) {
setID(value);
return;
}
}
- AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value);
+ AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID);
}
protected:
MARSHALL_STRING_ATTRIB(ErrorURL,ERRORURL,NULL);
MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,NULL);
MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,NULL);
-
- // Take care of wildcard.
- for (map<QName,XMLCh*>::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) {
- DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart());
- if (i->first.hasPrefix())
- attr->setPrefix(i->first.getPrefix());
- attr->setNodeValue(i->second);
- domElement->setAttributeNode(attr);
- }
+ marshallExtensionAttributes(domElement);
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLConstants::XMLSIG_NS,false);
- PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(KeyDescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILD(Organization,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(ContactPerson,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLSIG_NS,false);
+ PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(KeyDescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILD(Organization,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(ContactPerson,SAML20MD_NS,false);
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
void processAttribute(const DOMAttr* attribute) {
PROC_ID_ATTRIB(ID,ID,NULL);
- QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix());
- setAttribute(q,attribute->getNodeValue());
+ unmarshallExtensionAttribute(attribute);
}
};
protected:
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILDREN(ArtifactResolutionService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(SingleLogoutService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(ManageNameIDService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(ArtifactResolutionService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(SingleLogoutService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(ManageNameIDService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false);
RoleDescriptorImpl::processChildElement(childXMLObject,root);
}
};
list<XMLObject*>::iterator m_pos_AttributeProfile;
void init() {
- m_WantAuthnRequestsSigned=XMLConstants::XML_BOOL_NULL;
+ m_WantAuthnRequestsSigned=XML_BOOL_NULL;
m_children.push_back(NULL);
m_children.push_back(NULL);
m_children.push_back(NULL);
IMPL_TYPED_CHILDREN(AttributeProfile,m_pos_AttributeProfile);
IMPL_TYPED_FOREIGN_CHILDREN(Attribute,saml2,m_children.end());
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),WANTAUTHNREQUESTSSIGNED_ATTRIB_NAME)) {
setWantAuthnRequestsSigned(value);
return;
}
}
- RoleDescriptorImpl::setAttribute(qualifiedName, value);
+ RoleDescriptorImpl::setAttribute(qualifiedName, value, ID);
}
protected:
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILDREN(SingleSignOnService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(NameIDMappingService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AssertionIDRequestService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AttributeProfile,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAMLConstants::SAML20_NS,false);
+ PROC_TYPED_CHILDREN(SingleSignOnService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(NameIDMappingService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AssertionIDRequestService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AttributeProfile,SAML20MD_NS,false);
+ PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAML20_NS,false);
SSODescriptorTypeImpl::processChildElement(childXMLObject,root);
}
};
{
void init() {
m_Name=m_NameFormat=m_FriendlyName=NULL;
- m_isRequired=XMLConstants::XML_BOOL_NULL;
+ m_isRequired=XML_BOOL_NULL;
}
public:
virtual ~RequestedAttributeImpl() {
}
RequestedAttributeImpl(const RequestedAttributeImpl& src)
- : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ : AbstractXMLObject(src), AbstractComplexElement(src),
+ AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
init();
setName(src.getName());
setNameFormat(src.getNameFormat());
IMPL_BOOLEAN_ATTRIB(isRequired);
IMPL_XMLOBJECT_CHILDREN(AttributeValue,m_children.end());
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),NAME_ATTRIB_NAME)) {
setName(value);
return;
}
}
- AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value);
+ AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID);
}
protected:
MARSHALL_STRING_ATTRIB(NameFormat,NAMEFORMAT,NULL);
MARSHALL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME,NULL);
MARSHALL_BOOLEAN_ATTRIB(isRequired,ISREQUIRED,NULL);
-
- // Take care of wildcard.
- for (map<QName,XMLCh*>::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) {
- DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart());
- if (i->first.hasPrefix())
- attr->setPrefix(i->first.getPrefix());
- attr->setNodeValue(i->second);
- domElement->setAttributeNode(attr);
- }
+ marshallExtensionAttributes(domElement);
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
}
void processAttribute(const DOMAttr* attribute) {
- QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix());
- setAttribute(q,attribute->getNodeValue());
+ unmarshallExtensionAttribute(attribute);
}
};
void init() {
m_Index=NULL;
- m_isDefault=XMLConstants::XML_BOOL_NULL;
+ m_isDefault=XML_BOOL_NULL;
m_children.push_back(NULL);
m_children.push_back(NULL);
m_pos_ServiceDescription=m_children.begin();
}
AttributeConsumingServiceImpl(const AttributeConsumingServiceImpl& src)
- : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
init();
setIndex(src.m_Index);
isDefault(src.m_isDefault);
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILDREN(ServiceName,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(ServiceDescription,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(RequestedAttribute,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(ServiceName,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(ServiceDescription,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(RequestedAttribute,SAML20MD_NS,false);
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
list<XMLObject*>::iterator m_pos_AssertionConsumerService;
void init() {
- m_AuthnRequestsSigned=XMLConstants::XML_BOOL_NULL;
- m_WantAssertionsSigned=XMLConstants::XML_BOOL_NULL;
+ m_AuthnRequestsSigned=XML_BOOL_NULL;
+ m_WantAssertionsSigned=XML_BOOL_NULL;
m_children.push_back(NULL);
m_pos_AssertionConsumerService=m_pos_NameIDFormat;
++m_pos_AssertionConsumerService;
IMPL_TYPED_CHILDREN(AssertionConsumerService,m_pos_AssertionConsumerService);
IMPL_TYPED_CHILDREN(AttributeConsumingService,m_children.end());
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),AUTHNREQUESTSSIGNED_ATTRIB_NAME)) {
setAuthnRequestsSigned(value);
return;
}
}
- RoleDescriptorImpl::setAttribute(qualifiedName, value);
+ RoleDescriptorImpl::setAttribute(qualifiedName, value, ID);
}
protected:
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILDREN(AssertionConsumerService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AttributeConsumingService,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AssertionConsumerService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AttributeConsumingService,SAML20MD_NS,false);
SSODescriptorTypeImpl::processChildElement(childXMLObject,root);
}
};
protected:
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILDREN(AuthnQueryService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AssertionIDRequestService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AuthnQueryService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AssertionIDRequestService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false);
RoleDescriptorImpl::processChildElement(childXMLObject,root);
}
};
protected:
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILDREN(AuthzService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AssertionIDRequestService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AuthzService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AssertionIDRequestService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false);
RoleDescriptorImpl::processChildElement(childXMLObject,root);
}
};
protected:
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_CHILDREN(AttributeService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AssertionIDRequestService,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AttributeProfile,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAMLConstants::SAML20_NS,false);
+ PROC_TYPED_CHILDREN(AttributeService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AssertionIDRequestService,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AttributeProfile,SAML20MD_NS,false);
+ PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAML20_NS,false);
+ RoleDescriptorImpl::processChildElement(childXMLObject,root);
+ }
+ };
+
+ class SAML_DLLLOCAL QueryDescriptorTypeImpl : public virtual QueryDescriptorType, public RoleDescriptorImpl
+ {
+ void init() {
+ m_WantAssertionsSigned=XML_BOOL_NULL;
+ m_children.push_back(NULL);
+ m_pos_NameIDFormat=m_pos_ContactPerson;
+ ++m_pos_NameIDFormat;
+ }
+
+ protected:
+ list<XMLObject*>::iterator m_pos_NameIDFormat;
+
+ QueryDescriptorTypeImpl() {
+ init();
+ }
+
+ public:
+ virtual ~QueryDescriptorTypeImpl() {}
+
+ QueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
+ init();
+ }
+
+ QueryDescriptorTypeImpl(const QueryDescriptorTypeImpl& src) : AbstractXMLObject(src), RoleDescriptorImpl(src) {
+ init();
+ WantAssertionsSigned(src.m_WantAssertionsSigned);
+ VectorOf(NameIDFormat) y=getNameIDFormats();
+ for (vector<NameIDFormat*>::const_iterator m=src.m_NameIDFormats.begin(); m!=src.m_NameIDFormats.end(); m++) {
+ if (*m) {
+ y.push_back((*m)->cloneNameIDFormat());
+ }
+ }
+ }
+
+ IMPL_BOOLEAN_ATTRIB(WantAssertionsSigned);
+ IMPL_TYPED_CHILDREN(NameIDFormat,m_pos_NameIDFormat);
+
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
+ if (!qualifiedName.hasNamespaceURI()) {
+ if (XMLString::equals(qualifiedName.getLocalPart(),WANTASSERTIONSSIGNED_ATTRIB_NAME)) {
+ setWantAssertionsSigned(value);
+ return;
+ }
+ }
+ RoleDescriptorImpl::setAttribute(qualifiedName, value, ID);
+ }
+
+ protected:
+ void marshallAttributes(DOMElement* domElement) const {
+ MARSHALL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,NULL);
+ RoleDescriptorImpl::marshallAttributes(domElement);
+ }
+
+ void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+ PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false);
RoleDescriptorImpl::processChildElement(childXMLObject,root);
}
};
+ class SAML_DLLLOCAL AuthnQueryDescriptorTypeImpl : public virtual AuthnQueryDescriptorType, public QueryDescriptorTypeImpl
+ {
+ public:
+ virtual ~AuthnQueryDescriptorTypeImpl() {}
+
+ AuthnQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ AuthnQueryDescriptorTypeImpl(const AuthnQueryDescriptorTypeImpl& src) : AbstractXMLObject(src), QueryDescriptorTypeImpl(src) {}
+
+ IMPL_XMLOBJECT_CLONE(AuthnQueryDescriptorType);
+ QueryDescriptorType* cloneQueryDescriptorType() const {
+ return new AuthnQueryDescriptorTypeImpl(*this);
+ }
+ RoleDescriptor* cloneRoleDescriptor() const {
+ return new AuthnQueryDescriptorTypeImpl(*this);
+ }
+ };
+
+ class SAML_DLLLOCAL AttributeQueryDescriptorTypeImpl : public virtual AttributeQueryDescriptorType, public QueryDescriptorTypeImpl
+ {
+ public:
+ virtual ~AttributeQueryDescriptorTypeImpl() {}
+
+ AttributeQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ AttributeQueryDescriptorTypeImpl(const AttributeQueryDescriptorTypeImpl& src)
+ : AbstractXMLObject(src), QueryDescriptorTypeImpl(src) {
+ VectorOf(AttributeConsumingService) w=getAttributeConsumingServices();
+ for (vector<AttributeConsumingService*>::const_iterator j=src.m_AttributeConsumingServices.begin(); j!=src.m_AttributeConsumingServices.end(); j++) {
+ if (*j) {
+ w.push_back((*j)->cloneAttributeConsumingService());
+ }
+ }
+ }
+
+ IMPL_XMLOBJECT_CLONE(AttributeQueryDescriptorType);
+ QueryDescriptorType* cloneQueryDescriptorType() const {
+ return new AttributeQueryDescriptorTypeImpl(*this);
+ }
+ RoleDescriptor* cloneRoleDescriptor() const {
+ return new AttributeQueryDescriptorTypeImpl(*this);
+ }
+
+ IMPL_TYPED_CHILDREN(AttributeConsumingService,m_children.end());
+
+ protected:
+ void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+ PROC_TYPED_CHILDREN(AttributeConsumingService,SAML20MD_NS,false);
+ QueryDescriptorTypeImpl::processChildElement(childXMLObject,root);
+ }
+ };
+
+ class SAML_DLLLOCAL AuthzDecisionQueryDescriptorTypeImpl : public virtual AuthzDecisionQueryDescriptorType, public QueryDescriptorTypeImpl
+ {
+ public:
+ virtual ~AuthzDecisionQueryDescriptorTypeImpl() {}
+
+ AuthzDecisionQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ AuthzDecisionQueryDescriptorTypeImpl(const AuthzDecisionQueryDescriptorTypeImpl& src)
+ : AbstractXMLObject(src), QueryDescriptorTypeImpl(src) {
+ VectorOf(ActionNamespace) w=getActionNamespaces();
+ for (vector<ActionNamespace*>::const_iterator j=src.m_ActionNamespaces.begin(); j!=src.m_ActionNamespaces.end(); j++) {
+ if (*j) {
+ w.push_back((*j)->cloneActionNamespace());
+ }
+ }
+ }
+
+ IMPL_XMLOBJECT_CLONE(AuthzDecisionQueryDescriptorType);
+ QueryDescriptorType* cloneQueryDescriptorType() const {
+ return new AuthzDecisionQueryDescriptorTypeImpl(*this);
+ }
+ RoleDescriptor* cloneRoleDescriptor() const {
+ return new AuthzDecisionQueryDescriptorTypeImpl(*this);
+ }
+
+ IMPL_TYPED_CHILDREN(ActionNamespace,m_children.end());
+
+ protected:
+ void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+ PROC_TYPED_CHILDREN(ActionNamespace,samlconstants::SAML20MD_QUERY_EXT_NS,false);
+ QueryDescriptorTypeImpl::processChildElement(childXMLObject,root);
+ }
+ };
+
class SAML_DLLLOCAL AffiliationDescriptorImpl : public virtual AffiliationDescriptor,
public virtual SignableObject,
public AbstractComplexElement,
}
AffiliationDescriptorImpl(const AffiliationDescriptorImpl& src)
- : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ : AbstractXMLObject(src), AbstractComplexElement(src),
+ AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
init();
setID(src.getID());
setAffiliationOwnerID(src.getAffiliationOwnerID());
IMPL_XMLOBJECT_CLONE(AffiliationDescriptor);
- const XMLCh* getId() const {
- return getID();
- }
-
//IMPL_TYPED_CHILD(Signature);
// Need customized setter.
protected:
m_Signature->setContentReference(new opensaml::ContentReference(*this));
}
- IMPL_STRING_ATTRIB(ID);
+ IMPL_ID_ATTRIB(ID);
IMPL_STRING_ATTRIB(AffiliationOwnerID);
- IMPL_DATETIME_ATTRIB(ValidUntil,LLONG_MAX);
+ IMPL_DATETIME_ATTRIB(ValidUntil,SAMLTIME_MAX);
IMPL_DATETIME_ATTRIB(CacheDuration,0);
IMPL_TYPED_CHILD(Extensions);
IMPL_TYPED_CHILDREN(AffiliateMember,m_pos_AffiliateMember);
IMPL_TYPED_CHILDREN(KeyDescriptor,m_children.end());
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),ID_ATTRIB_NAME)) {
setID(value);
return;
}
}
- AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value);
+ AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID);
}
protected:
MARSHALL_STRING_ATTRIB(AffiliationOwnerID,AFFILIATIONOWNERID,NULL);
MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,NULL);
MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,NULL);
-
- // Take care of wildcard.
- for (map<QName,XMLCh*>::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) {
- DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart());
- if (i->first.hasPrefix())
- attr->setPrefix(i->first.getPrefix());
- attr->setNodeValue(i->second);
- domElement->setAttributeNode(attr);
- }
+ marshallExtensionAttributes(domElement);
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLConstants::XMLSIG_NS,false);
- PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AffiliateMember,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(KeyDescriptor,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLSIG_NS,false);
+ PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AffiliateMember,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(KeyDescriptor,SAML20MD_NS,false);
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
void processAttribute(const DOMAttr* attribute) {
PROC_ID_ATTRIB(ID,ID,NULL);
- QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix());
- setAttribute(q,attribute->getNodeValue());
+ unmarshallExtensionAttribute(attribute);
}
};
}
EntityDescriptorImpl(const EntityDescriptorImpl& src)
- : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ : AbstractXMLObject(src), AbstractComplexElement(src),
+ AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) {
init();
setID(src.getID());
setEntityID(src.getEntityID());
continue;
}
+ AuthnQueryDescriptorType* authnq=dynamic_cast<AuthnQueryDescriptorType*>(*i);
+ if (authnq) {
+ getAuthnQueryDescriptorTypes().push_back(authnq->cloneAuthnQueryDescriptorType());
+ continue;
+ }
+
+ AttributeQueryDescriptorType* attrq=dynamic_cast<AttributeQueryDescriptorType*>(*i);
+ if (attrq) {
+ getAttributeQueryDescriptorTypes().push_back(attrq->cloneAttributeQueryDescriptorType());
+ continue;
+ }
+
+ AuthzDecisionQueryDescriptorType* authzq=dynamic_cast<AuthzDecisionQueryDescriptorType*>(*i);
+ if (authzq) {
+ getAuthzDecisionQueryDescriptorTypes().push_back(authzq->cloneAuthzDecisionQueryDescriptorType());
+ continue;
+ }
+
RoleDescriptor* role=dynamic_cast<RoleDescriptor*>(*i);
if (role) {
getRoleDescriptors().push_back(role->cloneRoleDescriptor());
IMPL_XMLOBJECT_CLONE(EntityDescriptor);
- const XMLCh* getId() const {
- return getID();
- }
-
//IMPL_TYPED_CHILD(Signature);
// Need customized setter.
protected:
m_Signature->setContentReference(new opensaml::ContentReference(*this));
}
- IMPL_STRING_ATTRIB(ID);
+ IMPL_ID_ATTRIB(ID);
IMPL_STRING_ATTRIB(EntityID);
- IMPL_DATETIME_ATTRIB(ValidUntil,LLONG_MAX);
+ IMPL_DATETIME_ATTRIB(ValidUntil,SAMLTIME_MAX);
IMPL_DATETIME_ATTRIB(CacheDuration,0);
IMPL_TYPED_CHILD(Extensions);
IMPL_TYPED_CHILDREN(RoleDescriptor,m_pos_AffiliationDescriptor);
IMPL_TYPED_CHILDREN(AuthnAuthorityDescriptor,m_pos_AffiliationDescriptor);
IMPL_TYPED_CHILDREN(AttributeAuthorityDescriptor,m_pos_AffiliationDescriptor);
IMPL_TYPED_CHILDREN(PDPDescriptor,m_pos_AffiliationDescriptor);
+ IMPL_TYPED_CHILDREN(AuthnQueryDescriptorType,m_pos_AffiliationDescriptor);
+ IMPL_TYPED_CHILDREN(AttributeQueryDescriptorType,m_pos_AffiliationDescriptor);
+ IMPL_TYPED_CHILDREN(AuthzDecisionQueryDescriptorType,m_pos_AffiliationDescriptor);
IMPL_TYPED_CHILD(AffiliationDescriptor);
IMPL_TYPED_CHILD(Organization);
IMPL_TYPED_CHILDREN(ContactPerson,m_pos_ContactPerson);
IMPL_TYPED_CHILDREN(AdditionalMetadataLocation,m_children.end());
- void setAttribute(QName& qualifiedName, const XMLCh* value) {
+ void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) {
if (!qualifiedName.hasNamespaceURI()) {
if (XMLString::equals(qualifiedName.getLocalPart(),ID_ATTRIB_NAME)) {
setID(value);
return;
}
}
- AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value);
+ AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID);
}
const IDPSSODescriptor* getIDPSSODescriptor(const XMLCh* protocol) const {
}
return NULL;
}
+
+ const AuthnQueryDescriptorType* getAuthnQueryDescriptorType(const XMLCh* protocol) const {
+ for (vector<AuthnQueryDescriptorType*>::const_iterator i=m_AuthnQueryDescriptorTypes.begin(); i!=m_AuthnQueryDescriptorTypes.end(); i++) {
+ if ((*i)->hasSupport(protocol) && (*i)->isValid())
+ return (*i);
+ }
+ return NULL;
+ }
+
+ const AttributeQueryDescriptorType* getAttributeQueryDescriptorType(const XMLCh* protocol) const {
+ for (vector<AttributeQueryDescriptorType*>::const_iterator i=m_AttributeQueryDescriptorTypes.begin(); i!=m_AttributeQueryDescriptorTypes.end(); i++) {
+ if ((*i)->hasSupport(protocol) && (*i)->isValid())
+ return (*i);
+ }
+ return NULL;
+ }
- const RoleDescriptor* getRoleDescriptor(xmltooling::QName& qname, const XMLCh* protocol) const {
+ const AuthzDecisionQueryDescriptorType* getAuthzDecisionQueryDescriptorType(const XMLCh* protocol) const {
+ for (vector<AuthzDecisionQueryDescriptorType*>::const_iterator i=m_AuthzDecisionQueryDescriptorTypes.begin(); i!=m_AuthzDecisionQueryDescriptorTypes.end(); i++) {
+ if ((*i)->hasSupport(protocol) && (*i)->isValid())
+ return (*i);
+ }
+ return NULL;
+ }
+
+ const RoleDescriptor* getRoleDescriptor(const xmltooling::QName& qname, const XMLCh* protocol) const {
+ // Check for "known" elements/types.
+ QName q;
+ q.setNamespaceURI(SAML20MD_NS);
+ q.setLocalPart(IDPSSODescriptor::LOCAL_NAME);
+ if (q == qname)
+ return getIDPSSODescriptor(protocol);
+ q.setLocalPart(SPSSODescriptor::LOCAL_NAME);
+ if (q == qname)
+ return getSPSSODescriptor(protocol);
+ q.setLocalPart(AuthnAuthorityDescriptor::LOCAL_NAME);
+ if (q == qname)
+ return getAuthnAuthorityDescriptor(protocol);
+ q.setLocalPart(AttributeAuthorityDescriptor::LOCAL_NAME);
+ if (q == qname)
+ return getAttributeAuthorityDescriptor(protocol);
+ q.setLocalPart(PDPDescriptor::LOCAL_NAME);
+ if (q == qname)
+ return getPDPDescriptor(protocol);
+ q.setNamespaceURI(samlconstants::SAML20MD_QUERY_EXT_NS);
+ q.setLocalPart(AuthnQueryDescriptorType::TYPE_NAME);
+ if (q == qname)
+ return getAuthnQueryDescriptorType(protocol);
+ q.setLocalPart(AttributeQueryDescriptorType::TYPE_NAME);
+ if (q == qname)
+ return getAttributeQueryDescriptorType(protocol);
+ q.setLocalPart(AuthzDecisionQueryDescriptorType::TYPE_NAME);
+ if (q == qname)
+ return getAuthzDecisionQueryDescriptorType(protocol);
+
for (vector<RoleDescriptor*>::const_iterator i=m_RoleDescriptors.begin(); i!=m_RoleDescriptors.end(); i++) {
if ((*i)->getSchemaType() && qname==(*((*i)->getSchemaType())) && (*i)->hasSupport(protocol) && (*i)->isValid())
return (*i);
MARSHALL_STRING_ATTRIB(EntityID,ENTITYID,NULL);
MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,NULL);
MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,NULL);
-
- // Take care of wildcard.
- for (map<QName,XMLCh*>::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) {
- DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart());
- if (i->first.hasPrefix())
- attr->setPrefix(i->first.getPrefix());
- attr->setNodeValue(i->second);
- domElement->setAttributeNode(attr);
- }
+ marshallExtensionAttributes(domElement);
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLConstants::XMLSIG_NS,false);
- PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(RoleDescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(IDPSSODescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(SPSSODescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AuthnAuthorityDescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AttributeAuthorityDescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(PDPDescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILD(AffiliationDescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILD(Organization,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(ContactPerson,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(AdditionalMetadataLocation,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLSIG_NS,false);
+ PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(IDPSSODescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(SPSSODescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AuthnAuthorityDescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AttributeAuthorityDescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(PDPDescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AuthnQueryDescriptorType,samlconstants::SAML20MD_QUERY_EXT_NS,false);
+ PROC_TYPED_CHILDREN(AttributeQueryDescriptorType,samlconstants::SAML20MD_QUERY_EXT_NS,false);
+ PROC_TYPED_CHILDREN(AuthzDecisionQueryDescriptorType,samlconstants::SAML20MD_QUERY_EXT_NS,false);
+ PROC_TYPED_CHILDREN(RoleDescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILD(AffiliationDescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILD(Organization,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(ContactPerson,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(AdditionalMetadataLocation,SAML20MD_NS,false);
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
void processAttribute(const DOMAttr* attribute) {
PROC_ID_ATTRIB(ID,ID,NULL);
- QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix());
- setAttribute(q,attribute->getNodeValue());
+ unmarshallExtensionAttribute(attribute);
}
};
init();
}
- EntitiesDescriptorImpl(const EntitiesDescriptorImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) {
+ EntitiesDescriptorImpl(const EntitiesDescriptorImpl& src)
+ : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
init();
setID(src.getID());
setName(src.getName());
IMPL_XMLOBJECT_CLONE(EntitiesDescriptor);
- const XMLCh* getId() const {
- return getID();
- }
-
//IMPL_TYPED_CHILD(Signature);
// Need customized setter.
protected:
m_Signature->setContentReference(new opensaml::ContentReference(*this));
}
- IMPL_STRING_ATTRIB(ID);
+ IMPL_ID_ATTRIB(ID);
IMPL_STRING_ATTRIB(Name);
- IMPL_DATETIME_ATTRIB(ValidUntil,LLONG_MAX);
+ IMPL_DATETIME_ATTRIB(ValidUntil,SAMLTIME_MAX);
IMPL_DATETIME_ATTRIB(CacheDuration,0);
IMPL_TYPED_CHILD(Extensions);
IMPL_TYPED_CHILDREN(EntityDescriptor,m_children.end());
}
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
- PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLConstants::XMLSIG_NS,false);
- PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(EntityDescriptor,SAMLConstants::SAML20MD_NS,false);
- PROC_TYPED_CHILDREN(EntitiesDescriptor,SAMLConstants::SAML20MD_NS,false);
+ PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLSIG_NS,false);
+ PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(EntityDescriptor,SAML20MD_NS,false);
+ PROC_TYPED_CHILDREN(EntitiesDescriptor,SAML20MD_NS,false);
AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
}
IMPL_XMLOBJECTBUILDER(AttributeAuthorityDescriptor);
IMPL_XMLOBJECTBUILDER(AttributeConsumingService);
IMPL_XMLOBJECTBUILDER(AttributeProfile);
+IMPL_XMLOBJECTBUILDER(AttributeQueryDescriptorType);
IMPL_XMLOBJECTBUILDER(AttributeService);
IMPL_XMLOBJECTBUILDER(AuthnAuthorityDescriptor);
+IMPL_XMLOBJECTBUILDER(AuthnQueryDescriptorType);
IMPL_XMLOBJECTBUILDER(AuthnQueryService);
+IMPL_XMLOBJECTBUILDER(AuthzDecisionQueryDescriptorType);
IMPL_XMLOBJECTBUILDER(AuthzService);
IMPL_XMLOBJECTBUILDER(Company);
IMPL_XMLOBJECTBUILDER(ContactPerson);
IMPL_XMLOBJECTBUILDER(SurName);
IMPL_XMLOBJECTBUILDER(TelephoneNumber);
+IMPL_XMLOBJECTBUILDER(ActionNamespace);
+IMPL_XMLOBJECTBUILDER(SourceID);
+
+const XMLCh ActionNamespace::LOCAL_NAME[] = UNICODE_LITERAL_15(A,c,t,i,o,n,N,a,m,e,s,p,a,c,e);
const XMLCh AdditionalMetadataLocation::LOCAL_NAME[] = UNICODE_LITERAL_26(A,d,d,i,t,i,o,n,a,l,M,e,t,a,d,a,t,a,L,o,c,a,t,i,o,n);
const XMLCh AdditionalMetadataLocation::TYPE_NAME[] = UNICODE_LITERAL_30(A,d,d,i,t,i,o,n,a,l,M,e,t,a,d,a,t,a,L,o,c,a,t,i,o,n,T,y,p,e);
const XMLCh AdditionalMetadataLocation::NAMESPACE_ATTRIB_NAME[] = UNICODE_LITERAL_9(n,a,m,e,s,p,a,c,e);
const XMLCh AttributeConsumingService::INDEX_ATTRIB_NAME[] = UNICODE_LITERAL_5(i,n,d,e,x);
const XMLCh AttributeConsumingService::ISDEFAULT_ATTRIB_NAME[] = UNICODE_LITERAL_9(i,s,D,e,f,a,u,l,t);
const XMLCh AttributeProfile::LOCAL_NAME[] = UNICODE_LITERAL_16(A,t,t,r,i,b,u,t,e,P,r,o,f,i,l,e);
+const XMLCh AttributeQueryDescriptorType::LOCAL_NAME[] =UNICODE_LITERAL_14(R,o,l,e,D,e,s,c,r,i,p,t,o,r);
+const XMLCh AttributeQueryDescriptorType::TYPE_NAME[] = UNICODE_LITERAL_28(A,t,t,r,i,b,u,t,e,Q,u,e,r,y,D,e,s,c,r,i,p,t,o,r,T,y,p,e);
const XMLCh AttributeService::LOCAL_NAME[] = UNICODE_LITERAL_16(A,t,t,r,i,b,u,t,e,S,e,r,v,i,c,e);
const XMLCh AuthnAuthorityDescriptor::LOCAL_NAME[] = UNICODE_LITERAL_24(A,u,t,h,n,A,u,t,h,o,r,i,t,y,D,e,s,c,r,i,p,t,o,r);
const XMLCh AuthnAuthorityDescriptor::TYPE_NAME[] = UNICODE_LITERAL_28(A,u,t,h,n,A,u,t,h,o,r,i,t,y,D,e,s,c,r,i,p,t,o,r,T,y,p,e);
+const XMLCh AuthnQueryDescriptorType::LOCAL_NAME[] = UNICODE_LITERAL_14(R,o,l,e,D,e,s,c,r,i,p,t,o,r);
+const XMLCh AuthnQueryDescriptorType::TYPE_NAME[] = UNICODE_LITERAL_24(A,u,t,h,n,Q,u,e,r,y,D,e,s,c,r,i,p,t,o,r,T,y,p,e);
const XMLCh AuthnQueryService::LOCAL_NAME[] = UNICODE_LITERAL_17(A,u,t,h,n,Q,u,e,r,y,S,e,r,v,i,c,e);
+const XMLCh AuthzDecisionQueryDescriptorType::LOCAL_NAME[] = UNICODE_LITERAL_14(R,o,l,e,D,e,s,c,r,i,p,t,o,r);
+const XMLCh AuthzDecisionQueryDescriptorType::TYPE_NAME[] = UNICODE_LITERAL_32(A,u,t,h,z,D,e,c,i,s,i,o,n,Q,u,e,r,y,D,e,s,c,r,i,p,t,o,r,T,y,p,e);
const XMLCh AuthzService::LOCAL_NAME[] = UNICODE_LITERAL_12(A,u,t,h,z,S,e,r,v,i,c,e);
const XMLCh CacheableSAMLObject::CACHEDURATION_ATTRIB_NAME[] = UNICODE_LITERAL_13(c,a,c,h,e,D,u,r,a,t,i,o,n);
const XMLCh Company::LOCAL_NAME[] = UNICODE_LITERAL_7(C,o,m,p,a,n,y);
const XMLCh OrganizationURL::LOCAL_NAME[] = UNICODE_LITERAL_15(O,r,g,a,n,i,z,a,t,i,o,n,U,R,L);
const XMLCh PDPDescriptor::LOCAL_NAME[] = UNICODE_LITERAL_13(P,D,P,D,e,s,c,r,i,p,t,o,r);
const XMLCh PDPDescriptor::TYPE_NAME[] = UNICODE_LITERAL_17(P,D,P,D,e,s,c,r,i,p,t,o,r,T,y,p,e);
+const XMLCh QueryDescriptorType::LOCAL_NAME[] = {chNull};
+const XMLCh QueryDescriptorType::TYPE_NAME[] = UNICODE_LITERAL_19(Q,u,e,r,y,D,e,s,c,r,i,p,t,o,r,T,y,p,e);
+const XMLCh QueryDescriptorType::WANTASSERTIONSSIGNED_ATTRIB_NAME[] = UNICODE_LITERAL_20(W,a,n,t,A,s,s,e,r,t,i,o,n,s,S,i,g,n,e,d);
const XMLCh RequestedAttribute::LOCAL_NAME[] = UNICODE_LITERAL_18(R,e,q,u,e,s,t,e,d,A,t,t,r,i,b,u,t,e);
const XMLCh RequestedAttribute::TYPE_NAME[] = UNICODE_LITERAL_22(R,e,q,u,e,s,t,e,d,A,t,t,r,i,b,u,t,e,T,y,p,e);
const XMLCh RequestedAttribute::ISREQUIRED_ATTRIB_NAME[] = UNICODE_LITERAL_10(i,s,R,e,q,u,i,r,e,d);
const XMLCh ServiceName::LOCAL_NAME[] = UNICODE_LITERAL_11(S,e,r,v,i,c,e,N,a,m,e);
const XMLCh SingleLogoutService::LOCAL_NAME[] = UNICODE_LITERAL_19(S,i,n,g,l,e,L,o,g,o,u,t,S,e,r,v,i,c,e);
const XMLCh SingleSignOnService::LOCAL_NAME[] = UNICODE_LITERAL_19(S,i,n,g,l,e,S,i,g,n,O,n,S,e,r,v,i,c,e);
+const XMLCh SourceID::LOCAL_NAME[] = UNICODE_LITERAL_8(S,o,u,r,c,e,I,D);
const XMLCh SPSSODescriptor::LOCAL_NAME[] = UNICODE_LITERAL_15(S,P,S,S,O,D,e,s,c,r,i,p,t,o,r);
const XMLCh SPSSODescriptor::TYPE_NAME[] = UNICODE_LITERAL_19(S,P,S,S,O,D,e,s,c,r,i,p,t,o,r,T,y,p,e);
const XMLCh SPSSODescriptor::AUTHNREQUESTSSIGNED_ATTRIB_NAME[] = UNICODE_LITERAL_19(A,u,t,h,n,R,e,q,u,e,s,t,s,S,i,g,n,e,d);