Edgewall Software

Ticket #5340: 5340-redirect-forbidden-login-r7431.patch

File 5340-redirect-forbidden-login-r7431.patch, 2.3 KB (added by Remy Blank <remy.blank@…>, 4 months ago)

Patch against 0.11-stable adding redirection of forbidden pages to /login and back

  • trac/web/api.py

    diff --git a/trac/web/api.py b/trac/web/api.py
    a b  
    181181                      doc='The HTTP method of the request') 
    182182    path_info = property(fget=lambda self: self.environ.get('PATH_INFO', '').decode('utf-8'), 
    183183                         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') 
    184187    remote_addr = property(fget=lambda self: self.environ.get('REMOTE_ADDR'), 
    185188                           doc='IP address of the remote user') 
    186189    remote_user = property(fget=lambda self: self.environ.get('REMOTE_USER'), 
  • trac/web/auth.py

    diff --git a/trac/web/auth.py b/trac/web/auth.py
    a b  
    197197 
    198198    def _redirect_back(self, req): 
    199199        """Redirect the user back to the URL she came from.""" 
    200         referer = req.get_header('Referer') 
     200        referer = req.args.get('referer', req.get_header('Referer')) 
    201201        if referer and not (referer == req.base_url or \ 
    202202                referer.startswith(req.base_url.rstrip('/')+'/')): 
    203203            # only redirect to referer if it is from the same site 
  • trac/web/href.py

    diff --git a/trac/web/href.py b/trac/web/href.py
    a b  
    129129            if type(value) in (list, tuple): 
    130130                for i in [i for i in value if i != None]: 
    131131                    params.append((name, i)) 
    132             elif v != None: 
     132            elif value != None: 
    133133                params.append((name, value)) 
    134134 
    135135        if args: 
  • trac/web/main.py

    diff --git a/trac/web/main.py b/trac/web/main.py
    a b  
    437437        data = {'title': title, 'type': 'TracError', 'message': e.detail, 
    438438                'frames': [], 'traceback': None} 
    439439        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})) 
    440445            req.send_error(sys.exc_info(), status=e.code, env=env, data=data) 
    441446        except RequestDone: 
    442447            pass