rack-detect-tor 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|