rack-detect-tor 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rack-detect-tor.rb +26 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca95a72a1819a0419c4eb93a4f4fd21ffd46167f
|
4
|
+
data.tar.gz: 5ebe2469cb14b0306f989c942c2ea8a3f9b64857
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9299cf11e242970a1f9a7b08ce8b127f6373c7cf1bb6902d1b2481f2e9d6a2c85a5cd8eb536acc88ac22f3fc15bfc711e0b2ff098adb1ada2de7052501f347c0
|
7
|
+
data.tar.gz: c2b87df5d9c00998f6267205dbd8917aa1f6d97ce7d5c17904336c7cc265745a14dbdb393d9074e9080466d3a93305c4631f893eb5026e41973dd3e90b11e93e
|
data/lib/rack-detect-tor.rb
CHANGED
@@ -26,7 +26,7 @@ module Rack
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def call(env)
|
29
|
-
env['tor_exit_user'] = @tor_exits.include? env
|
29
|
+
env['tor_exit_user'] = @tor_exits.include? request_ip(env)
|
30
30
|
@app.call(env)
|
31
31
|
end
|
32
32
|
|
@@ -81,5 +81,30 @@ module Rack
|
|
81
81
|
$stderr.puts "Rack::DetectTor [#{@identifier}]: ERROR: #{message}"
|
82
82
|
end
|
83
83
|
|
84
|
+
# below yanked from https://github.com/rack/rack/blob/master/lib/rack/request.rb
|
85
|
+
|
86
|
+
def request_ip(env)
|
87
|
+
remote_addrs = split_ip_addresses(env['REMOTE_ADDR'])
|
88
|
+
remote_addrs = reject_trusted_ip_addresses(remote_addrs)
|
89
|
+
|
90
|
+
return remote_addrs.first if remote_addrs.any?
|
91
|
+
|
92
|
+
forwarded_ips = split_ip_addresses(env['HTTP_X_FORWARDED_FOR'])
|
93
|
+
|
94
|
+
return reject_trusted_ip_addresses(forwarded_ips).last || env["REMOTE_ADDR"]
|
95
|
+
end
|
96
|
+
|
97
|
+
def trusted_proxy?(ip)
|
98
|
+
ip =~ /\A127\.0\.0\.1\Z|\A(10|172\.(1[6-9]|2[0-9]|30|31)|192\.168)\.|\A::1\Z|\Afd[0-9a-f]{2}:.+|\Alocalhost\Z|\Aunix\Z|\Aunix:/i
|
99
|
+
end
|
100
|
+
|
101
|
+
def reject_trusted_ip_addresses(ip_addresses)
|
102
|
+
ip_addresses.reject { |ip| trusted_proxy?(ip) }
|
103
|
+
end
|
104
|
+
|
105
|
+
def split_ip_addresses(ip_addresses)
|
106
|
+
ip_addresses ? ip_addresses.strip.split(/[,\s]+/) : []
|
107
|
+
end
|
108
|
+
|
84
109
|
end
|
85
110
|
end
|