This is an automated email from the ASF dual-hosted git repository. gcruz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/allura.git
commit 9a017ce70b62cae58e5916856d1e152f44a805a3 Author: Dave Brondsema <[email protected]> AuthorDate: Mon Jan 6 16:49:31 2025 -0500 create return_to redirect helper --- Allura/allura/lib/custom_middleware.py | 9 +-------- Allura/allura/lib/helpers.py | 15 +++++++++++++++ Allura/allura/lib/plugin.py | 10 +--------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Allura/allura/lib/custom_middleware.py b/Allura/allura/lib/custom_middleware.py index 9e937a66d..b32bece97 100644 --- a/Allura/allura/lib/custom_middleware.py +++ b/Allura/allura/lib/custom_middleware.py @@ -157,14 +157,7 @@ class LoginRedirectMiddleware: is_api_request = environ.get('PATH_INFO', '').startswith('/rest/') if status[:3] == '401' and not is_api_request and not is_ajax(Request(environ)): login_url = tg.config.get('auth.login_url', '/auth/') - if environ['REQUEST_METHOD'] == 'GET': - return_to = environ['PATH_INFO'] - if environ.get('QUERY_STRING'): - return_to += '?' + environ['QUERY_STRING'] - location = tg.url(login_url, dict(return_to=return_to)) - else: - # Don't try to re-post; the body has been lost. - location = tg.url(login_url) + location = h.url_return_to(login_url, environ=environ) r = exc.HTTPFound(location=location, headers={'X-Robots-Tag': 'noindex,follow'}) return r(environ, start_response) start_response(status, headers, exc_info) diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py index a8a903da7..96658f835 100644 --- a/Allura/allura/lib/helpers.py +++ b/Allura/allura/lib/helpers.py @@ -45,6 +45,7 @@ import tg import six import cchardet as chardet import pkg_resources +import webob from formencode.validators import FancyValidator from dateutil.parser import parse from bson import ObjectId @@ -551,6 +552,20 @@ def absurl(url): return host + url +def url_return_to(url: str, request: webob.Request | None = None, environ: dict | None = None) -> str: + if not environ: + environ = request.environ + if environ['REQUEST_METHOD'] == 'GET': + return_to = environ['PATH_INFO'] + if environ.get('QUERY_STRING'): + return_to += '?' + environ['QUERY_STRING'] + location = tg.url(url, dict(return_to=return_to)) + else: + # Don't try to re-post; the body has been lost. + location = tg.url(url) + return location + + def diff_text(t1, t2, differ=None): t1_lines = t1.replace('\r', '').split('\n') t2_lines = t2.replace('\r', '').split('\n') diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py index 6f48524cb..437357be2 100644 --- a/Allura/allura/lib/plugin.py +++ b/Allura/allura/lib/plugin.py @@ -151,15 +151,7 @@ class AuthenticationProvider: return M.User.anonymous() if self.session.get('pwd-expired') and request.path not in self.pwd_expired_allowed_urls: - if self.request.environ['REQUEST_METHOD'] == 'GET': - return_to = self.request.environ['PATH_INFO'] - if self.request.environ.get('QUERY_STRING'): - return_to += '?' + self.request.environ['QUERY_STRING'] - location = tg.url(self.pwd_expired_allowed_urls[0], dict(return_to=return_to)) - else: - # Don't try to re-post; the body has been lost. - location = tg.url(self.pwd_expired_allowed_urls[0]) - redirect(location) + redirect(h.url_return_to(self.pwd_expired_allowed_urls[0], self.request)) return user
