port to new django, AI automated

This commit is contained in:
2026-03-30 22:35:36 +02:00
parent e2d166e437
commit 372da3caa9
215 changed files with 9283 additions and 2981 deletions

View File

@@ -1,37 +1,41 @@
from django.http import HttpResponseRedirect
from django.conf import settings
import re
from django.conf import settings
from django.http import HttpResponseRedirect
class EnforceLoginMiddleware:
"""
Middlware class which requires the user to be authenticated for all urls except
those defined in PUBLIC_URLS in settings.py. PUBLIC_URLS should be a tuple of regular
expresssions for the urls you want anonymous users to have access to. If PUBLIC_URLS
is not defined, it falls back to LOGIN_URL or failing that '/accounts/login/'.
Requests for urls not matching PUBLIC_URLS get redirected to LOGIN_URL with next set
to original path of the unauthenticted request.
Middleware class which requires the user to be authenticated for all urls except
those defined in PUBLIC_URLS in settings.py. PUBLIC_URLS should be a tuple of regular
expressions for the urls you want anonymous users to have access to. If PUBLIC_URLS
is not defined, it falls back to LOGIN_URL or failing that '/accounts/login/'.
Requests for urls not matching PUBLIC_URLS get redirected to LOGIN_URL with next set
to original path of the unauthenticated request.
Any urls statically served by django are excluded from this check. To enforce the same
validation on these set SERVE_STATIC_TO_PUBLIC to False.
"""
def __init__(self, get_response):
self.login_url = getattr(settings, 'LOGIN_URL', '/accounts/login/')
self.get_response = get_response
self.login_url = getattr(settings, "LOGIN_URL", "/accounts/login/")
if hasattr(settings, 'PUBLIC_URLS'):
if hasattr(settings, "PUBLIC_URLS"):
public_urls = [re.compile(url) for url in settings.PUBLIC_URLS]
else:
public_urls = [(re.compile("^%s/?$" % (self.login_url[1:])))]
if getattr(settings, 'SERVE_STATIC_TO_PUBLIC', True):
root_urlconf = __import__(settings.ROOT_URLCONF)
public_urls.extend([re.compile(url.regex)
for url in root_urlconf.urls.urlpatterns
if url.__dict__.get('_callback_str') == 'django.views.static.serve'
])
public_urls = [re.compile("^%s/?$" % (self.login_url[1:]))]
self.public_urls = tuple(public_urls)
def __call__(self, request):
# Check if user needs to be redirected to login
redirect_response = self.check_login(request)
if redirect_response:
return redirect_response
return self.get_response(request)
def check_login(self, request):
"""
Redirect anonymous users to login_url from non public urls
"""
@@ -40,52 +44,63 @@ class EnforceLoginMiddleware:
for url in self.public_urls:
if url.match(request.path[1:]):
return None
return HttpResponseRedirect("%s?next=%s" % (self.login_url, request.path))
return HttpResponseRedirect(
"%s?next=%s" % (self.login_url, request.path)
)
except AttributeError:
return HttpResponseRedirect("%s?next=%s" % (self.login_url, request.path))
return self.get_response(request)
return None
class DetectDevice:
"""
Middleware to detect the device type from user agent string.
"""
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
device = self.mobile(request)
request.device = self.detect_device(request)
return self.get_response(request)
request.device = device
response = self.get_response(request)
return response
def mobile(self, request):
def detect_device(self, request):
device = {}
ua = request.META.get('HTTP_USER_AGENT', '').lower()
ua = request.META.get("HTTP_USER_AGENT", "").lower()
if ua.find("iphone") > 0:
device['iphone'] = "iphone" + re.search("iphone os (\d)", ua).groups(0)[0]
if "iphone" in ua:
match = re.search(r"iphone os (\d)", ua)
if match:
device["iphone"] = "iphone" + match.group(1)
else:
device["iphone"] = "iphone"
if ua.find("ipad") > 0:
device['ipad'] = "ipad"
if "ipad" in ua:
device["ipad"] = "ipad"
if ua.find("android") > 0:
device['android'] = "android" + re.search("android (\d\.\d)", ua).groups(0)[0].translate(None, '.')
if "android" in ua:
match = re.search(r"android (\d\.\d)", ua)
if match:
version = match.group(1).replace(".", "")
device["android"] = "android" + version
else:
device["android"] = "android"
if ua.find("blackberry") > 0:
device['blackberry'] = "blackberry"
if "blackberry" in ua:
device["blackberry"] = "blackberry"
if ua.find("windows phone os 7") > 0:
device['winphone7'] = "winphone7"
if "windows phone os 7" in ua:
device["winphone7"] = "winphone7"
if ua.find("iemobile") > 0:
device['winmo'] = "winmo"
if "iemobile" in ua:
device["winmo"] = "winmo"
if not device: # either desktop, or something we don't care about.
device['baseline'] = "baseline"
if not device:
# either desktop, or something we don't care about.
device["baseline"] = "baseline"
# spits out device names for CSS targeting, to be applied to <html> or <body>.
device['classes'] = " ".join(v for (k, v) in device.items())
device["classes"] = " ".join(v for (k, v) in device.items())
return device