+/*
+ * Copyright 2010 Project Moonshot
+ *
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file shibresolver/resolver.h
+ *
+ * An embeddable component interface to Shibboleth SP attribute processing.
+ */
+
+#ifndef __shibresolver_h__
+#define __shibresolver_h__
+
+#if 0
+#include <shibresolver/base.h>
+#else
+#define SHIBRESOLVER_API SHIBSP_API
+#endif
+
+#include <string>
+#include <vector>
+
+namespace xmltooling {
+ class XMLTOOL_API XMLObject;
+};
+
+namespace opensaml {
+ namespace saml2 {
+ class SAML_API Assertion;
+ class SAML_API NameID;
+ };
+};
+
+namespace shibsp {
+ class SHIBSP_API Attribute;
+};
+
+namespace shibresolver {
+
+#if defined (_MSC_VER)
+ #pragma warning( push )
+ #pragma warning( disable : 4250 4251 )
+#endif
+
+ /**
+ * An embeddable component interface to Shibboleth SP attribute processing.
+ */
+ class SHIBRESOLVER_API ShibbolethResolver
+ {
+ MAKE_NONCOPYABLE(ShibbolethResolver);
+ protected:
+ ShibbolethResolver() {}
+ public:
+ ~ShibbolethResolver() {}
+
+ /**
+ * Sets the application ID to use for resolution.
+ *
+ * @param appID identifies an application in the SP configuration
+ */
+ void setApplicationID(const char* appID) {}
+
+ /**
+ * Sets the identity issuer to use for resolution.
+ *
+ * @param issuer entityID of the identity "source", if known
+ */
+ void setIssuer(const char* issuer) {}
+
+ /**
+ * Adds a SAML token as input to the resolver.
+ * <p>The caller retains ownership of the object.
+ *
+ * @param token an input token to evaluate
+ */
+ void addToken(
+#ifdef SHIBSP_LITE
+ const xmltooling::XMLObject* token
+#else
+ const opensaml::saml2::Assertion* token
+#endif
+ ) {}
+
+ /**
+ * Adds an Attribute as input to the resolver.
+ * <p>The caller retains ownership of the object, but it MAY be modified
+ * during the resolution process.
+ *
+ * @param attr an input attribute
+ */
+ void addAttribute(shibsp::Attribute* attr) {}
+
+ /**
+ * Resolves attributes and returns them in the supplied array.
+ * <p>The caller is responsible for freeing them.
+ *
+ * @param attrs array to populate
+ */
+ void resolveAttributes(std::vector<shibsp::Attribute*>& attrs) {}
+
+ /**
+ * Initializes SP runtime objects based on an XML configuration string or a configuration pathname.
+ * <p>Each process using the library MUST call this function exactly once before using any library classes.
+ *
+ * @param config a snippet of XML to parse (it <strong>MUST</strong> contain a type attribute) or a pathname
+ * @param rethrow true iff caught exceptions should be rethrown instead of just returning the status
+ * @return true iff initialization was successful
+ */
+ static bool init(const char* config=NULL, bool rethrow=false) { return true; }
+
+ /**
+ * Shuts down runtime.
+ *
+ * Each process using the library SHOULD call this function exactly once before terminating itself.
+ */
+ static void term() {}
+
+ /**
+ * Returns a ShibbolethResolver instance.
+ *
+ * @return a ShibbolethResolver instance, must be freed by the caller.
+ */
+ static ShibbolethResolver* create() { return new ShibbolethResolver(); }
+
+ protected:
+ /** Application ID. */
+ std::string m_appID;
+
+ /** Source of identity, if known. */
+ std::string m_issuer;
+
+ /** Input tokens. */
+#ifdef SHIBSP_LITE
+ std::vector<const xmltooling::XMLObject*> m_tokens;
+#else
+ std::vector<const opensaml::saml2::Assertion*> m_tokens;
+#endif
+ /** Input attributes. */
+ std::vector<shibsp::Attribute*> m_attributes;
+ };
+
+#if defined (_MSC_VER)
+ #pragma warning( pop )
+#endif
+
+};
+
+#endif /* __shibresolver_h__ */