Skip to content

Commit 733a69e

Browse files
committed
GH-27: Fix the skills execution order
1 parent afa281b commit 733a69e

File tree

3 files changed

+39
-15
lines changed

3 files changed

+39
-15
lines changed

src/django_forbid/middleware.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from .skills.forbid_network import ForbidNetworkMiddleware
44

55
__skills__ = (
6-
ForbidDeviceMiddleware,
7-
ForbidLocationMiddleware,
86
ForbidNetworkMiddleware,
7+
ForbidLocationMiddleware,
8+
ForbidDeviceMiddleware,
99
)
1010

1111

tests/test_network_middleware.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,16 @@ def skips(get_response, ip_address, ajax=False):
1212
return response.status_code == 200
1313

1414

15-
def forbids(get_response, ip_address):
16-
detector = Detector(get_response)
15+
def forbids_shared_session(detector, ip_address):
1716
response = detector.request_resource(ip_address)
18-
assert response.status_code == 302
19-
response = detector.request_access()
17+
if response.status_code == 302:
18+
response = detector.request_access(ip_address)
2019
return response.status_code == 403
2120

2221

23-
def forbids_shared_session(detector, ip_address):
24-
response = detector.request_resource(ip_address)
25-
assert response.status_code == 302
26-
response = detector.request_access()
27-
return response.status_code == 403
22+
def forbids(get_response, ip_address):
23+
detector = Detector(get_response)
24+
return forbids_shared_session(detector, ip_address)
2825

2926

3027
class Detector:
@@ -36,13 +33,15 @@ def request_resource(self, ip_address=""):
3633
"""Sends a request to the server to access a resource"""
3734
request = self.request.get()
3835
request.META["HTTP_X_FORWARDED_FOR"] = ip_address
39-
get_response = ForbidLocationMiddleware(self.get_response)
40-
return ForbidNetworkMiddleware(get_response)(request)
36+
get_response = ForbidNetworkMiddleware(self.get_response)
37+
return ForbidLocationMiddleware(get_response)(request)
4138

42-
def request_access(self):
39+
def request_access(self, ip_address=""):
4340
"""Simulates the request sent by the user browser to the server"""
4441
request = self.request.post({"CLIENT_TZ": "Europe/London"})
45-
return ForbidNetworkMiddleware(self.get_response)(request)
42+
request.META["HTTP_X_FORWARDED_FOR"] = ip_address
43+
get_response = ForbidNetworkMiddleware(self.get_response)
44+
return ForbidLocationMiddleware(get_response)(request)
4645

4746

4847
def test_should_allow_all_when_no_config_provided(get_response):

tests/test_primary_middleware.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111

1212
def forbids(get_response, request):
1313
response = ForbidMiddleware(get_response)(request)
14+
client_ip = request.META["HTTP_X_FORWARDED_FOR"]
1415
if response.status_code == 302:
1516
request = wsgi.post({"CLIENT_TZ": "Europe/London"})
17+
request.META["HTTP_X_FORWARDED_FOR"] = client_ip
1618
response = ForbidMiddleware(get_response)(request)
1719
return response.status_code == 403
1820

@@ -49,9 +51,32 @@ def test_should_forbid_users_when_country_in_territories_blacklist(get_response)
4951

5052
@override_settings(DJANGO_FORBID={"COUNTRIES": ["GB"], "OPTIONS": {"VPN": True}})
5153
def test_should_allow_users_when_country_in_countries_whitelist(get_response):
54+
"""Should allow access to users from countries in whitelist."""
5255
for ip_address in IP.all:
5356
request.META["HTTP_X_FORWARDED_FOR"] = ip_address
5457
if ip_address == IP.ip_london:
5558
assert not forbids(get_response, request)
5659
continue
5760
assert forbids(get_response, request)
61+
62+
63+
@override_settings(DJANGO_FORBID={"OPTIONS": {"VPN": True}})
64+
def test_should_allow_users_only_from_great_britain_with_shared_session(get_response):
65+
"""It should give access to the user from Great Britain when session is shared"""
66+
# Get access from London
67+
request.META["HTTP_X_FORWARDED_FOR"] = IP.ip_london
68+
assert not forbids(get_response, request)
69+
# Turn on VPN temporary
70+
request.META["HTTP_X_FORWARDED_FOR"] = IP.ip_zurich
71+
assert forbids(get_response, request)
72+
request.META["HTTP_X_FORWARDED_FOR"] = IP.ip_cobain
73+
assert forbids(get_response, request)
74+
# Turn off VPN - back to London
75+
request.META["HTTP_X_FORWARDED_FOR"] = IP.ip_london
76+
assert not forbids(get_response, request)
77+
# Turn on VPN temporary
78+
request.META["HTTP_X_FORWARDED_FOR"] = IP.ip_cobain
79+
assert forbids(get_response, request)
80+
# Turn off VPN - back to London
81+
request.META["HTTP_X_FORWARDED_FOR"] = IP.ip_london
82+
assert not forbids(get_response, request)

0 commit comments

Comments
 (0)