rack-tor-tag 0.0.8 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c59a4cbd60e309620eea960e00f83f5ae114c2aa
4
- data.tar.gz: 5075c358be74b10b6bc01087b452788bf6de4578
3
+ metadata.gz: 027ae09603e859442444675a51ceecb2ec6818d8
4
+ data.tar.gz: 901771003822ee99803fa46d2abb6a9f23ceed26
5
5
  SHA512:
6
- metadata.gz: 0af76ffd97eb6a7022f4c461db123898b028c12b54f9e9e65476ea5c29386f7998c953eee619be4ff4cf6c537b2112054c01d29ea77c9daedfb114cbe2107b11
7
- data.tar.gz: 7f699f4fd478e2267327b80f7c495f627f06a2a4b828a2674f65909b903406241a418c3155876b771eeef4014a8bff08679f84880d9a87ed4a46a16ef3601a99
6
+ metadata.gz: c6ceb3d63d987ba465055f7e74c74b011ad970e5b4b9df33a800d92db5ea5d1e671c9e13d86f2930306fad9b913f9d73dcc773353673fdb5e09b8addeb531847
7
+ data.tar.gz: 17f69f2a315d5b2ff02e9660521c5ffe2defe07e2b0f75120f8a3628f83db77732c87034c256b9cb565365b5f5145619857ed2e80b6df202cb0097e10106d761
data/Gemfile.lock CHANGED
@@ -1,14 +1,14 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- addressable (2.3.5)
4
+ addressable (2.3.6)
5
5
  builder (3.2.2)
6
- cucumber (1.3.11)
6
+ cucumber (1.3.13)
7
7
  builder (>= 2.1.2)
8
8
  diff-lcs (>= 1.1.3)
9
9
  gherkin (~> 2.12)
10
10
  multi_json (>= 1.7.5, < 2.0)
11
- multi_test (>= 0.0.2)
11
+ multi_test (>= 0.1.1)
12
12
  descendants_tracker (0.0.3)
13
13
  diff-lcs (1.2.5)
14
14
  docile (1.1.3)
@@ -39,9 +39,9 @@ GEM
39
39
  json (1.8.1)
40
40
  jwt (0.1.11)
41
41
  multi_json (>= 1.5)
42
- mini_portile (0.5.2)
43
- multi_json (1.9.0)
44
- multi_test (0.0.3)
42
+ mini_portile (0.5.3)
43
+ multi_json (1.9.2)
44
+ multi_test (0.1.1)
45
45
  multi_xml (0.5.5)
46
46
  multipart-post (2.0.0)
47
47
  nokogiri (1.6.1)
@@ -53,7 +53,7 @@ GEM
53
53
  multi_xml (~> 0.5)
54
54
  rack (~> 1.2)
55
55
  rack (1.5.2)
56
- rake (10.1.1)
56
+ rake (10.2.0)
57
57
  rdoc (4.1.1)
58
58
  json (~> 1.4)
59
59
  rspec (2.14.1)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.8
1
+ 0.1.1
data/lib/rack/tor_tag.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'rack'
2
2
  require 'resolv'
3
3
 
4
+ # Not in rbx. See https://github.com/rubinius/rubinius/issues/2303
5
+ RESOLV_WORKS = Socket.methods.include?(:ip_address_list)
6
+
4
7
  module Rack
5
8
  class TorTag
6
9
  DEFAULT_PARAMS = {
@@ -14,6 +17,8 @@ module Rack
14
17
  def initialize(app, params = {})
15
18
  @app = app
16
19
  @params = DEFAULT_PARAMS.merge(params)
20
+ puts "rack-tor-tag initialized: #{app} - #{params}"
21
+ # raise ArgumentError, "Must pass :host_ips" unless RESOLV_WORKS
17
22
  end
18
23
 
19
24
  def call(env)
@@ -44,18 +49,29 @@ module Rack
44
49
  def is_tor? ip, env
45
50
  # We're a hidden service! Of course it's Tor.
46
51
  return true if env['HTTP_HOST'] =~ /\.onion\z/
47
- return false if (ip == 'localhost') or (env['HTTP_HOST'] == 'localhost')
52
+ return false if (['localhost','127.0.0.1'].include? ip) or (['localhost','127.0.0.1'].include? env['HTTP_HOST'])
53
+
54
+ host_ips = @params[:host_ips]
48
55
 
49
- host_ips = @params[:host_ips] || Resolv.getaddresses(
50
- env['HTTP_HOST'] ? env['HTTP_HOST'].sub(/:.*/,'') : env['SERVER_NAME']).
51
- select{|i| i[Resolv::IPv4::Regex]} # DNEL only works with IPv4
56
+ if RESOLV_WORKS
57
+ addrs = (env['HTTP_HOST'] ? env['HTTP_HOST'].sub(/:.*/,'') : env['SERVER_NAME'])
58
+ host_ips ||= Resolv.getaddresses(addrs).select{
59
+ |i| i[Resolv::IPv4::Regex] # DNEL only works with IPv4
60
+ }
61
+ else
62
+ raise ArgumentError, "Socket.ip_address_list is missing, so you must pass :host_ips" unless host_ips
63
+ end
52
64
 
53
65
  host_ips.each do |host_ip|
54
- tor_hostname = [reverse_ip_octets(ip), @params[:host_port] || env['SERVER_PORT'], reverse_ip_octets(host_ip), @params[:dnsel]].join('.')
55
- begin
56
- return true if (Resolv.getaddress(tor_hostname) == '127.0.0.2')
57
- rescue Resolv::ResolvError => e
58
- false # It's supposed to not get a response if it's not a tor host
66
+ tor_hostname = [reverse_ip_octets(ip), @params[:host_port] || env['SERVER_PORT'].to_i, reverse_ip_octets(host_ip), @params[:dnsel]].join('.')
67
+ if RESOLV_WORKS
68
+ begin
69
+ return true if (Resolv.getaddress(tor_hostname) == '127.0.0.2')
70
+ rescue Resolv::ResolvError => e
71
+ false # It's supposed to not get a response if it's not a tor host
72
+ end
73
+ else # try what we can...
74
+ return true if (`dig A +short #{tor_hostname}`.to_s.strip == '127.0.0.2')
59
75
  end
60
76
  end
61
77
  false
@@ -65,7 +81,7 @@ module Rack
65
81
  end
66
82
 
67
83
  def reverse_ip_octets(ip)
68
- ip.to_s.split('.').reverse.join('.')
84
+ ip.to_s.split('.').map(&:to_i).reverse.join('.')
69
85
  end
70
86
  end
71
87
  end
data/rack-tor-tag.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: rack-tor-tag 0.0.8 ruby lib
5
+ # stub: rack-tor-tag 0.1.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "rack-tor-tag"
9
- s.version = "0.0.8"
9
+ s.version = "0.1.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Sai"]
14
- s.date = "2014-03-12"
14
+ s.date = "2014-03-25"
15
15
  s.description = "Mark Tor users using rack, for filtering / throttling / etc"
16
16
  s.email = "github@saizai.com"
17
17
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-tor-tag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-12 00:00:00.000000000 Z
11
+ date: 2014-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec