Changeset 7474 for TI12-security/branches
- Timestamp:
- 10/09/10 16:46:22 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TI12-security/branches/ndg-security-1.5.x/ndg_security_server/ndg/security/server/wsgi/session.py
r7119 r7474 14 14 log = logging.getLogger(__name__) 15 15 16 import urllib 17 from paste.request import parse_querystring 18 16 19 from ndg.security.server.wsgi import (NDGSecurityMiddlewareBase, 17 20 NDGSecurityMiddlewareError) … … 83 86 SIGNOUT_PATH_PARAMNAME = 'signoutPath' 84 87 SESSION_KEY_PARAMNAME = 'sessionKey' 88 DEFAULT_LOGOUT_RETURN2URI_PARAMNAME = 'defaultLogoutReturnToURI' 85 89 propertyDefaults = { 86 90 SIGNOUT_PATH_PARAMNAME: None, 87 SESSION_KEY_PARAMNAME: 'beaker.session.ndg.security' 91 SESSION_KEY_PARAMNAME: 'beaker.session.ndg.security', 92 DEFAULT_LOGOUT_RETURN2URI_PARAMNAME: '/' 88 93 } 89 94 90 95 AUTH_TKT_SET_USER_ENVIRON_KEYNAME = 'paste.auth_tkt.set_user' 96 97 LOGOUT_RETURN2URI_ARGNAME = 'ndg.security.logout.r' 98 LOGOUT_REDIRECT_STATUS_CODE = 302 91 99 92 100 PARAM_PREFIX = 'sessionHandler.' … … 120 128 raise SessionHandlerMiddlewareConfigError( 121 129 '"signoutPath" parameter is not set') 122 130 131 defaultLogoutReturnToURIParamName = prefix + \ 132 cls.DEFAULT_LOGOUT_RETURN2URI_PARAMNAME 133 134 self.__defaultLogoutReturnToURI = app_conf.get( 135 defaultLogoutReturnToURIParamName, 136 cls.propertyDefaults[cls.DEFAULT_LOGOUT_RETURN2URI_PARAMNAME]) 137 123 138 super(SessionHandlerMiddleware, self).__init__(app, 124 139 global_conf, … … 178 193 session.pop(keyName, None) 179 194 session.save() 180 181 referrer = environ.get('HTTP_REFERER') 182 if referrer is not None: 183 def _start_response(status, header, exc_info=None): 184 """Alter the header to send a redirect to the logout 185 referrer address""" 186 filteredHeader = [(field, val) for field, val in header 187 if field.lower() != 'location'] 188 filteredHeader.extend([('Location', referrer)]) 189 return start_response(self.getStatusMessage(302), 190 filteredHeader, 191 exc_info) 192 193 return _start_response 195 196 if self.__class__.LOGOUT_RETURN2URI_ARGNAME in environ['QUERY_STRING']: 197 params = dict(parse_querystring(environ)) 198 199 # Store the return URI query argument in a beaker session 200 quotedReferrer = params.get( 201 self.__class__.LOGOUT_RETURN2URI_ARGNAME, '') 202 referrer = urllib.unquote(quotedReferrer) 203 204 log.debug('Set redirect URI following logout based on %r URI query ' 205 'string = %r', 206 self.__class__.LOGOUT_RETURN2URI_ARGNAME, 207 referrer) 194 208 else: 195 log.error('No referrer set for redirect following logout') 196 return start_response 209 referrer = environ.get('HTTP_REFERER') 210 if referrer is None: 211 log.warning('No HTTP return to URI set for redirect following ' 212 'logout, either via the return to query string %r ' 213 'or the "HTTP_REFERER" environment variable: ' 214 'redirecting based on the %r config file option = ' 215 '%r', 216 self.__class__.LOGOUT_RETURN2URI_ARGNAME, 217 self.__class__.DEFAULT_LOGOUT_RETURN2URI_PARAMNAME, 218 self.__defaultLogoutReturnToURI) 219 220 referrer = self.__defaultLogoutReturnToURI 221 else: 222 log.debug('Set redirect URI following logout based on ' 223 '"HTTP_REFERER" environment variable = %r', 224 referrer) 225 226 def _start_response(status, header, exc_info=None): 227 """Alter the header to send a redirect to the logout referrer 228 address""" 229 230 # Filter out any existing location field setting 231 filteredHeader = [(field, val) for field, val in header 232 if field.lower() != 'location'] 233 234 # Add redirect destination to new location field setting 235 filteredHeader.extend([('Location', referrer)]) 236 237 statusMsg = self.getStatusMessage( 238 self.__class__.LOGOUT_REDIRECT_STATUS_CODE) 239 240 return start_response(statusMsg, filteredHeader, exc_info) 241 242 return _start_response 197 243 198 244 def _setSession(self, environ, session):
Note: See TracChangeset
for help on using the changeset viewer.