#include "internal.h"
+#include <shibsp/ServiceProvider.h>
+#include <shibsp/attribute/Attribute.h>
+#include <shibsp/remoting/ListenerService.h>
+
+using namespace shibresolver;
using namespace shibsp;
#ifndef SHIBSP_LITE
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()
+{
+ m_mapper = NULL;
+ m_sp = NULL;
+}
+
+ShibbolethResolver::~ShibbolethResolver()
+{
+ for_each(m_resolvedAttributes.begin(), m_resolvedAttributes.end(), xmltooling::cleanup<Attribute>());
+ 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<Attribute*>& 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
}