X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fopensaml2.git;a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FNullMetadataProvider.cpp;fp=saml%2Fsaml2%2Fmetadata%2Fimpl%2FNullMetadataProvider.cpp;h=c7c6ca25de5d411555a4f96842dc3e8c342f0ec8;hp=0000000000000000000000000000000000000000;hb=d553b4e66d3e96f8b18032abcda06ee3dfb2eb59;hpb=8ad0f24af699bf221f6cb051b1eef62732ab32cc diff --git a/saml/saml2/metadata/impl/NullMetadataProvider.cpp b/saml/saml2/metadata/impl/NullMetadataProvider.cpp new file mode 100644 index 0000000..c7c6ca2 --- /dev/null +++ b/saml/saml2/metadata/impl/NullMetadataProvider.cpp @@ -0,0 +1,69 @@ +/* + * 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. + * 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. + */ + +/** + * NullMetadataProvider.cpp + * + * Dummy provider that returns an empty entity supporting any role. + */ + +#include "internal.h" +#include "saml2/metadata/Metadata.h" +#include "saml2/metadata/DynamicMetadataProvider.h" + +#include + +using namespace opensaml::saml2md; +using namespace xmltooling; +using namespace std; + +namespace opensaml { + namespace saml2md { + class SAML_DLLLOCAL NullMetadataProvider : public DynamicMetadataProvider + { + public: + NullMetadataProvider(const DOMElement* e) : DynamicMetadataProvider(e), m_template(NULL) { + e = XMLHelper::getFirstChildElement(e, samlconstants::SAML20MD_NS, EntityDescriptor::LOCAL_NAME); + if (e) + m_template = dynamic_cast(XMLObjectBuilder::buildOneFromElement(const_cast(e))); + } + + virtual ~NullMetadataProvider() { + delete m_template; + } + + protected: + EntityDescriptor* resolve(const char* entityID) const; + + private: + EntityDescriptor* m_template; + }; + + MetadataProvider* SAML_DLLLOCAL NullMetadataProviderFactory(const DOMElement* const & e) + { + return new NullMetadataProvider(e); + } + }; +}; + +EntityDescriptor* NullMetadataProvider::resolve(const char* entityID) const +{ + // Resolving for us just means fabricating a new dummy element. + EntityDescriptor* entity = m_template ? m_template->cloneEntityDescriptor() : EntityDescriptorBuilder::buildEntityDescriptor(); + auto_ptr_XMLCh temp(entityID); + entity->setEntityID(temp.get()); + return entity; +}