Add accessor for session ID.
authorScott Cantor <cantor.2@osu.edu>
Mon, 28 May 2007 23:37:27 +0000 (23:37 +0000)
committerScott Cantor <cantor.2@osu.edu>
Mon, 28 May 2007 23:37:27 +0000 (23:37 +0000)
Add URI binding constant.

shibsp/SessionCache.h
shibsp/impl/RemotedSessionCache.cpp
shibsp/impl/StorageServiceSessionCache.cpp
shibsp/lite/SAMLConstants.cpp
shibsp/lite/SAMLConstants.h

index e5b0bed..18553ea 100644 (file)
@@ -44,6 +44,13 @@ namespace shibsp {
         virtual ~Session() {}
     public:
         /**
+         * Returns the session key.
+         *
+         * @return unique ID of session
+         */
+        virtual const char* getID() const=0;
+
+        /**
          * Returns the address of the client associated with the session.
          * 
          * @return  the client's network address
index 51028ac..9fc1465 100644 (file)
@@ -74,6 +74,9 @@ namespace shibsp {
             m_lock->unlock();\r
         }\r
 \r
+        const char* getID() const {\r
+            return m_obj.name();\r
+        }\r
         const char* getApplicationID() const {\r
             return m_obj["application_id"].string();\r
         }\r
@@ -184,7 +187,7 @@ void RemotedSession::validate(const Application& application, const char* client
     // Basic expiration?\r
     time_t now = time(NULL);\r
     if (now > m_expires) {\r
-        m_cache->m_log.info("session expired (ID: %s)", m_obj.name());\r
+        m_cache->m_log.info("session expired (ID: %s)", getID());\r
         throw opensaml::RetryableProfileException("Your session has expired, and you must re-authenticate.");\r
     }\r
 \r
@@ -207,7 +210,7 @@ void RemotedSession::validate(const Application& application, const char* client
     DDF in("touch::"REMOTED_SESSION_CACHE"::SessionCache"), out;\r
     DDFJanitor jin(in);\r
     in.structure();\r
-    in.addmember("key").string(m_obj.name());\r
+    in.addmember("key").string(getID());\r
     in.addmember("version").integer(m_obj["version"].integer());\r
     if (*timeout) {\r
         // On 64-bit Windows, time_t doesn't fit in a long, so I'm using ISO timestamps.  \r
index 433c6ae..bebd896 100644 (file)
@@ -81,6 +81,9 @@ namespace shibsp {
             delete this;\r
         }\r
         \r
+        const char* getID() const {\r
+            return m_obj.name();\r
+        }\r
         const char* getClientAddress() const {\r
             return m_obj["client_addr"].string();\r
         }\r
@@ -205,7 +208,7 @@ void StoredSession::addAttributes(const vector<Attribute*>& attributes)
     xmltooling::NDC ndc("addAttributes");\r
 #endif\r
 \r
-    m_cache->m_log.debug("adding attributes to session (%s)", m_obj.name());\r
+    m_cache->m_log.debug("adding attributes to session (%s)", getID());\r
     \r
     int ver;\r
     do {\r
@@ -226,7 +229,7 @@ void StoredSession::addAttributes(const vector<Attribute*>& attributes)
         string record(str.str()); \r
 \r
         try {\r
-            ver = m_cache->m_storage->updateText(m_obj.name(), "session", record.c_str(), 0, m_obj["version"].integer()-1);\r
+            ver = m_cache->m_storage->updateText(getID(), "session", record.c_str(), 0, m_obj["version"].integer()-1);\r
         }\r
         catch (exception&) {\r
             // Roll back modification to record.\r
@@ -251,9 +254,9 @@ void StoredSession::addAttributes(const vector<Attribute*>& attributes)
         else if (ver < 0) {\r
             // Out of sync.\r
             m_cache->m_log.warn("storage service indicates the record is out of sync, updating with a fresh copy...");\r
-            ver = m_cache->m_storage->readText(m_obj.name(), "session", &record, NULL);\r
+            ver = m_cache->m_storage->readText(getID(), "session", &record, NULL);\r
             if (!ver) {\r
-                m_cache->m_log.error("readText failed on StorageService for session (%s)", m_obj.name());\r
+                m_cache->m_log.error("readText failed on StorageService for session (%s)", getID());\r
                 throw IOException("Unable to read back stored session.");\r
             }\r
             \r
@@ -277,7 +280,7 @@ void StoredSession::addAttributes(const vector<Attribute*>& attributes)
     Locker locker(xlog);\r
     xlog->log.infoStream() <<\r
         "Added the following attributes to session (ID: " <<\r
-            m_obj.name() <<\r
+            getID() <<\r
         ") for (applicationId: " <<\r
             m_obj["application_id"].string() <<\r
         ") {";\r
@@ -296,7 +299,7 @@ const Assertion* StoredSession::getAssertion(const char* id) const
         return i->second;\r
     \r
     string tokenstr;\r
-    if (!m_cache->m_storage->readText(m_obj.name(), id, &tokenstr, NULL))\r
+    if (!m_cache->m_storage->readText(getID(), id, &tokenstr, NULL))\r
         throw FatalProfileException("Assertion not found in cache.");\r
 \r
     // Parse and bind the document into an XMLObject.\r
@@ -327,15 +330,15 @@ void StoredSession::addAssertion(Assertion* assertion)
 \r
     auto_ptr_char id(assertion->getID());\r
 \r
-    m_cache->m_log.debug("adding assertion (%s) to session (%s)", id.get(), m_obj.name());\r
+    m_cache->m_log.debug("adding assertion (%s) to session (%s)", id.get(), getID());\r
 \r
     time_t exp;\r
-    if (!m_cache->m_storage->readText(m_obj.name(), "session", NULL, &exp))\r
+    if (!m_cache->m_storage->readText(getID(), "session", NULL, &exp))\r
         throw IOException("Unable to load expiration time for stored session.");\r
 \r
     ostringstream tokenstr;\r
     tokenstr << *assertion;\r
-    m_cache->m_storage->createText(m_obj.name(), id.get(), tokenstr.str().c_str(), exp);\r
+    m_cache->m_storage->createText(getID(), id.get(), tokenstr.str().c_str(), exp);\r
     \r
     int ver;\r
     do {\r
@@ -350,12 +353,12 @@ void StoredSession::addAssertion(Assertion* assertion)
         string record(str.str()); \r
 \r
         try {\r
-            ver = m_cache->m_storage->updateText(m_obj.name(), "session", record.c_str(), 0, m_obj["version"].integer()-1);\r
+            ver = m_cache->m_storage->updateText(getID(), "session", record.c_str(), 0, m_obj["version"].integer()-1);\r
         }\r
         catch (exception&) {\r
             token.destroy();\r
             m_obj["version"].integer(m_obj["version"].integer()-1);\r
-            m_cache->m_storage->deleteText(m_obj.name(), id.get());\r
+            m_cache->m_storage->deleteText(getID(), id.get());\r
             throw;\r
         }\r
 \r
@@ -365,17 +368,17 @@ void StoredSession::addAssertion(Assertion* assertion)
         }            \r
         if (!ver) {\r
             // Fatal problem with update.\r
-            m_cache->m_log.error("updateText failed on StorageService for session (%s)", m_obj.name());\r
-            m_cache->m_storage->deleteText(m_obj.name(), id.get());\r
+            m_cache->m_log.error("updateText failed on StorageService for session (%s)", getID());\r
+            m_cache->m_storage->deleteText(getID(), id.get());\r
             throw IOException("Unable to update stored session.");\r
         }\r
         else if (ver < 0) {\r
             // Out of sync.\r
             m_cache->m_log.warn("storage service indicates the record is out of sync, updating with a fresh copy...");\r
-            ver = m_cache->m_storage->readText(m_obj.name(), "session", &record, NULL);\r
+            ver = m_cache->m_storage->readText(getID(), "session", &record, NULL);\r
             if (!ver) {\r
-                m_cache->m_log.error("readText failed on StorageService for session (%s)", m_obj.name());\r
-                m_cache->m_storage->deleteText(m_obj.name(), id.get());\r
+                m_cache->m_log.error("readText failed on StorageService for session (%s)", getID());\r
+                m_cache->m_storage->deleteText(getID(), id.get());\r
                 throw IOException("Unable to read back stored session.");\r
             }\r
             \r
@@ -402,7 +405,7 @@ void StoredSession::addAssertion(Assertion* assertion)
     Locker locker(xlog);\r
     xlog->log.info(\r
         "Added assertion (ID: %s) to session for (applicationId: %s) with (ID: %s)",\r
-        id.get(), m_obj["application_id"].string(), m_obj.name()\r
+        id.get(), m_obj["application_id"].string(), getID()\r
         );\r
 }\r
 \r
index f924cd4..afd5928 100644 (file)
@@ -192,6 +192,8 @@ const char samlconstants::SAML1_PROFILE_BROWSER_POST[] = "urn:oasis:names:tc:SAM
 
 const char samlconstants::SAML20_BINDING_SOAP[] = "urn:oasis:names:tc:SAML:2.0:bindings:SOAP";
 
+const char samlconstants::SAML20_BINDING_URI[] = "urn:oasis:names:tc:SAML:2.0:bindings:URI";
+
 const char samlconstants::SAML20_BINDING_HTTP_ARTIFACT[] = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact";
 
 const char samlconstants::SAML20_BINDING_HTTP_POST[] = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST";
index 35664bd..b66de75 100644 (file)
@@ -135,6 +135,9 @@ namespace samlconstants {
     /** SAML 2.0 SOAP binding ("urn:oasis:names:tc:SAML:2.0:bindings:SOAP") */
     extern SHIBSP_API const char SAML20_BINDING_SOAP[];
 
+    /** SAML 2.0 URI binding ("urn:oasis:names:tc:SAML:2.0:bindings:URI") */
+    extern SHIBSP_API const char SAML20_BINDING_URI[];
+
     /** SAML 2.0 HTTP-Artifact binding ("urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact") */
     extern SHIBSP_API const char SAML20_BINDING_HTTP_ARTIFACT[];