Changeset 5041
- Timestamp:
- 26/02/09 12:27:31 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/relyingparty/__init__.py
r5037 r5041 16 16 import httplib # to get official status code messages 17 17 import urllib # decode quoted URI in query arg 18 from urlparse import url parse18 from urlparse import urlsplit, urlunsplit 19 19 20 20 from paste.request import parse_querystring, parse_formvars … … 23 23 24 24 from ndg.security.server.wsgi import NDGSecurityMiddlewareBase 25 from ndg.security.server.wsgi.authn import AuthNRedirectMiddleware 25 26 from ndg.security.common.utils.classfactory import instantiateClass 26 27 … … 105 106 "AuthOpenIDHandler in the " 106 107 "WSGI stack") 107 108 109 # Check for return to argument in query key value pairs 110 self._return2URIKey = AuthNRedirectMiddleware.return2URIArgName + '=' 111 108 112 super(OpenIDRelyingPartyMiddleware, self).__init__(authKitApp, 109 113 global_conf, … … 131 135 params = dict(parse_formvars(environ)) 132 136 133 referer = urllib.unquote(params.get('ndg.security.r', '')) 134 refererPathInfo = urlparse(referer)[2] 135 if referer and \ 136 not refererPathInfo.endswith(self._authKitVerifyPath) and \ 137 not refererPathInfo.endswith(self._authKitProcessPath): 137 quotedReferrer=params.get(AuthNRedirectMiddleware.return2URIArgName,'') 138 referrer = urllib.unquote(quotedReferrer) 139 referrerPathInfo = urlsplit(referrer)[2] 140 if referrer and \ 141 not referrerPathInfo.endswith(self._authKitVerifyPath) and \ 142 not referrerPathInfo.endswith(self._authKitProcessPath): 138 143 # Set-up for authkit.authenticate.open_id.AuthOpenIDHandler.process 139 session['referer'] = refer er144 session['referer'] = referrer 140 145 session.save() 141 146 147 if self._return2URIKey in environ.get('HTTP_REFERER', ''): 148 # Remove return to arg to avoid interfering with AuthKit OpenID 149 # processing 150 splitURI = urlsplit(environ['HTTP_REFERER']) 151 query = splitURI[3] 152 153 filteredQuery = '&'.join([arg for arg in query.split('&') 154 if not arg.startswith(self._return2URIKey)]) 155 156 environ['HTTP_REFERER'] = urlunsplit(splitURI[:3] + \ 157 (filteredQuery,) + \ 158 splitURI[4:]) 159 142 160 if self.signoutPath is not None and self.pathInfo == self.signoutPath: 143 161 # TODO: Redirect to referrer ... 144 refer er = session.get(162 referrer = session.get( 145 163 'ndg.security.server.wsgi.openid.relyingparty.referer') 146 if refer er is not None:164 if referrer is not None: 147 165 def setRedirectResponse(status, header, exc_info=None): 148 header.extend([('Location', refer er)])149 return start_response( '302 %s' % httplib.responses[302],166 header.extend([('Location', referrer)]) 167 return start_response(self.getStatusMessage(302), 150 168 header, 151 169 exc_info) … … 153 171 return self._app(environ, setRedirectResponse) 154 172 else: 155 log.debug('No refer er set for redirect following logout')173 log.debug('No referrer set for redirect following logout') 156 174 157 175 # Set a return to address following logout.
Note: See TracChangeset
for help on using the changeset viewer.