* @param ctx context interface, or nullptr
* @param xmlObject the metadata to be filtered
*/
- virtual void doFilter(MetadataFilterContext* ctx, xmltooling::XMLObject& xmlObject) const;
+ virtual void doFilter(const MetadataFilterContext* ctx, xmltooling::XMLObject& xmlObject) const;
};
/**
#include <vector>
#include <iostream>
-#include <boost/scoped_ptr.hpp>
#include <boost/ptr_container/ptr_vector.hpp>
#include <xmltooling/exceptions.h>
#include <xmltooling/security/CredentialResolver.h>
/**
* Sets a filtering context object for use by the filtering process.
- * <p>The MetadataProvider takes ownership of the object. Any existing
- * object is cleared.
+ * <p>The object's lifetime must last for the duration of the lifetime
+ * of the MetadataProvider.
*
* @param ctx a context object
*/
- void setContext(MetadataFilterContext* ctx);
+ void setContext(const MetadataFilterContext* ctx);
/**
* Should be called after instantiating provider and adding filters, but before
void doFilters(xmltooling::XMLObject& xmlObject) const;
private:
- boost::scoped_ptr<MetadataFilterContext> m_filterContext;
+ const MetadataFilterContext* m_filterContext;
boost::ptr_vector<MetadataFilter> m_filters;
};
Lockable* lock();
void unlock();
+ void setContext(const MetadataFilterContext*);
void init();
- void outputStatus(ostream& os) const;
+ void outputStatus(ostream&) const;
const XMLObject* getMetadata() const;
- const EntitiesDescriptor* getEntitiesDescriptor(const char* name, bool requireValidMetadata=true) const;
- pair<const EntityDescriptor*,const RoleDescriptor*> getEntityDescriptor(const Criteria& criteria) const;
+ const EntitiesDescriptor* getEntitiesDescriptor(const char*, bool requireValidMetadata=true) const;
+ pair<const EntityDescriptor*,const RoleDescriptor*> getEntityDescriptor(const Criteria&) const;
const Credential* resolve(const CredentialCriteria* criteria=nullptr) const;
- vector<const Credential*>::size_type resolve(vector<const Credential*>& results, const CredentialCriteria* criteria=nullptr) const;
+ vector<const Credential*>::size_type resolve(vector<const Credential*>&, const CredentialCriteria* criteria=nullptr) const;
string getCacheTag() const {
Lock lock(m_trackerLock);
m_log.error("error building MetadataProvider: %s", ex.what());
}
}
+ else {
+ m_log.error("MetadataProvider element missing type attribute");
+ }
e = XMLHelper::getNextSiblingElement(e, _MetadataProvider);
}
}
for_each(m_trackers.begin(), m_trackers.end(), xmltooling::cleanup<tracker_t>());
}
+void ChainingMetadataProvider::setContext(const MetadataFilterContext* ctx)
+{
+ for_each(m_providers.begin(), m_providers.end(), boost::bind(&MetadataProvider::setContext, _1, ctx));
+}
+
void ChainingMetadataProvider::init()
{
for (ptr_vector<MetadataProvider>::iterator i = m_providers.begin(); i != m_providers.end(); ++i) {
const EntitiesDescriptor* cur = nullptr;
for (ptr_vector<MetadataProvider>::iterator i = m_providers.begin(); i != m_providers.end(); ++i) {
tracker->lock_if(&(*i));
- if (cur=i->getEntitiesDescriptor(name,requireValidMetadata)) {
+ if ((cur = i->getEntitiesDescriptor(name,requireValidMetadata))) {
// Are we using a first match policy?
if (m_firstMatch) {
// Save locked provider.
static const XMLCh Include[] = UNICODE_LITERAL_7(I,n,c,l,u,d,e);
static const XMLCh _type[] = UNICODE_LITERAL_4(t,y,p,e);
-MetadataProvider::MetadataProvider(const DOMElement* e)
+MetadataProvider::MetadataProvider(const DOMElement* e) : m_filterContext(nullptr)
{
#ifdef _DEBUG
NDC ndc("MetadataProvider");
np.release();
}
else {
- log.error("MetadataFilter element missing type attribute.");
+ log.error("MetadataFilter element missing type attribute");
}
}
else if (XMLString::equals(child->getLocalName(), SigFilter)) {
return nullptr;
}
-void MetadataProvider::setContext(MetadataFilterContext* ctx)
+void MetadataProvider::setContext(const MetadataFilterContext* ctx)
{
- m_filterContext.reset(ctx);
+ m_filterContext = ctx;
}
void MetadataProvider::doFilters(XMLObject& xmlObject) const
Category& log = Category::getInstance(SAML_LOGCAT".Metadata");
for (ptr_vector<MetadataFilter>::const_iterator i = m_filters.begin(); i != m_filters.end(); i++) {
log.info("applying metadata filter (%s)", i->getId());
- i->doFilter(m_filterContext.get(), xmlObject);
+ i->doFilter(m_filterContext, xmlObject);
}
}
void MetadataProvider::Criteria::reset()
{
- entityID_unicode=nullptr;
- entityID_ascii=nullptr;
- artifact=nullptr;
- role=nullptr;
- protocol=nullptr;
- protocol2=nullptr;
- validOnly=true;
+ entityID_unicode = nullptr;
+ entityID_ascii = nullptr;
+ artifact = nullptr;
+ role = nullptr;
+ protocol = nullptr;
+ protocol2 = nullptr;
+ validOnly = true;
}
MetadataFilter::MetadataFilter()
{
}
-void MetadataFilter::doFilter(MetadataFilterContext* ctx, xmltooling::XMLObject& xmlObject) const
+void MetadataFilter::doFilter(const MetadataFilterContext* ctx, xmltooling::XMLObject& xmlObject) const
{
// Default call into deprecated method.
doFilter(xmlObject);