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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rack-detect-tor.rb +26 -1
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7963c9ae710b9b5f9a6b47ea251aa6bddc644aac
4
- data.tar.gz: 45b6a0b4c6c9d3a2c6ed6a57b6c088b7b4bd6fa6
3
+ metadata.gz: ca95a72a1819a0419c4eb93a4f4fd21ffd46167f
4
+ data.tar.gz: 5ebe2469cb14b0306f989c942c2ea8a3f9b64857
5
5
  SHA512:
6
- metadata.gz: 35a6e8440ae33e266e6f7d70259f3aab97185fc6251b66b6d724740ea7cbc843be81442f5924883fcd3b27e66cd8ecbaa903994b8ef38445b5ec5932559b3d81
7
- data.tar.gz: 9edc60fbfb0c4698b061a81dbd0ec01b282caf37502113cb330cb0886cde470852fb7ba8f381a93e5ec3d52cb2cd700bb46687565473976196a196a7f46ec441
6
+ metadata.gz: 9299cf11e242970a1f9a7b08ce8b127f6373c7cf1bb6902d1b2481f2e9d6a2c85a5cd8eb536acc88ac22f3fc15bfc711e0b2ff098adb1ada2de7052501f347c0
7
+ data.tar.gz: c2b87df5d9c00998f6267205dbd8917aa1f6d97ce7d5c17904336c7cc265745a14dbdb393d9074e9080466d3a93305c4631f893eb5026e41973dd3e90b11e93e
@@ -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['REMOTE_ADDR']
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-detect-tor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Warren Guy