X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fresolver.git;a=blobdiff_plain;f=shibresolver%2Fresolver.cpp;h=f8acdc75f36c715075583ddcc8036ae9b0a468d2;hp=dbe396887b1244bfb838857a4dce899d425d5453;hb=75ec64fc146d86e9086812bb9d6376f40736a43e;hpb=c8a04029bd704fc787bf953a0c99fd1c0b371e7c diff --git a/shibresolver/resolver.cpp b/shibresolver/resolver.cpp index dbe3968..f8acdc7 100644 --- a/shibresolver/resolver.cpp +++ b/shibresolver/resolver.cpp @@ -22,6 +22,11 @@ #include "internal.h" +#include +#include +#include + +using namespace shibresolver; using namespace shibsp; #ifndef SHIBSP_LITE using namespace opensaml; @@ -29,9 +34,121 @@ using namespace opensaml; using namespace xmltooling; using namespace std; +namespace shibresolver { + class SHIBRESOLVER_DLLLOCAL RemotedResolver : public Remoted { + public: + RemotedResolver() {} + ~RemotedResolver() {} + + void receive(DDF& in, ostream& out); + }; + + static RemotedResolver g_Remoted; +}; + +ShibbolethResolver* ShibbolethResolver::create() +{ + return new ShibbolethResolver(); +} + +ShibbolethResolver::ShibbolethResolver() +{ +} + +ShibbolethResolver::~ShibbolethResolver() +{ + for_each(m_resolvedAttributes.begin(), m_resolvedAttributes.end(), xmltooling::cleanup()); + if (m_mapper) + m_mapper->unlock(); + if (m_sp) + m_sp->unlock(); +} + +void ShibbolethResolver::setServiceURI(const char* uri) +{ + m_serviceURI.erase(); + if (uri) + m_serviceURI = uri; +} + +void ShibbolethResolver::setApplicationID(const char* appID) +{ + m_appID.erase(); + if (appID) + m_appID = appID; +} + +void ShibbolethResolver::setIssuer(const char* issuer) +{ + m_issuer.erase(); + if (issuer) + m_issuer = issuer; +} + +void ShibbolethResolver::addToken( +#ifdef SHIBSP_LITE + const XMLObject* token +#else + const saml2::Assertion* token +#endif + ) +{ + if (token) + m_tokens.push_back(token); +} + +void ShibbolethResolver::addAttribute(Attribute* attr) +{ + if (attr) + m_inputAttributes.push_back(attr); +} + +vector& ShibbolethResolver::getResolvedAttributes() +{ + return m_resolvedAttributes; +} + +RequestMapper::Settings ShibbolethResolver::getSettings() const +{ + return m_settings; +} + +void ShibbolethResolver::resolve() +{ +} + +void RemotedResolver::receive(DDF& in, ostream& out) +{ +} + +bool ShibbolethResolver::init(unsigned long features, const char* config, bool rethrow) +{ + SPConfig::getConfig().setFeatures(features | SPConfig::AttributeResolution | SPConfig::Metadata | SPConfig::Trust); + if (!SPConfig::getConfig().init()) + return false; + if (!SPConfig::getConfig().instantiate(config, rethrow)) + return false; + return true; +} + +/** + * Shuts down runtime. + * + * Each process using the library SHOULD call this function exactly once before terminating itself. + */ +void ShibbolethResolver::term() +{ + SPConfig::getConfig().term(); +} + + extern "C" int SHIBRESOLVER_EXPORTS xmltooling_extension_init(void*) { - // Register factory functions with appropriate plugin managers in the XMLTooling/SAML/SPConfig objects. +#ifdef SHIBRESOLVER_SHIBSP_HAS_REMOTING + SPConfig& conf = SPConfig::getConfig(); + if (conf.isEnabled(SPConfig::OutOfProcess) && !conf.isEnabled(SPConfig::InProcess) && conf.isEnabled(SPConfig::Listener)) + conf.getServiceProvider()->regListener("org.project-moonshot.shibresolver", &g_Remoted); +#endif return 0; // signal success }