2 * Copyright 2001-2007 Internet2
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @file shibsp/handler/LogoutHandler.h
20 * Base class for logout-related handlers.
23 #ifndef __shibsp_logout_h__
24 #define __shibsp_logout_h__
26 #include <shibsp/SPRequest.h>
27 #include <shibsp/handler/RemotedHandler.h>
31 #if defined (_MSC_VER)
32 #pragma warning( push )
33 #pragma warning( disable : 4251 )
37 * Base class for logout-related handlers.
39 class SHIBSP_API LogoutHandler : public RemotedHandler
42 virtual ~LogoutHandler() {}
45 * The base method will iteratively attempt front-channel notification
46 * of logout of the current session, and after the final round trip will
47 * perform back-channel notification. Nothing will be done unless the
48 * handler detects that it is the "top" level logout handler.
49 * If the method returns false, then the specialized class should perform
50 * its work assuming that the notifications are completed.
52 * Note that the current session is NOT removed from the cache.
54 * @param request SP request context
55 * @param isHandler true iff executing in the context of a direct handler invocation
56 * @return a pair containing a "request completed" indicator and a server-specific response code
58 std::pair<bool,long> run(SPRequest& request, bool isHandler=true) const;
61 * A remoted procedure that will perform any necessary back-channel
62 * notifications. The input structure must contain an "application_id" member,
63 * and a "sessions" list containing the session keys, along with an integer
64 * member called "notify" with a value of 1.
66 * @param in incoming DDF message
67 * @param out stream to write outgoing DDF message to
69 void receive(DDF& in, std::ostream& out);
72 LogoutHandler() : m_initiator(true) {}
74 /** Flag indicating whether the subclass is acting as a LogoutInitiator. */
77 /** Array of query string parameters to preserve across front-channel notifications, if present. */
78 std::vector<std::string> m_preserve;
81 * Perform front-channel logout notifications for an Application.
83 * @param application the Application to notify
84 * @param request last request from browser
85 * @param response response to use for next notification
86 * @param params map of query string parameters to preserve across this notification
87 * @return indicator of a completed response along with the status code to return from the handler
89 std::pair<bool,long> notifyFrontChannel(
90 const Application& application,
91 const xmltooling::HTTPRequest& request,
92 xmltooling::HTTPResponse& response,
93 const std::map<std::string,std::string>* params=NULL
97 * Perform back-channel logout notifications for an Application.
99 * @param application the Application to notify
100 * @param requestURL requestURL that resulted in method call
101 * @param sessions array of session keys being logged out
102 * @param local true iff the logout operation is local to the SP, false iff global
103 * @return true iff all notifications succeeded
105 bool notifyBackChannel(
106 const Application& application, const char* requestURL, const std::vector<std::string>& sessions, bool local
110 * Sends a response template to the user agent informing it of the results of a logout attempt.
112 * @param application the Application to use in determining the logout template
113 * @param request the HTTP client request to supply to the template
114 * @param response the HTTP response to use
115 * @param local true iff the logout operation was local to the SP, false iff global
116 * @param status optional logoutStatus key value to add to template
118 std::pair<bool,long> sendLogoutPage(
119 const Application& application,
120 const xmltooling::HTTPRequest& request,
121 xmltooling::HTTPResponse& response,
123 const char* status=NULL
127 #if defined (_MSC_VER)
128 #pragma warning( pop )
131 /** LogoutInitiator that iterates through a set of protocol-specific versions. */
132 #define CHAINING_LOGOUT_INITIATOR "Chaining"
134 /** LogoutInitiator that supports SAML 2.0 LogoutRequests. */
135 #define SAML2_LOGOUT_INITIATOR "SAML2"
137 /** LogoutInitiator that supports local-only logout. */
138 #define LOCAL_LOGOUT_INITIATOR "Local"
142 #endif /* __shibsp_logout_h__ */