https://bugs.internet2.edu/jira/browse/SSPCPP-132
authorcantor <cantor@cb58f699-b61c-0410-a6fe-9272a202ed29>
Wed, 24 Sep 2008 17:03:18 +0000 (17:03 +0000)
committercantor <cantor@cb58f699-b61c-0410-a6fe-9272a202ed29>
Wed, 24 Sep 2008 17:03:18 +0000 (17:03 +0000)
git-svn-id: https://svn.middleware.georgetown.edu/cpp-sp/branches/REL_2@2889 cb58f699-b61c-0410-a6fe-9272a202ed29

shibsp/handler/impl/AssertionConsumerService.cpp
shibsp/metadata/MetadataProviderCriteria.h
shibsp/security/SecurityPolicy.cpp
shibsp/security/SecurityPolicy.h

index 8f3b008..197b046 100644 (file)
@@ -412,15 +412,11 @@ void AssertionConsumerService::extractMessageDetails(const Assertion& assertion,
         }
         m_log.debug("searching metadata for assertion issuer...");
         pair<const EntityDescriptor*,const RoleDescriptor*> entity;
-        shibsp::SecurityPolicy* sppol = dynamic_cast<shibsp::SecurityPolicy*>(&policy);
-        if (sppol) {
-            MetadataProviderCriteria mc(sppol->getApplication(), policy.getIssuer()->getName(), &IDPSSODescriptor::ELEMENT_QNAME, protocol);
-            entity = policy.getMetadataProvider()->getEntityDescriptor(mc);
-        }
-        else {
-            MetadataProvider::Criteria mc(policy.getIssuer()->getName(), &IDPSSODescriptor::ELEMENT_QNAME, protocol);
-            entity = policy.getMetadataProvider()->getEntityDescriptor(mc);
-        }
+        MetadataProvider::Criteria& mc = policy.getMetadataProviderCriteria();
+        mc.entityID_unicode = policy.getIssuer()->getName();
+        mc.role = &IDPSSODescriptor::ELEMENT_QNAME;
+        mc.protocol = protocol;
+        entity = policy.getMetadataProvider()->getEntityDescriptor(mc);
         if (!entity.first) {
             auto_ptr_char iname(policy.getIssuer()->getName());
             m_log.warn("no metadata found, can't establish identity of issuer (%s)", iname.get());
index 4020005..286a4a0 100644 (file)
@@ -37,6 +37,14 @@ namespace shibsp {
          * Constructor.
          *
          * @param app   application performing the lookup
+         */
+        MetadataProviderCriteria(const Application& app) : application(app) {
+        }
+
+        /**
+         * Constructor.
+         *
+         * @param app   application performing the lookup
          * @param id    entityID to lookup
          * @param q     element/type of role, if any
          * @param prot  protocol support constant, if any
index 6e260d4..f8e81a4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  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
 
 /**
  * SecurityPolicy.cpp
- * 
+ *
  * SP-specific SecurityPolicy subclass.
  */
 
 #include "internal.h"
 #include "Application.h"
 #include "ServiceProvider.h"
+#include "metadata/MetadataProviderCriteria.h"
 #include "security/SecurityPolicy.h"
 
 using namespace shibsp;
@@ -34,3 +35,10 @@ SecurityPolicy::SecurityPolicy(const Application& application, const xmltooling:
         application.getServiceProvider().getPolicyRules(application.getString("policyId").second);
     getRules().assign(rules.begin(), rules.end());
 }
+
+opensaml::saml2md::MetadataProvider::Criteria& SecurityPolicy::getMetadataProviderCriteria() const
+{
+    if (!m_metadataCriteria)
+        m_metadataCriteria=new MetadataProviderCriteria(m_application);
+    return *m_metadataCriteria;
+}
index 74745ff..d72bc2b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  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
@@ -16,7 +16,7 @@
 
 /**
  * @file shibsp/security/SecurityPolicy.h
- * 
+ *
  * SP-specific SecurityPolicy subclass.
  */
 
@@ -27,7 +27,7 @@
 #include <saml/binding/SecurityPolicy.h>
 
 namespace shibsp {
-    
+
     class SHIBSP_API Application;
 
     /**
@@ -38,18 +38,20 @@ namespace shibsp {
     public:
         /**
          * Constructor for policy.
-         * 
+         *
          * @param application       an Application instance
-         * @param role              identifies the role (generally IdP or SP) of the policy peer 
+         * @param role              identifies the role (generally IdP or SP) of the policy peer
          * @param validate          true iff XML parsing should be done with validation
          */
         SecurityPolicy(const Application& application, const xmltooling::QName* role=NULL, bool validate=true);
 
         virtual ~SecurityPolicy() {}
 
+        opensaml::saml2md::MetadataProvider::Criteria& getMetadataProviderCriteria() const;
+
         /**
          * Returns the Application associated with the policy.
-         * 
+         *
          * @return the associated Application
          */
         const Application& getApplication() const {