Skip to content

Commit 70b1239

Browse files
Optimize multiple checks with caching (GH-35)
2 parents 86439f5 + d3de6d1 commit 70b1239

File tree

4 files changed

+12
-6
lines changed

4 files changed

+12
-6
lines changed

setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ classifiers =
3636
Framework :: Django :: 2.2
3737
Framework :: Django :: 3.1
3838
Framework :: Django :: 3.2
39-
Framework :: Django :: 4.0
4039
Framework :: Django :: 4.1
40+
Framework :: Django :: 4.2
4141
Programming Language :: Python
4242
Programming Language :: Python :: 3
4343
Programming Language :: Python :: 3.6

src/django_forbid/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.1.5"
1+
__version__ = "0.1.6"

src/django_forbid/skills/forbid_device.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,27 @@ def __call__(self, request):
2323

2424
devices = Settings.get("DEVICES", [])
2525
device_type = request.session.get("DEVICE")
26+
http_ua = request.META.get("HTTP_USER_AGENT")
27+
verified_ua = request.session.get("VERIFIED_UA", "")
2628

27-
# Skip if DEVICES empty.
28-
if not devices:
29+
# Skips if DEVICES empty or user agent is verified.
30+
if not devices or verified_ua == http_ua:
2931
return self.get_response(request)
3032

3133
if not device_type:
32-
http_ua = request.META.get("HTTP_USER_AGENT")
3334
device_detector = DeviceDetector(http_ua)
3435
device_detector = device_detector.parse()
3536
device = device_detector.device_type()
3637
device_type = device_aliases.get(device, device)
3738
request.session["DEVICE"] = device_type
3839

3940
if Access(devices).grants(device_type):
41+
request.session["VERIFIED_UA"] = http_ua
4042
return self.get_response(request)
4143

44+
# Erases the user agent from the session.
45+
request.session["VERIFIED_UA"] = ""
46+
4247
# Redirects to the FORBIDDEN_DEV URL if set.
4348
if Settings.has("OPTIONS.URL.FORBIDDEN_DEV"):
4449
return redirect(Settings.get("OPTIONS.URL.FORBIDDEN_DEV"))

src/django_forbid/skills/forbid_location.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ def __call__(self, request):
2525
client_ip = address.split(",")[0].strip()
2626
verified_ip = request.session.get("VERIFIED_IP", "")
2727

28-
if verified_ip and verified_ip == client_ip:
28+
# Skips if user IP is verified.
29+
if verified_ip == client_ip:
2930
return self.get_response(request)
3031

3132
try:

0 commit comments

Comments
 (0)