File tree Expand file tree Collapse file tree 6 files changed +37
-26
lines changed Expand file tree Collapse file tree 6 files changed +37
-26
lines changed Original file line number Diff line number Diff line change 1
- __version__ = "0.1.2 "
1
+ __version__ = "0.1.3 "
Original file line number Diff line number Diff line change
1
+ import re
2
+
1
3
from .skills .forbid_device import ForbidDeviceMiddleware
2
4
from .skills .forbid_location import ForbidLocationMiddleware
3
5
from .skills .forbid_network import ForbidNetworkMiddleware
@@ -14,8 +16,11 @@ class ForbidMiddleware:
14
16
15
17
def __init__ (self , get_response ):
16
18
self .get_response = get_response
19
+ self .regex = re .compile (r"\w+/(?:html|xhtml\+xml|xml)" )
17
20
18
21
def __call__ (self , request ):
19
- for skill in __skills__ :
20
- self .get_response = skill (self .get_response )
21
- return self .get_response (request )
22
+ get_response = self .get_response
23
+ if self .regex .search (request .META .get ("HTTP_ACCEPT" )):
24
+ for skill in __skills__ :
25
+ get_response = skill (get_response )
26
+ return get_response (request )
Original file line number Diff line number Diff line change @@ -20,6 +20,10 @@ def __call__(self, request):
20
20
address = request .META .get ("REMOTE_ADDR" )
21
21
address = request .META .get ("HTTP_X_FORWARDED_FOR" , address )
22
22
client_ip = address .split ("," )[0 ].strip ()
23
+ verified_ip = request .session .get ("VERIFIED_IP" , "" )
24
+
25
+ if verified_ip and verified_ip == client_ip :
26
+ return self .get_response (request )
23
27
24
28
try :
25
29
city = geoip .city (client_ip )
@@ -47,8 +51,12 @@ def __call__(self, request):
47
51
request .session ["GEOIP2_TZ" ] = timezone
48
52
49
53
if granted :
54
+ request .session ["VERIFIED_IP" ] = client_ip
50
55
return self .get_response (request )
51
56
57
+ # Erases the timezone from the session.
58
+ request .session ["VERIFIED_IP" ] = ""
59
+
52
60
# Redirects to the FORBIDDEN_LOC URL if set.
53
61
if Settings .has ("OPTIONS.URL.FORBIDDEN_LOC" ):
54
62
return redirect (Settings .get ("OPTIONS.URL.FORBIDDEN_LOC" ))
Original file line number Diff line number Diff line change 1
1
import json
2
- import re
3
2
4
3
from django .http import HttpResponse
5
4
from django .http import HttpResponseForbidden
@@ -31,20 +30,11 @@ def forbidden_page():
31
30
geoip2_tz = request .session .get ("GEOIP2_TZ" )
32
31
verified_tz = request .session .get ("VERIFIED_TZ" , "" )
33
32
34
- if any ([
35
- verified_tz == geoip2_tz ,
36
- # Checks if VPN is False or not set.
37
- not Settings .get ("OPTIONS.VPN" , False ),
38
- # Checks if the request is an AJAX request.
39
- not re .search (
40
- r"\w+\/(?:html|xhtml\+xml|xml)" ,
41
- request .META .get ("HTTP_ACCEPT" ),
42
- ),
43
- ]):
33
+ # Checks if the user's timezone match with the last accessed one.
34
+ if verified_tz == geoip2_tz or not Settings .get ("OPTIONS.VPN" , False ):
44
35
return self .get_response (request )
45
-
46
36
# Checks if GEOIP2_TZ and VERIFIED_TZ don't exist.
47
- if all ([ verified_tz , geoip2_tz != "N/A" ]) :
37
+ elif verified_tz and geoip2_tz != "N/A" :
48
38
return forbidden_page ()
49
39
50
40
if all (map (request .session .has_key , ("GEOIP2_TZ" , * response_attributes ))):
Original file line number Diff line number Diff line change 6
6
from tests import WSGIRequest
7
7
8
8
9
- def skips (get_response , ip_address , ajax = False ):
10
- detector = Detector (get_response , ajax = ajax )
9
+ def skips (get_response , ip_address ):
10
+ detector = Detector (get_response )
11
11
response = detector .request_resource (ip_address )
12
12
return response .status_code == 200
13
13
@@ -84,10 +84,3 @@ def test_should_allow_users_only_from_great_britain_with_shared_session(get_resp
84
84
assert forbids_shared_session (detector , IP .ip_cobain )
85
85
# Turn off VPN - back to London
86
86
assert not forbids_shared_session (detector , IP .ip_london )
87
-
88
-
89
- @override_settings (DJANGO_FORBID = {"OPTIONS" : {"VPN" : True }})
90
- def test_should_allow_ajax_requests (get_response ):
91
- """It should give access to the user when request is done by AJAX"""
92
- for ip_address in IP .all :
93
- assert skips (get_response , ip_address , True )
Original file line number Diff line number Diff line change 9
9
request = wsgi .get ()
10
10
11
11
12
+ def skips_ajax (get_response , ip_address ):
13
+ wsgi_ajax = WSGIRequest (True )
14
+ request_ajax = wsgi_ajax .get ()
15
+ request_ajax .META ["HTTP_X_FORWARDED_FOR" ] = ip_address
16
+ response = ForbidMiddleware (get_response )(request_ajax )
17
+ return response .status_code == 200
18
+
19
+
12
20
def forbids (get_response , request ):
13
21
response = ForbidMiddleware (get_response )(request )
14
22
client_ip = request .META ["HTTP_X_FORWARDED_FOR" ]
@@ -80,3 +88,10 @@ def test_should_allow_users_only_from_great_britain_with_shared_session(get_resp
80
88
# Turn off VPN - back to London
81
89
request .META ["HTTP_X_FORWARDED_FOR" ] = IP .ip_london
82
90
assert not forbids (get_response , request )
91
+
92
+
93
+ @override_settings (DJANGO_FORBID = {"OPTIONS" : {"VPN" : True }})
94
+ def test_should_allow_ajax_requests (get_response ):
95
+ """It should give access to the user when request is done by AJAX"""
96
+ for ip_address in IP .all :
97
+ assert skips_ajax (get_response , ip_address )
You can’t perform that action at this time.
0 commit comments