Convenience method for accessing SP instance.
authorScott Cantor <cantor.2@osu.edu>
Mon, 19 Feb 2007 01:38:49 +0000 (01:38 +0000)
committerScott Cantor <cantor.2@osu.edu>
Mon, 19 Feb 2007 01:38:49 +0000 (01:38 +0000)
shibsp/Application.h
shibsp/binding/impl/SOAPClient.cpp
shibsp/impl/RemotedSessionCache.cpp
shibsp/impl/StorageServiceSessionCache.cpp
shibsp/impl/XMLServiceProvider.cpp
shibsp/remoting/impl/ListenerService.cpp

index 845ff5d..c8f262d 100644 (file)
@@ -30,6 +30,7 @@
 namespace shibsp {
     
     class SHIBSP_API Handler;
+    class SHIBSP_API ServiceProvider;
 
     /**
      * Interface to a Shibboleth Application instance.
@@ -46,6 +47,13 @@ namespace shibsp {
         virtual ~Application() {}
 
         /**
+         * Returns the owning ServiceProvider instance.
+         *
+         * @return a locked ServiceProvider
+         */
+        virtual const ServiceProvider& getServiceProvider() const=0;
+
+        /**
          * Returns the Application's ID.
          * 
          * @return  the ID
index 912de6a..5422264 100644 (file)
@@ -53,10 +53,9 @@ namespace {
 SOAPClient::SOAPClient(const Application& application, opensaml::SecurityPolicy& policy)
     : opensaml::SOAPClient(policy), m_app(application), m_settings(NULL), m_credUse(NULL), m_credResolver(NULL)
 {
-    SPConfig& conf = SPConfig::getConfig();
     pair<bool,const char*> policyId = m_app.getString("policyId");
-    m_settings = conf.getServiceProvider()->getPolicySettings(policyId.second);
-    const vector<const opensaml::SecurityPolicyRule*>& rules = conf.getServiceProvider()->getPolicyRules(policyId.second);
+    m_settings = application.getServiceProvider().getPolicySettings(policyId.second);
+    const vector<const opensaml::SecurityPolicyRule*>& rules = application.getServiceProvider().getPolicyRules(policyId.second);
     for (vector<const opensaml::SecurityPolicyRule*>::const_iterator rule=rules.begin(); rule!=rules.end(); ++rule)
         policy.addRule(*rule);
     policy.setMetadataProvider(application.getMetadataProvider());
@@ -79,7 +78,7 @@ void SOAPClient::send(const soap11::Envelope& env, const KeyInfoSource& peer, co
         if (flag.first && flag.second) {
             CredentialResolver* cr=NULL;
             pair<bool,const char*> cred = m_credUse->getString("Signing");
-            if (cred.first && (cr=SPConfig::getConfig().getServiceProvider()->getCredentialResolver(cred.second))) {
+            if (cred.first && (cr=m_app.getServiceProvider().getCredentialResolver(cred.second))) {
                 // Looks like we're supposed to sign, so check for message.
                 const vector<XMLObject*>& bodies=const_cast<const soap11::Body*>(env.getBody())->getUnknownXMLObjects();
                 if (!bodies.empty()) {
@@ -167,7 +166,7 @@ void SOAPClient::prepareTransport(SOAPTransport& transport)
         
         authType = m_credUse->getString("TLS");
         if (authType.first) {
-            m_credResolver = SPConfig::getConfig().getServiceProvider()->getCredentialResolver(authType.second);
+            m_credResolver = m_app.getServiceProvider().getCredentialResolver(authType.second);
             if (m_credResolver) {
                 m_credResolver->lock();
                 if (!transport.setCredentialResolver(m_credResolver)) {
index ad81d01..f276ee8 100644 (file)
@@ -307,7 +307,7 @@ void RemotedSession::validate(const Application& application, const char* client
     }\r
 \r
     try {\r
-        out=SPConfig::getConfig().getServiceProvider()->getListenerService()->send(in);\r
+        out=application.getServiceProvider().getListenerService()->send(in);\r
     }\r
     catch (...) {\r
         out.destroy();\r
@@ -414,13 +414,13 @@ string RemotedCache::insert(
         }\r
     }\r
 \r
-    DDF out=SPConfig::getConfig().getServiceProvider()->getListenerService()->send(in);\r
+    DDF out=application.getServiceProvider().getListenerService()->send(in);\r
     DDFJanitor jout(out);\r
     if (out["key"].isstring()) {\r
         // Transaction Logging\r
         auto_ptr_char name(nameid.getName());\r
         const char* pid = in["entity_id"].string();\r
-        TransactionLog* xlog = SPConfig::getConfig().getServiceProvider()->getTransactionLog();\r
+        TransactionLog* xlog = application.getServiceProvider().getTransactionLog();\r
         Locker locker(xlog);\r
         xlog->log.infoStream() <<\r
             "New session (ID: " <<\r
@@ -486,7 +486,7 @@ Session* RemotedCache::find(const char* key, const Application& application, con
         }\r
         \r
         try {\r
-            out=SPConfig::getConfig().getServiceProvider()->getListenerService()->send(in);\r
+            out=application.getServiceProvider().getListenerService()->send(in);\r
             if (!out.isstruct()) {\r
                 out.destroy();\r
                 m_log.debug("session not found in remote cache");\r
@@ -560,7 +560,7 @@ void RemotedCache::remove(const char* key, const Application& application, const
     in.addmember("application_id").string(application.getId());\r
     in.addmember("client_addr").string(client_addr);\r
     \r
-    DDF out = SPConfig::getConfig().getServiceProvider()->getListenerService()->send(in);\r
+    DDF out = application.getServiceProvider().getListenerService()->send(in);\r
     out.destroy();\r
 }\r
 \r
index fe53c1c..ae53754 100644 (file)
@@ -525,7 +525,7 @@ string SSCache::insert(
 \r
     // Transaction Logging\r
     auto_ptr_char name(nameid.getName());\r
-    TransactionLog* xlog = SPConfig::getConfig().getServiceProvider()->getTransactionLog();\r
+    TransactionLog* xlog = application.getServiceProvider().getTransactionLog();\r
     Locker locker(xlog);\r
     xlog->log.infoStream() <<\r
         "New session (ID: " <<\r
@@ -664,7 +664,7 @@ void SSCache::remove(const char* key, const Application& application, const char
 \r
     m_storage->deleteContext(key);\r
 \r
-    TransactionLog* xlog = SPConfig::getConfig().getServiceProvider()->getTransactionLog();\r
+    TransactionLog* xlog = application.getServiceProvider().getTransactionLog();\r
     Locker locker(xlog);\r
     xlog->log.info("Destroyed session (applicationId: %s) (ID: %s)", application.getId(), key);\r
 }\r
index 54dbde6..bff5781 100644 (file)
@@ -84,6 +84,7 @@ namespace {
         const PropertySet* getPropertySet(const char* name, const char* ns="urn:mace:shibboleth:target:config:1.0") const;\r
 \r
         // Application\r
+        const ServiceProvider& getServiceProvider() const {return *m_sp;}\r
         const char* getId() const {return getString("id").second;}\r
         const char* getHash() const {return m_hash.c_str();}\r
         MetadataProvider* getMetadataProvider() const;\r
index 18fcfeb..323235d 100644 (file)
@@ -97,6 +97,6 @@ void ListenerService::receive(DDF &in, ostream& out)
     if (!dest)
         throw ListenerException("No destination registered for incoming message addressed to ($1).",params(1,in.name()));
     
-    Locker locker(SPConfig::getConfig().getServiceProvider());\r
+    Locker locker(SPConfig::getConfig().getServiceProvider());
     dest->receive(in, out);
 }