diff --git a/trac/web/api.py b/trac/web/api.py
|
a
|
b
|
|
| 181 | 181 | doc='The HTTP method of the request') |
| 182 | 182 | path_info = property(fget=lambda self: self.environ.get('PATH_INFO', '').decode('utf-8'), |
| 183 | 183 | doc='Path inside the application') |
| | 184 | query_string = property(fget=lambda self: self.environ.get('QUERY_STRING', |
| | 185 | ''), |
| | 186 | doc='Query part of the request') |
| 184 | 187 | remote_addr = property(fget=lambda self: self.environ.get('REMOTE_ADDR'), |
| 185 | 188 | doc='IP address of the remote user') |
| 186 | 189 | remote_user = property(fget=lambda self: self.environ.get('REMOTE_USER'), |
diff --git a/trac/web/auth.py b/trac/web/auth.py
|
a
|
b
|
|
| 197 | 197 | |
| 198 | 198 | def _redirect_back(self, req): |
| 199 | 199 | """Redirect the user back to the URL she came from.""" |
| 200 | | referer = req.get_header('Referer') |
| | 200 | referer = self._referer(req) |
| 201 | 201 | if referer and not (referer == req.base_url or \ |
| 202 | 202 | referer.startswith(req.base_url.rstrip('/')+'/')): |
| 203 | 203 | # only redirect to referer if it is from the same site |
| 204 | 204 | referer = None |
| 205 | 205 | req.redirect(referer or req.abs_href()) |
| | 206 | |
| | 207 | def _referer(self, req): |
| | 208 | return req.args.get('referer', req.get_header('Referer')) |
| 206 | 209 | |
| 207 | 210 | |
| 208 | 211 | class HTTPAuthentication(object): |
diff --git a/trac/web/href.py b/trac/web/href.py
|
a
|
b
|
|
| 129 | 129 | if type(value) in (list, tuple): |
| 130 | 130 | for i in [i for i in value if i != None]: |
| 131 | 131 | params.append((name, i)) |
| 132 | | elif v != None: |
| | 132 | elif value != None: |
| 133 | 133 | params.append((name, value)) |
| 134 | 134 | |
| 135 | 135 | if args: |
diff --git a/trac/web/main.py b/trac/web/main.py
|
a
|
b
|
|
| 437 | 437 | data = {'title': title, 'type': 'TracError', 'message': e.detail, |
| 438 | 438 | 'frames': [], 'traceback': None} |
| 439 | 439 | try: |
| | 440 | if e.code == 403 and req.authname == 'anonymous': |
| | 441 | referer = env.abs_href(req.path_info) |
| | 442 | if req.query_string: |
| | 443 | referer += '?' + req.query_string |
| | 444 | req.redirect(env.href('login', {'referer': referer})) |
| 440 | 445 | req.send_error(sys.exc_info(), status=e.code, env=env, data=data) |
| 441 | 446 | except RequestDone: |
| 442 | 447 | pass |