Make NameID explicitly optional.
[shibboleth/sp.git] / shibsp / attribute / resolver / AttributeResolver.h
index 75b8b1b..73adab1 100644 (file)
@@ -60,17 +60,23 @@ namespace shibsp {
          * 
          * @param application       reference to Application that owns the eventual Session
          * @param issuer            issuing metadata of assertion issuer, if known
+         * @param protocol          protocol used to establish Session
          * @param nameid            principal identifier, normalized to SAML 2, if any
-         * @param tokens            assertions initiating the session, if any
-         * @param attributes        map of previously resolved attributes, if any
+         * @param authncontext_class    method/category of authentication event, if known
+         * @param authncontext_decl specifics of authentication event, if known
+         * @param tokens            assertions initiating the Session, if any
+         * @param attributes        array of previously resolved attributes, if any
          * @return  newly created ResolutionContext, owned by caller
          */
         virtual ResolutionContext* createResolutionContext(
             const Application& application,
             const opensaml::saml2md::EntityDescriptor* issuer,
-            const opensaml::saml2::NameID* nameid,
+            const XMLCh* protocol,
+            const opensaml::saml2::NameID* nameid=NULL,
+            const XMLCh* authncontext_class=NULL,
+            const XMLCh* authncontext_decl=NULL,
             const std::vector<const opensaml::Assertion*>* tokens=NULL,
-            const std::multimap<std::string,Attribute*>* attributes=NULL
+            const std::vector<Attribute*>* attributes=NULL
             ) const=0;
 
         /**
@@ -91,6 +97,13 @@ namespace shibsp {
          * @throws AttributeResolutionException thrown if there is a problem resolving the attributes for the subject
          */
         virtual void resolveAttributes(ResolutionContext& ctx) const=0;
+
+        /**
+         * Populates an array with the set of Attribute IDs that might be generated.
+         *
+         * @param attributes    array to populate
+         */
+        virtual void getAttributeIds(std::vector<std::string>& attributes) const=0;
     };
 
 #if defined (_MSC_VER)