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
 

Reply via email to