X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2FAbstractMetadataProvider.h;h=50d00f1f559ff869044ea43734d13abb5d4237f4;hb=0d5e6d568cd0945e18a8b54b7d75e9f5a352c41b;hp=16d121beeeddd8adbe989aee205592c481a2e2c7;hpb=4a6e7f38d8e33c6a9bb02cb96a952f130c82968e;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/metadata/AbstractMetadataProvider.h b/saml/saml2/metadata/AbstractMetadataProvider.h index 16d121b..50d00f1 100644 --- a/saml/saml2/metadata/AbstractMetadataProvider.h +++ b/saml/saml2/metadata/AbstractMetadataProvider.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006 Internet2 + * Copyright 2001-2007 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,10 +25,15 @@ #include -namespace opensaml { +#include +#include +#include +namespace opensaml { namespace saml2md { + class SAML_API MetadataFilter; + /** * Base class for caching metadata providers. */ @@ -39,67 +44,74 @@ namespace opensaml { * Constructor. * * If a DOM is supplied, a set of default logic will be used to identify - * and build a KeyResolver plugin and install it into the provider. + * and build a KeyInfoResolver plugin and install it into the provider. * * The following XML content is supported: * *
    - *
  • <KeyResolver> elements with a type attribute + *
  • <KeyInfoResolver> elements with a type attribute *
* * XML namespaces are ignored in the processing of these elements. * * @param e DOM to supply configuration for provider */ - AbstractMetadataProvider(const DOMElement* e=NULL); - - void emitChangeEvent(); + AbstractMetadataProvider(const xercesc::DOMElement* e=NULL); public: virtual ~AbstractMetadataProvider(); - virtual const xmlsignature::KeyResolver* getKeyResolver() const { - return m_resolver; - } - - virtual const EntityDescriptor* getEntityDescriptor(const char* id, bool requireValidMetadata=true) const; - virtual const EntityDescriptor* getEntityDescriptor(const SAMLArtifact* artifact) const; - virtual const EntitiesDescriptor* getEntitiesDescriptor(const char* name, bool requireValidMetadata=true) const; + using MetadataProvider::getEntityDescriptor; + using MetadataProvider::getEntitiesDescriptor; + + void emitChangeEvent() const; + std::pair getEntityDescriptor(const Criteria& criteria) const; + const EntitiesDescriptor* getEntitiesDescriptor(const char* name, bool requireValidMetadata=true) const; + const xmltooling::Credential* resolve(const xmltooling::CredentialCriteria* criteria=NULL) const; + std::vector::size_type resolve( + std::vector& results, const xmltooling::CredentialCriteria* criteria=NULL + ) const; protected: - /** Embedded KeyResolver instance. */ - xmlsignature::KeyResolver* m_resolver; + /** Embedded KeyInfoResolver instance. */ + xmltooling::KeyInfoResolver* m_resolver; /** * Loads an entity into the cache for faster lookup. This includes * processing known reverse lookup strategies for artifacts. * * @param site entity definition - * @param validUntil expiration time of the entity definition + * @param validUntil maximum expiration time of the entity definition + * @param replace true iff existing entries for the same entity should be cleared/replaced */ - virtual void index(EntityDescriptor* site, time_t validUntil); + virtual void index(EntityDescriptor* site, time_t validUntil, bool replace=false) const; /** * Loads a group of entities into the cache for faster lookup. * * @param group group definition - * @param validUntil expiration time of the group definition + * @param validUntil maximum expiration time of the group definition */ - virtual void index(EntitiesDescriptor* group, time_t validUntil); + virtual void index(EntitiesDescriptor* group, time_t validUntil) const; /** * Clear the cache of known entities and groups. + * + * @param freeSites true iff the objects cached in the site map should be freed. */ - virtual void clearDescriptorIndex(); - - private: - std::vector m_filters; + virtual void clearDescriptorIndex(bool freeSites=false); + private: typedef std::multimap sitemap_t; typedef std::multimap groupmap_t; - sitemap_t m_sites; - sitemap_t m_sources; - groupmap_t m_groups; + mutable sitemap_t m_sites; + mutable sitemap_t m_sources; + mutable groupmap_t m_groups; + + mutable xmltooling::Mutex* m_credentialLock; + typedef std::map< const RoleDescriptor*, std::vector > credmap_t; + mutable credmap_t m_credentialMap; + const credmap_t::mapped_type& resolveCredentials(const RoleDescriptor& role) const; }; };