/*
- * Copyright 2001-2009 Internet2
+ * Copyright 2001-2010 Internet2
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/**
* @file saml/saml2/metadata/Metadata.h
*
- * XMLObjects representing the SAML 2.0 Metadata schema
+ * XMLObjects representing the SAML 2.0 Metadata schema.
*/
#ifndef __saml2_metadata_h__
#define __saml2_metadata_h__
#include <saml/saml2/core/Assertions.h>
-#include <xmltooling/util/Predicates.h>
#include <ctime>
+#include <xercesc/util/XMLUniDefs.hpp>
+#include <xmltooling/util/Predicates.h>
+
#define DECL_SAML2MDOBJECTBUILDER(cname) \
DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML20MD_NS,samlconstants::SAML20MD_PREFIX)
+namespace xmltooling {
+ class XMLTOOL_API Credential;
+ class XMLTOOL_API CredentialResolver;
+}
+
+namespace xmlencryption {
+ class XMLTOOL_API EncryptionMethod;
+};
+
namespace opensaml {
/**
*/
namespace saml2md {
+ class SAML_API DigestMethod;
+ class SAML_API SigningMethod;
+
/**
* Base class for metadata objects that feature a cacheDuration attribute.
*/
DECL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL);
/** Returns true iff the object is valid at the current time. */
bool isValid() const {
- return time(NULL) <= getValidUntilEpoch();
+ return time(nullptr) <= getValidUntilEpoch();
}
/** Returns true iff the object is valid at the supplied time. */
bool isValid(time_t t) const {
DECL_XMLOBJECT_SIMPLE(SAML_API,TelephoneNumber,Number,SAML 2.0 TelephoneNumber element);
DECL_XMLOBJECT_SIMPLE(SAML_API,ActionNamespace,Namespace,SAML 2.0 Metadata Extension ActionNamespace element);
- DECL_XMLOBJECT_SIMPLE(SAML_API,SourceID,ID,SAML 1.x Metadata Profile SourceID element);
BEGIN_XMLOBJECT(SAML_API,localizedNameType,xmltooling::XMLObject,SAML 2.0 localizedNameType type);
DECL_STRING_ATTRIB(Lang,LANG);
DECL_TYPED_CHILDREN(KeyDescriptor);
DECL_TYPED_CHILD(Organization);
DECL_TYPED_CHILDREN(ContactPerson);
+ /** Returns the first digest method supported by the role and the underlying implementation, if any. */
+ virtual const DigestMethod* getDigestMethod() const;
+ /** Returns the first signing method supported by the role and the underlying implementation, if any, along with a matching credential. */
+ virtual std::pair<const SigningMethod*,const xmltooling::Credential*> getSigningMethod(
+ const xmltooling::CredentialResolver& resolver, xmltooling::CredentialCriteria& cc
+ ) const;
END_XMLOBJECT;
BEGIN_XMLOBJECT2(SAML_API,RoleDescriptorType,RoleDescriptor,xmltooling::ElementExtensibleXMLObject,SAML 2.0 RoleDescriptor extension);
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
+ // Known Metadata Extensions
+
+ DECL_XMLOBJECT_SIMPLE(SAML_API,SourceID,ID,SAML 1.x Metadata Profile SourceID element);
+
+ BEGIN_XMLOBJECT(SAML_API,DiscoveryResponse,IndexedEndpointType,Identity Provider Discovery Protocol DiscoveryResponse element);
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,RequestInitiator,EndpointType,Service Provider Request Initiation RequestInitiator element);
+ END_XMLOBJECT;
+
BEGIN_XMLOBJECT(SAML_API,EntityAttributes,xmltooling::XMLObject,SAML Metadata Extension for Entity Attributes element);
DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml2);
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
+ BEGIN_XMLOBJECT(SAML_API,DigestMethod,xmltooling::ElementExtensibleXMLObject,SAML Metadata Extension for Algorithm Support DigestMethod element);
+ DECL_STRING_ATTRIB(Algorithm,ALGORITHM);
+ /** DigestMethodType local name */
+ static const XMLCh TYPE_NAME[];
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,SigningMethod,xmltooling::ElementExtensibleXMLObject,SAML Metadata Extension for Algorithm Support SigningMethod element);
+ DECL_STRING_ATTRIB(Algorithm,ALGORITHM);
+ DECL_INTEGER_ATTRIB(MinKeySize,MINKEYSIZE);
+ DECL_INTEGER_ATTRIB(MaxKeySize,MAXKEYSIZE);
+ /** SigningMethodType local name */
+ static const XMLCh TYPE_NAME[];
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,DisplayName,localizedNameType,SAML Metadata Extension for Login UI DisplayName element);
+ DECL_SIMPLE_CONTENT(Name);
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,Description,localizedNameType,SAML Metadata Extension for Login UI Description element);
+ DECL_SIMPLE_CONTENT(Description);
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,Keywords,xmltooling::XMLObject,SAML Metadata Extension for Login UI Keywords element);
+ DECL_STRING_ATTRIB(Lang,LANG);
+ DECL_SIMPLE_CONTENT(Values);
+ /** KeywordsType local name */
+ static const XMLCh TYPE_NAME[];
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,Logo,xmltooling::XMLObject,SAML Metadata Extension for Login UI Logo element);
+ DECL_STRING_ATTRIB(Lang,LANG);
+ DECL_INTEGER_ATTRIB(Height,HEIGHT);
+ DECL_INTEGER_ATTRIB(Width,WIDTH);
+ DECL_SIMPLE_CONTENT(URL);
+ /** LogoType local name */
+ static const XMLCh TYPE_NAME[];
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,InformationURL,localizedURIType,SAML Metadata Extension for Login UI InformationURL element);
+ DECL_SIMPLE_CONTENT(URL);
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,PrivacyStatementURL,localizedURIType,SAML Metadata Extension for Login UI PrivacyStatementURL element);
+ DECL_SIMPLE_CONTENT(URL);
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,UIInfo,xmltooling::ElementExtensibleXMLObject,SAML Metadata Extension for Login UI UIInfo element);
+ DECL_TYPED_CHILDREN(DisplayName);
+ DECL_TYPED_CHILDREN(Description);
+ DECL_TYPED_CHILDREN(Keywords);
+ DECL_TYPED_CHILDREN(Logo);
+ DECL_TYPED_CHILDREN(InformationURL);
+ DECL_TYPED_CHILDREN(PrivacyStatementURL);
+ /** UIInfoType local name */
+ static const XMLCh TYPE_NAME[];
+ END_XMLOBJECT;
+
+ DECL_XMLOBJECT_SIMPLE(SAML_API,IPHint,Hint,SAML Metadata Extension for Login UI IPHint element);
+ DECL_XMLOBJECT_SIMPLE(SAML_API,DomainHint,Hint,SAML Metadata Extension for Login UI DomainHint element);
+ DECL_XMLOBJECT_SIMPLE(SAML_API,GeolocationHint,Hint,SAML Metadata Extension for Login UI GeolocationHint element);
+
+ BEGIN_XMLOBJECT(SAML_API,DiscoHints,xmltooling::ElementExtensibleXMLObject,SAML Metadata Extension for Login UI DiscoHints element);
+ DECL_TYPED_CHILDREN(IPHint);
+ DECL_TYPED_CHILDREN(DomainHint);
+ DECL_TYPED_CHILDREN(GeolocationHint);
+ /** DiscoHintsType local name */
+ static const XMLCh TYPE_NAME[];
+ END_XMLOBJECT;
+
/**
* Predicate to test a role for validity and protocol support.
*/
*
* @param protocol support constant to test for
*/
- isValidForProtocol(const XMLCh* protocol) : m_time(time(NULL)), m_protocol(protocol) {
+ isValidForProtocol(const XMLCh* protocol) : m_time(time(nullptr)), m_protocol(protocol) {
}
/**
DECL_XMLOBJECTBUILDER(SAML_API,ActionNamespace,samlconstants::SAML20MD_QUERY_EXT_NS,samlconstants::SAML20MD_QUERY_EXT_PREFIX);
DECL_XMLOBJECTBUILDER(SAML_API,SourceID,samlconstants::SAML1MD_NS,samlconstants::SAML1MD_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,DiscoveryResponse,samlconstants::IDP_DISCOVERY_PROTOCOL_NS,samlconstants::IDP_DISCOVERY_PROTOCOL_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,RequestInitiator,samlconstants::SP_REQUEST_INIT_NS,samlconstants::SP_REQUEST_INIT_PREFIX);
DECL_XMLOBJECTBUILDER(SAML_API,EntityAttributes,samlconstants::SAML20MD_ENTITY_ATTRIBUTE_NS,samlconstants::SAML20MD_ENTITY_ATTRIBUTE_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,DigestMethod,samlconstants::SAML20MD_ALGSUPPORT_NS,samlconstants::SAML20MD_ALGSUPPORT_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,SigningMethod,samlconstants::SAML20MD_ALGSUPPORT_NS,samlconstants::SAML20MD_ALGSUPPORT_PREFIX);
+
+ DECL_XMLOBJECTBUILDER(SAML_API,UIInfo,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,DisplayName,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,Description,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,Keywords,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,Logo,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,InformationURL,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,PrivacyStatementURL,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,DiscoHints,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,IPHint,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,DomainHint,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,GeolocationHint,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
/**
* Builder for localizedNameType objects.
#else
virtual xmltooling::XMLObject* buildObject(
#endif
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/** Singleton builder. */
- static localizedNameType* buildlocalizedNameType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
+ static localizedNameType* buildlocalizedNameType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
const localizedNameTypeBuilder* b = dynamic_cast<const localizedNameTypeBuilder*>(
XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,localizedNameType::TYPE_NAME))
);
#else
virtual xmltooling::XMLObject* buildObject(
#endif
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/** Singleton builder. */
- static localizedURIType* buildlocalizedURIType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
+ static localizedURIType* buildlocalizedURIType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
const localizedURITypeBuilder* b = dynamic_cast<const localizedURITypeBuilder*>(
XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,localizedURIType::TYPE_NAME))
);
#else
virtual xmltooling::XMLObject* buildObject(
#endif
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/** Singleton builder. */
- static EndpointType* buildEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
+ static EndpointType* buildEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
const EndpointTypeBuilder* b = dynamic_cast<const EndpointTypeBuilder*>(
XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,EndpointType::TYPE_NAME))
);
#else
virtual xmltooling::XMLObject* buildObject(
#endif
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/** Singleton builder. */
- static IndexedEndpointType* buildIndexedEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
+ static IndexedEndpointType* buildIndexedEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
const IndexedEndpointTypeBuilder* b = dynamic_cast<const IndexedEndpointTypeBuilder*>(
XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME))
);
#else
virtual xmltooling::XMLObject* buildObject(
#endif
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/** Singleton builder. */
#else
virtual xmltooling::XMLObject* buildObject(
#endif
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/** Singleton builder. */
#else
virtual xmltooling::XMLObject* buildObject(
#endif
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/** Singleton builder. */
#else
virtual xmltooling::XMLObject* buildObject(
#endif
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/** Singleton builder. */