X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FNameEntityMatcher.cpp;fp=saml%2Fsaml2%2Fmetadata%2Fimpl%2FNameEntityMatcher.cpp;h=7eb65b08d35357911fb4f5dd966dc58850692f69;hb=0c0b5c09b4ffd3f83657f93b457e7932ae937dda;hp=0000000000000000000000000000000000000000;hpb=c2dd6ed076ddcd49a0c7cdf1086001d249e689dc;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/metadata/impl/NameEntityMatcher.cpp b/saml/saml2/metadata/impl/NameEntityMatcher.cpp new file mode 100644 index 0000000..7eb65b0 --- /dev/null +++ b/saml/saml2/metadata/impl/NameEntityMatcher.cpp @@ -0,0 +1,88 @@ +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. + * + * UCAID licenses this file to you 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ + +/** + * NameEntityMatcher.cpp + * + * EntityMatcher that matches based on name. + */ + +#include "internal.h" +#include "saml2/metadata/EntityMatcher.h" +#include "saml2/metadata/Metadata.h" + +using namespace opensaml::saml2md; +using namespace opensaml; +using namespace xmltooling; +using namespace std; + +namespace opensaml { + namespace saml2md { + class SAML_DLLLOCAL NameEntityMatcher : public EntityMatcher + { + public: + NameEntityMatcher(const DOMElement* e) + : m_name(e ? e->getAttributeNS(nullptr, EntitiesDescriptor::NAME_ATTRIB_NAME) : nullptr) { + if (!m_name || !*m_name) + throw XMLToolingException("Name EntityMatcher missing required Name attribute."); + } + ~NameEntityMatcher() {} + + bool matches(const EntityDescriptor& entity) const; + + private: + const XMLCh* m_name; + }; + + EntityMatcher* SAML_DLLLOCAL NameEntityMatcherFactory(const DOMElement* const & e) + { + return new NameEntityMatcher(e); + } + + SAML_DLLLOCAL PluginManager::Factory EntityAttributesEntityMatcherFactory; + }; +}; + +void SAML_API opensaml::saml2md::registerEntityMatchers() +{ + SAMLConfig::getConfig().EntityMatcherManager.registerFactory(NAME_ENTITY_MATCHER, NameEntityMatcherFactory); + SAMLConfig::getConfig().EntityMatcherManager.registerFactory(ENTITYATTR_ENTITY_MATCHER, EntityAttributesEntityMatcherFactory); +} + +EntityMatcher::EntityMatcher() +{ +} + +EntityMatcher::~EntityMatcher() +{ +} + +bool NameEntityMatcher::matches(const EntityDescriptor& entity) const +{ + if (XMLString::equals(m_name, entity.getEntityID())) + return true; + const EntitiesDescriptor* group = dynamic_cast(entity.getParent()); + while (group) { + if (XMLString::equals(m_name, group->getName())) + return true; + group = dynamic_cast(group->getParent()); + } + return false; +}