rack-tor-tag 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 63d7e1b87377867aa008c60820bd02ede6f32a17
4
+ data.tar.gz: a80f5026ebe074da7ee24dfb0310440f4c1fd1de
5
+ SHA512:
6
+ metadata.gz: f1e82ee67fa8cfbb51ccd937fd6a03c09865a74c8af71837643f0b71b4b715d35f378008bea91090a08fb8dc979b041147c66e11e3806558ef1a43a6c553261c
7
+ data.tar.gz: 49d6866e945b236496ec8d311d02f7ae598f18d2f646e6c6a53d1cd1ac9067f837c5a1c2c5e8cf080950a4cf53d94d21496ff4d4f3ec408f29409e636d09f368
data/lib/rack/ip.rb ADDED
@@ -0,0 +1,34 @@
1
+ require 'resolv'
2
+
3
+ module Rack
4
+ class IP
5
+
6
+ TOR_POSITIVE_IP = '127.0.0.2' #In case the DNS look up is positive, this is the IP address returned
7
+ TOR_DNSEL = 'ip-port.exitlist.torproject.org' #https://www.torproject.org/projects/tordnsel.html.en
8
+
9
+ GOOGLE_DNS_ADDR = '8.8.8.8'
10
+ GOOGLE_DNS_PORT = '53'
11
+
12
+ # client_addr is the address of the remote client we want to test to be an TOR node
13
+ # server_addr is the address of a public IP server we want to reach passing through client_addr
14
+ # server_port is a TCP port running on server_addr to test for positiviness to TOR network
15
+ def initialize(client_addr, server_addr = GOOGLE_DNS_ADDR, server_port=GOOGLE_DNS_PORT)
16
+ @client_addr, @server_port, @server_addr = client_addr.to_s, server_port.to_s, server_addr.to_s
17
+ end
18
+
19
+ def is_tor? #Implements https://www.torproject.org/projects/tordnsel.html.en
20
+ Resolv.getaddress(tor_hostname) == TOR_POSITIVE_IP
21
+ rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Resolv::ResolvError => e
22
+ false
23
+ end
24
+
25
+ def tor_hostname
26
+ [reverse_ip_octets(@client_addr), @server_port, reverse_ip_octets(@server_addr), TOR_DNSEL].join('.')
27
+ end
28
+
29
+ def reverse_ip_octets(ip)
30
+ ip.split('.').reverse.join('.')
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,23 @@
1
+ require 'rack'
2
+ require 'rack/ip'
3
+
4
+ module Rack
5
+ class TorTag
6
+
7
+ # DEFAULT_REDIRECT = 'https://sorry.google.com' #We're sorry from Google
8
+
9
+ def initialize(app)
10
+ @app = app
11
+ end
12
+
13
+ def call(env)
14
+ puts "env", env
15
+ req = Rack::Request.new(env)
16
+ puts "req", req.inspect
17
+ # return [302, {'Content-Type' => 'text', 'Location' => DEFAULT_REDIRECT}, [] ] if Rack::IP.new(env['action_dispatch.remote_ip'] || req.ip).is_tor?
18
+
19
+ #Normal processing
20
+ @app.call(env)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1 @@
1
+ require "rack/tor_tag"
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-tor-tag
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Sai
8
+ - Luca Bonmassar
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rack
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">"
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">"
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ description: Mark Tor users using rack, for filtering / throttling / etc
43
+ email:
44
+ - sai@makeyourlaws.org
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - lib/rack-tor-tag.rb
50
+ - lib/rack/ip.rb
51
+ - lib/rack/tor_tag.rb
52
+ homepage: https://makeyourlaws.org
53
+ licenses: []
54
+ metadata: {}
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 2.2.1
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: Mark Tor users using rack, for filtering / throttling / etc
75
+ test_files: []