namespace shibsp {
class SHIBSP_API Handler;
+ class SHIBSP_API ServiceProvider;
/**
* Interface to a Shibboleth Application instance.
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
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());
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()) {
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)) {
}\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
}\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
}\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
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
\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
\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
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
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);
}