X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FMetadataProvider.cpp;h=4d8d6b13e85863c7539682c0bdc823a8bff92a9f;hp=f79eec0e0429838d8c052124c916f337edbe532f;hb=d8a4f024b89272eae00618fc39e6127b6c191edd;hpb=eb44f0da2c472a2f30cd82443e19d74c2743499a diff --git a/saml/saml2/metadata/impl/MetadataProvider.cpp b/saml/saml2/metadata/impl/MetadataProvider.cpp index f79eec0..4d8d6b1 100644 --- a/saml/saml2/metadata/impl/MetadataProvider.cpp +++ b/saml/saml2/metadata/impl/MetadataProvider.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2001-2007 Internet2 - * + * Copyright 2001-2009 Internet2 + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,31 +16,38 @@ /** * MetadataProvider.cpp - * - * Registration of factories for built-in providers + * + * Supplies an individual source of metadata. */ #include "internal.h" +#include "saml2/metadata/MetadataFilter.h" #include "saml2/metadata/MetadataProvider.h" -#include +#include #include +#include +#include #include #include using namespace opensaml::saml2md; using namespace opensaml; +using namespace xmltooling::logging; using namespace xmltooling; -using namespace log4cpp; using namespace std; namespace opensaml { namespace saml2md { - SAML_DLLLOCAL PluginManager::Factory XMLMetadataProviderFactory; - SAML_DLLLOCAL PluginManager::Factory ChainingMetadataProviderFactory; - SAML_DLLLOCAL PluginManager::Factory BlacklistMetadataFilterFactory; - SAML_DLLLOCAL PluginManager::Factory WhitelistMetadataFilterFactory; - SAML_DLLLOCAL PluginManager::Factory SignatureMetadataFilterFactory; + SAML_DLLLOCAL PluginManager::Factory XMLMetadataProviderFactory; + SAML_DLLLOCAL PluginManager::Factory DynamicMetadataProviderFactory; + SAML_DLLLOCAL PluginManager::Factory ChainingMetadataProviderFactory; + SAML_DLLLOCAL PluginManager::Factory NullMetadataProviderFactory; + SAML_DLLLOCAL PluginManager::Factory BlacklistMetadataFilterFactory; + SAML_DLLLOCAL PluginManager::Factory WhitelistMetadataFilterFactory; + SAML_DLLLOCAL PluginManager::Factory SignatureMetadataFilterFactory; + SAML_DLLLOCAL PluginManager::Factory RequireValidUntilMetadataFilterFactory; + SAML_DLLLOCAL PluginManager::Factory EntityRoleMetadataFilterFactory; }; }; @@ -48,9 +55,9 @@ void SAML_API opensaml::saml2md::registerMetadataProviders() { SAMLConfig& conf=SAMLConfig::getConfig(); conf.MetadataProviderManager.registerFactory(XML_METADATA_PROVIDER, XMLMetadataProviderFactory); + conf.MetadataProviderManager.registerFactory(DYNAMIC_METADATA_PROVIDER, DynamicMetadataProviderFactory); conf.MetadataProviderManager.registerFactory(CHAINING_METADATA_PROVIDER, ChainingMetadataProviderFactory); - conf.MetadataProviderManager.registerFactory("edu.internet2.middleware.shibboleth.metadata.provider.XMLMetadata", XMLMetadataProviderFactory); - conf.MetadataProviderManager.registerFactory("edu.internet2.middleware.shibboleth.common.provider.XMLMetadata", XMLMetadataProviderFactory); + conf.MetadataProviderManager.registerFactory(NULL_METADATA_PROVIDER, NullMetadataProviderFactory); } void SAML_API opensaml::saml2md::registerMetadataFilters() @@ -58,6 +65,10 @@ void SAML_API opensaml::saml2md::registerMetadataFilters() SAMLConfig::getConfig().MetadataFilterManager.registerFactory(BLACKLIST_METADATA_FILTER, BlacklistMetadataFilterFactory); SAMLConfig::getConfig().MetadataFilterManager.registerFactory(WHITELIST_METADATA_FILTER, WhitelistMetadataFilterFactory); SAMLConfig::getConfig().MetadataFilterManager.registerFactory(SIGNATURE_METADATA_FILTER, SignatureMetadataFilterFactory); + SAMLConfig::getConfig().MetadataFilterManager.registerFactory(REQUIREVALIDUNTIL_METADATA_FILTER, RequireValidUntilMetadataFilterFactory); + // additional name matching Java code + SAMLConfig::getConfig().MetadataFilterManager.registerFactory("RequiredValidUntil", RequireValidUntilMetadataFilterFactory); + SAMLConfig::getConfig().MetadataFilterManager.registerFactory(ENTITYROLE_METADATA_FILTER, EntityRoleMetadataFilterFactory); } static const XMLCh _MetadataFilter[] = UNICODE_LITERAL_14(M,e,t,a,d,a,t,a,F,i,l,t,e,r); @@ -75,7 +86,7 @@ MetadataProvider::MetadataProvider(const DOMElement* e) #endif Category& log = Category::getInstance(SAML_LOGCAT".Metadata"); SAMLConfig& conf=SAMLConfig::getConfig(); - + // Locate any default recognized filters and plugins. try { DOMElement* child = e ? XMLHelper::getFirstChildElement(e) : NULL; @@ -122,6 +133,22 @@ MetadataProvider::~MetadataProvider() for_each(m_filters.begin(),m_filters.end(),xmltooling::cleanup()); } +void MetadataProvider::addMetadataFilter(MetadataFilter* newFilter) +{ + m_filters.push_back(newFilter); +} + +MetadataFilter* MetadataProvider::removeMetadataFilter(MetadataFilter* oldFilter) +{ + for (vector::iterator i=m_filters.begin(); i!=m_filters.end(); i++) { + if (oldFilter==(*i)) { + m_filters.erase(i); + return oldFilter; + } + } + return NULL; +} + void MetadataProvider::doFilters(XMLObject& xmlObject) const { #ifdef _DEBUG @@ -140,8 +167,45 @@ const EntitiesDescriptor* MetadataProvider::getEntitiesDescriptor(const XMLCh* n return getEntitiesDescriptor(temp.get(),strict); } -const EntityDescriptor* MetadataProvider::getEntityDescriptor(const XMLCh* name, bool strict) const +MetadataProvider::Criteria::Criteria() + : entityID_unicode(NULL), entityID_ascii(NULL), artifact(NULL), role(NULL), protocol(NULL), protocol2(NULL), validOnly(true) +{ +} + +MetadataProvider::Criteria::Criteria(const XMLCh* id, const xmltooling::QName* q, const XMLCh* prot, bool valid) + : entityID_unicode(id), entityID_ascii(NULL), artifact(NULL), role(q), protocol(prot), protocol2(NULL), validOnly(valid) +{ +} + +MetadataProvider::Criteria::Criteria(const char* id, const xmltooling::QName* q, const XMLCh* prot, bool valid) + : entityID_unicode(NULL), entityID_ascii(id), artifact(NULL), role(q), protocol(prot), protocol2(NULL), validOnly(valid) +{ +} + +MetadataProvider::Criteria::Criteria(const SAMLArtifact* a, const xmltooling::QName* q, const XMLCh* prot, bool valid) + : entityID_unicode(NULL), entityID_ascii(NULL), artifact(a), role(q), protocol(prot), protocol2(NULL), validOnly(valid) +{ +} + +MetadataProvider::Criteria::~Criteria() +{ +} + +void MetadataProvider::Criteria::reset() +{ + entityID_unicode=NULL; + entityID_ascii=NULL; + artifact=NULL; + role=NULL; + protocol=NULL; + protocol2=NULL; + validOnly=true; +} + +MetadataFilter::MetadataFilter() +{ +} + +MetadataFilter::~MetadataFilter() { - auto_ptr_char temp(name); - return getEntityDescriptor(temp.get(),strict); }