New upstream version 2.0.2
James Valleroy
6 years ago
10 | 10 |
- "pypy3"
|
11 | 11 |
|
12 | 12 |
env:
|
13 | |
- DJANGO="django==2.0.1"
|
14 | |
- DJANGO="django==1.11.9"
|
15 | |
- DJANGO="django==1.8.18"
|
|
13 |
- DJANGO="django==2.0.4"
|
|
14 |
- DJANGO="django==1.11.12"
|
16 | 15 |
|
17 | 16 |
install:
|
18 | 17 |
- pip install $DJANGO
|
|
28 | 27 |
matrix:
|
29 | 28 |
exclude:
|
30 | 29 |
- python: "2.7"
|
31 | |
env: DJANGO="django==2.0.1"
|
|
30 |
env: DJANGO="django==2.0.4"
|
32 | 31 |
- python: "pypy"
|
33 | |
env: DJANGO="django==2.0.1"
|
|
32 |
env: DJANGO="django==2.0.4"
|
34 | 33 |
|
35 | 34 |
script: coverage run --source=ipware manage.py test
|
36 | 35 |
|
|
0 |
## 2.0.2
|
|
1 |
|
|
2 |
Enhancement:
|
|
3 |
- Added the ability to private the request precedence order on each call
|
|
4 |
|
0 | 5 |
## 2.0.1
|
1 | 6 |
|
2 | 7 |
Enhancement:
|
65 | 65 |
```python
|
66 | 66 |
# The default meta precedence order
|
67 | 67 |
IPWARE_META_PRECEDENCE_ORDER = (
|
68 | |
'HTTP_X_FORWARDED_FOR', 'X_FORWARDED_FOR', # <client>, <proxy1>, <proxy2
|
|
68 |
'HTTP_X_FORWARDED_FOR', 'X_FORWARDED_FOR', # <client>, <proxy1>, <proxy2>
|
69 | 69 |
'HTTP_CLIENT_IP',
|
70 | 70 |
'HTTP_X_REAL_IP',
|
71 | 71 |
'HTTP_X_FORWARDED',
|
|
76 | 76 |
'REMOTE_ADDR',
|
77 | 77 |
)
|
78 | 78 |
```
|
79 | |
|
|
79 |
**Alternativley**, you can provide your custom `request header meta precedence order` when calling `get_client_ip()`.
|
|
80 |
```python
|
|
81 |
get_client_ip(request, request_header_order=['X_FORWARDED_FOR'])
|
|
82 |
get_client_ip(request, request_header_order=['X_FORWARDED_FOR', 'HTTP_X_FORWARDED_FOR'])
|
|
83 |
```
|
80 | 84 |
|
81 | 85 |
- ### Private Prefixes
|
82 | 86 |
|
4 | 4 |
|
5 | 5 |
__author__ = 'Val Neekman @ Neekware Inc. [@vneekman]'
|
6 | 6 |
__description__ = "A Django application to retrieve user's IP address"
|
7 | |
__version__ = '2.0.1'
|
|
7 |
__version__ = '2.0.2'
|
5 | 5 |
request,
|
6 | 6 |
proxy_order='left-most',
|
7 | 7 |
proxy_count=None,
|
8 | |
proxy_trusted_ips=None
|
|
8 |
proxy_trusted_ips=None,
|
|
9 |
request_header_order=None,
|
9 | 10 |
):
|
10 | 11 |
client_ip = None
|
11 | 12 |
routable = False
|
|
16 | 17 |
if proxy_trusted_ips is None:
|
17 | 18 |
proxy_trusted_ips = []
|
18 | 19 |
|
19 | |
for key in defs.IPWARE_META_PRECEDENCE_ORDER:
|
|
20 |
if request_header_order is None:
|
|
21 |
request_header_order = defs.IPWARE_META_PRECEDENCE_ORDER
|
|
22 |
|
|
23 |
for key in request_header_order:
|
20 | 24 |
value = util.get_request_meta(request, key)
|
21 | 25 |
if value:
|
22 | 26 |
ips, ip_count = util.get_ips_from_string(value)
|
229 | 229 |
}
|
230 | 230 |
ip = get_client_ip(request)
|
231 | 231 |
self.assertEqual(ip, ("100.128.0.9", True))
|
|
232 |
|
|
233 |
def test_request_header_order_specific(self):
|
|
234 |
request = HttpRequest()
|
|
235 |
request.META = {
|
|
236 |
'HTTP_X_REAL_IP': '192.168.1.1',
|
|
237 |
'REMOTE_ADDR': '177.139.233.139',
|
|
238 |
'HTTP_X_FORWARDED_FOR': '177.139.233.139, 198.84.193.157, 198.84.193.158',
|
|
239 |
}
|
|
240 |
ip = get_client_ip(request, request_header_order=['HTTP_X_FORWARDED_FOR'])
|
|
241 |
self.assertEqual(ip, ("177.139.233.139", True))
|
|
242 |
|
|
243 |
|
|
244 |
def test_request_header_order_multiple(self):
|
|
245 |
request = HttpRequest()
|
|
246 |
request.META = {
|
|
247 |
'HTTP_X_FORWARDED_FOR': '177.139.233.139, 198.84.193.157, 198.84.193.158',
|
|
248 |
'X_FORWARDED_FOR': '177.139.233.138, 198.84.193.157, 198.84.193.158',
|
|
249 |
'REMOTE_ADDR': '177.139.233.133',
|
|
250 |
}
|
|
251 |
ip = get_client_ip(request, request_header_order=['X_FORWARDED_FOR', 'HTTP_X_FORWARDED_FOR'])
|
|
252 |
self.assertEqual(ip, ("177.139.233.138", True))
|