rack-tor-tag 0.0.7 → 0.0.8

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: 1fd11e7a9e96f55497a03c47e8ff355439d6df61
4
- data.tar.gz: a818227dd6bc4674359eba20faf07ac41161c68d
3
+ metadata.gz: c59a4cbd60e309620eea960e00f83f5ae114c2aa
4
+ data.tar.gz: 5075c358be74b10b6bc01087b452788bf6de4578
5
5
  SHA512:
6
- metadata.gz: 33499550d86997dcdf5d0a83d2997d10d4688004f850300e2c66d21c97ddec17f13ce184bdda79f2a78327fb90a1d279339fe5211756dbba58904b48156ff13d
7
- data.tar.gz: 24efd7df0fed9fbfe094869bfdbd72ca233044fab0cf0118e085939363922f3d2e8002669b460d0197d23118d098124ed9c2e36a35be5c35f390ee54a559a96e
6
+ metadata.gz: 0af76ffd97eb6a7022f4c461db123898b028c12b54f9e9e65476ea5c29386f7998c953eee619be4ff4cf6c537b2112054c01d29ea77c9daedfb114cbe2107b11
7
+ data.tar.gz: 7f699f4fd478e2267327b80f7c495f627f06a2a4b828a2674f65909b903406241a418c3155876b771eeef4014a8bff08679f84880d9a87ed4a46a16ef3601a99
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 2"
10
+ gem "rdoc", "~> 4"
11
+ gem "cucumber", "~> 1"
12
+ gem "bundler", "~> 1"
13
+ gem "jeweler", "~> 2"
14
+ gem "simplecov", "~> 0"
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,82 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.3.5)
5
+ builder (3.2.2)
6
+ cucumber (1.3.11)
7
+ builder (>= 2.1.2)
8
+ diff-lcs (>= 1.1.3)
9
+ gherkin (~> 2.12)
10
+ multi_json (>= 1.7.5, < 2.0)
11
+ multi_test (>= 0.0.2)
12
+ descendants_tracker (0.0.3)
13
+ diff-lcs (1.2.5)
14
+ docile (1.1.3)
15
+ faraday (0.9.0)
16
+ multipart-post (>= 1.2, < 3)
17
+ gherkin (2.12.2)
18
+ multi_json (~> 1.3)
19
+ git (1.2.6)
20
+ github_api (0.11.3)
21
+ addressable (~> 2.3)
22
+ descendants_tracker (~> 0.0.1)
23
+ faraday (~> 0.8, < 0.10)
24
+ hashie (>= 1.2)
25
+ multi_json (>= 1.7.5, < 2.0)
26
+ nokogiri (~> 1.6.0)
27
+ oauth2
28
+ hashie (2.0.5)
29
+ highline (1.6.21)
30
+ jeweler (2.0.1)
31
+ builder
32
+ bundler (>= 1.0)
33
+ git (>= 1.2.5)
34
+ github_api
35
+ highline (>= 1.6.15)
36
+ nokogiri (>= 1.5.10)
37
+ rake
38
+ rdoc
39
+ json (1.8.1)
40
+ jwt (0.1.11)
41
+ multi_json (>= 1.5)
42
+ mini_portile (0.5.2)
43
+ multi_json (1.9.0)
44
+ multi_test (0.0.3)
45
+ multi_xml (0.5.5)
46
+ multipart-post (2.0.0)
47
+ nokogiri (1.6.1)
48
+ mini_portile (~> 0.5.0)
49
+ oauth2 (0.9.3)
50
+ faraday (>= 0.8, < 0.10)
51
+ jwt (~> 0.1.8)
52
+ multi_json (~> 1.3)
53
+ multi_xml (~> 0.5)
54
+ rack (~> 1.2)
55
+ rack (1.5.2)
56
+ rake (10.1.1)
57
+ rdoc (4.1.1)
58
+ json (~> 1.4)
59
+ rspec (2.14.1)
60
+ rspec-core (~> 2.14.0)
61
+ rspec-expectations (~> 2.14.0)
62
+ rspec-mocks (~> 2.14.0)
63
+ rspec-core (2.14.8)
64
+ rspec-expectations (2.14.5)
65
+ diff-lcs (>= 1.1.3, < 2.0)
66
+ rspec-mocks (2.14.6)
67
+ simplecov (0.8.2)
68
+ docile (~> 1.1.0)
69
+ multi_json
70
+ simplecov-html (~> 0.8.0)
71
+ simplecov-html (0.8.0)
72
+
73
+ PLATFORMS
74
+ ruby
75
+
76
+ DEPENDENCIES
77
+ bundler (~> 1)
78
+ cucumber (~> 1)
79
+ jeweler (~> 2)
80
+ rdoc (~> 4)
81
+ rspec (~> 2)
82
+ simplecov (~> 0)
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Luca Bonmassar, Gild Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # rack-tor-tag
2
+
3
+ A rack middleware to tag accesses to your rails application from TOR nodes.
4
+
5
+ Based on [https://github.com/Gild/rack-tor-block]
6
+
7
+ ## Install
8
+
9
+ Gemfile:
10
+
11
+ gem 'rack-tor-tag'
12
+
13
+ config/appplication.rb:
14
+
15
+ config.middleware.insert_after ActionDispatch::RemoteIp, Rack::TorTag
16
+ # or set config params
17
+ config.middleware.insert_after ActionDispatch::RemoteIp, Rack::TorTag, :host_ips => %w(1.2.3.4 1.2.3.5), :dnsel => 'my-dnsel-instance.myhost.org', :hostport => '123'
18
+
19
+ By default, `:host_ips` will be gotten by DNS lookup on `HTTP_HOST`, so if you know your IPs it's more efficient to specify. `:host_port` should probably be left blank, in which case it'll be gotten from `SERVER_PORT`.
20
+
21
+ `:dnsel` is if you're running your own instance of the [Tor DNS Exit List software](https://www.torproject.org/projects/tordnsel.html.en).
22
+
23
+ ## Use
24
+
25
+ Tor users will all have `env['action_dispatch.remote_ip'] = '127.0.0.2'`. The actual source IP is at `env['tor_ip']` — though practically all Tor IPs should probably be treated the same, since there's no easy way to know whether two different Tor exit node IPs represent the same originating user or not.
26
+
27
+ `env['tor']` will be true for Tor users, false for non-Tor users, and nil if the lookup failed.
28
+
29
+ ## Todo
30
+
31
+ [ ] Get the bulk list rather than doing DNS lookups
32
+ [ ] Cache results
33
+ [ ] Local-cache dns lookups
34
+
35
+ ## Contributing
36
+
37
+ * Fork
38
+ * Open an issue
39
+ * Commit, push, Pull Req
40
+ * Check the status of the existing tests / add new tests
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "rack-tor-tag"
18
+ gem.homepage = "http://github.com/saizai/rack-tor-tag"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Mark Tor users using rack, for filtering / throttling / etc}
21
+ gem.description = %Q{Mark Tor users using rack, for filtering / throttling / etc}
22
+ gem.email = "github@saizai.com"
23
+ gem.authors = ["Sai"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ spec.rspec_opts = "-fs --color"
33
+ end
34
+
35
+ desc "Code coverage detail"
36
+ task :simplecov do
37
+ ENV['COVERAGE'] = "true"
38
+ Rake::Task['spec'].execute
39
+ end
40
+
41
+ require 'cucumber/rake/task'
42
+ Cucumber::Rake::Task.new(:features)
43
+
44
+ task :default => :spec
45
+
46
+ require 'rdoc/task'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "rack-tor-tag #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.8
@@ -0,0 +1,9 @@
1
+ Feature: something something
2
+ In order to something something
3
+ A user something something
4
+ something something something
5
+
6
+ Scenario: something something
7
+ Given inspiration
8
+ When I create a sweet new gem
9
+ Then everyone should see how awesome I am
File without changes
@@ -0,0 +1,29 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_adapter 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ require 'bundler'
18
+ begin
19
+ Bundler.setup(:default, :development)
20
+ rescue Bundler::BundlerError => e
21
+ $stderr.puts e.message
22
+ $stderr.puts "Run `bundle install` to install missing gems"
23
+ exit e.status_code
24
+ end
25
+
26
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
27
+ require 'rack-tor-tag'
28
+
29
+ require 'rspec/expectations'
data/lib/rack/tor_tag.rb CHANGED
@@ -6,11 +6,11 @@ module Rack
6
6
  DEFAULT_PARAMS = {
7
7
  # You could run your own if you want.
8
8
  # https://www.torproject.org/projects/tordnsel.html.en
9
- :dnsel => 'ip-port.exitlist.torproject.org',
9
+ :dnsel => 'ip-port.exitlist.torproject.org',
10
10
  :host_ips => nil, # will get from env
11
11
  :host_port => nil
12
12
  }
13
-
13
+
14
14
  def initialize(app, params = {})
15
15
  @app = app
16
16
  @params = DEFAULT_PARAMS.merge(params)
@@ -18,11 +18,11 @@ module Rack
18
18
 
19
19
  def call(env)
20
20
  ip = env['action_dispatch.remote_ip']
21
- # Getting the right IP is hard. Let's punt.
21
+ # Getting the right IP is hard. Let's punt.
22
22
  # http://api.rubyonrails.org/classes/ActionDispatch/RemoteIp.html
23
23
  # http://blog.gingerlime.com/2012/rails-ip-spoofing-vulnerabilities-and-protection/
24
24
  raise 'Must run after ActionDispatch::RemoteIp' if ip.blank?
25
-
25
+
26
26
  case is_tor?(ip, env)
27
27
  when true
28
28
  env['tor'] = true
@@ -33,21 +33,24 @@ module Rack
33
33
  else
34
34
  env['tor'] = nil # i.e. unknown
35
35
  end
36
-
36
+
37
37
  # Continue normal processing
38
38
  @app.call(env)
39
39
  end
40
-
40
+
41
+ protected
42
+
41
43
  # see https://www.torproject.org/projects/tordnsel.html.en
42
44
  def is_tor? ip, env
43
45
  # We're a hidden service! Of course it's Tor.
44
- return true if env['HTTP_HOST'] =~ /\.onion\z/
45
-
46
+ return true if env['HTTP_HOST'] =~ /\.onion\z/
47
+ return false if (ip == 'localhost') or (env['HTTP_HOST'] == 'localhost')
48
+
46
49
  host_ips = @params[:host_ips] || Resolv.getaddresses(
47
50
  env['HTTP_HOST'] ? env['HTTP_HOST'].sub(/:.*/,'') : env['SERVER_NAME']).
48
51
  select{|i| i[Resolv::IPv4::Regex]} # DNEL only works with IPv4
49
-
50
- host_ips.each do |host_ip|
52
+
53
+ host_ips.each do |host_ip|
51
54
  tor_hostname = [reverse_ip_octets(ip), @params[:host_port] || env['SERVER_PORT'], reverse_ip_octets(host_ip), @params[:dnsel]].join('.')
52
55
  begin
53
56
  return true if (Resolv.getaddress(tor_hostname) == '127.0.0.2')
@@ -56,11 +59,11 @@ module Rack
56
59
  end
57
60
  end
58
61
  false
59
-
62
+
60
63
  rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
61
- return nil
64
+ return nil
62
65
  end
63
-
66
+
64
67
  def reverse_ip_octets(ip)
65
68
  ip.to_s.split('.').reverse.join('.')
66
69
  end
@@ -0,0 +1,69 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: rack-tor-tag 0.0.8 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "rack-tor-tag"
9
+ s.version = "0.0.8"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["Sai"]
14
+ s.date = "2014-03-12"
15
+ s.description = "Mark Tor users using rack, for filtering / throttling / etc"
16
+ s.email = "github@saizai.com"
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "features/rack-tor-tag.feature",
29
+ "features/step_definitions/rack-tor-tag_steps.rb",
30
+ "features/support/env.rb",
31
+ "lib/rack-tor-tag.rb",
32
+ "lib/rack/tor_tag.rb",
33
+ "rack-tor-tag.gemspec",
34
+ "spec/rack-tor-tag_spec.rb",
35
+ "spec/spec_helper.rb"
36
+ ]
37
+ s.homepage = "http://github.com/saizai/rack-tor-tag"
38
+ s.licenses = ["MIT"]
39
+ s.rubygems_version = "2.2.2"
40
+ s.summary = "Mark Tor users using rack, for filtering / throttling / etc"
41
+
42
+ if s.respond_to? :specification_version then
43
+ s.specification_version = 4
44
+
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
+ s.add_development_dependency(%q<rspec>, ["~> 2"])
47
+ s.add_development_dependency(%q<rdoc>, ["~> 4"])
48
+ s.add_development_dependency(%q<cucumber>, ["~> 1"])
49
+ s.add_development_dependency(%q<bundler>, ["~> 1"])
50
+ s.add_development_dependency(%q<jeweler>, ["~> 2"])
51
+ s.add_development_dependency(%q<simplecov>, ["~> 0"])
52
+ else
53
+ s.add_dependency(%q<rspec>, ["~> 2"])
54
+ s.add_dependency(%q<rdoc>, ["~> 4"])
55
+ s.add_dependency(%q<cucumber>, ["~> 1"])
56
+ s.add_dependency(%q<bundler>, ["~> 1"])
57
+ s.add_dependency(%q<jeweler>, ["~> 2"])
58
+ s.add_dependency(%q<simplecov>, ["~> 0"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<rspec>, ["~> 2"])
62
+ s.add_dependency(%q<rdoc>, ["~> 4"])
63
+ s.add_dependency(%q<cucumber>, ["~> 1"])
64
+ s.add_dependency(%q<bundler>, ["~> 1"])
65
+ s.add_dependency(%q<jeweler>, ["~> 2"])
66
+ s.add_dependency(%q<simplecov>, ["~> 0"])
67
+ end
68
+ end
69
+
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "RackTorTag" do
4
+ end
@@ -0,0 +1,29 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_profile 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
18
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
19
+
20
+ require 'rspec'
21
+ require 'rack-tor-tag'
22
+
23
+ # Requires supporting files with custom matchers and macros, etc,
24
+ # in ./support/ and its subdirectories.
25
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
26
+
27
+ RSpec.configure do |config|
28
+
29
+ end
metadata CHANGED
@@ -1,55 +1,124 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-tor-tag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sai
8
- - Luca Bonmassar
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-02-06 00:00:00.000000000 Z
11
+ date: 2014-03-12 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: rack
14
+ name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - ">="
17
+ - - "~>"
19
18
  - !ruby/object:Gem::Version
20
- version: '1.3'
21
- type: :runtime
19
+ version: '2'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cucumber
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jeweler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2'
76
+ type: :development
22
77
  prerelease: false
23
78
  version_requirements: !ruby/object:Gem::Requirement
24
79
  requirements:
25
- - - ">="
80
+ - - "~>"
26
81
  - !ruby/object:Gem::Version
27
- version: '1.3'
82
+ version: '2'
28
83
  - !ruby/object:Gem::Dependency
29
- name: rake
84
+ name: simplecov
30
85
  requirement: !ruby/object:Gem::Requirement
31
86
  requirements:
32
- - - ">"
87
+ - - "~>"
33
88
  - !ruby/object:Gem::Version
34
89
  version: '0'
35
90
  type: :development
36
91
  prerelease: false
37
92
  version_requirements: !ruby/object:Gem::Requirement
38
93
  requirements:
39
- - - ">"
94
+ - - "~>"
40
95
  - !ruby/object:Gem::Version
41
96
  version: '0'
42
97
  description: Mark Tor users using rack, for filtering / throttling / etc
43
- email:
44
- - sai@makeyourlaws.org
98
+ email: github@saizai.com
45
99
  executables: []
46
100
  extensions: []
47
- extra_rdoc_files: []
101
+ extra_rdoc_files:
102
+ - LICENSE
103
+ - README.md
48
104
  files:
105
+ - Gemfile
106
+ - Gemfile.lock
107
+ - LICENSE
108
+ - README.md
109
+ - Rakefile
110
+ - VERSION
111
+ - features/rack-tor-tag.feature
112
+ - features/step_definitions/rack-tor-tag_steps.rb
113
+ - features/support/env.rb
49
114
  - lib/rack-tor-tag.rb
50
115
  - lib/rack/tor_tag.rb
51
- homepage: https://makeyourlaws.org
52
- licenses: []
116
+ - rack-tor-tag.gemspec
117
+ - spec/rack-tor-tag_spec.rb
118
+ - spec/spec_helper.rb
119
+ homepage: http://github.com/saizai/rack-tor-tag
120
+ licenses:
121
+ - MIT
53
122
  metadata: {}
54
123
  post_install_message:
55
124
  rdoc_options: []
@@ -67,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
136
  version: '0'
68
137
  requirements: []
69
138
  rubyforge_project:
70
- rubygems_version: 2.2.1
139
+ rubygems_version: 2.2.2
71
140
  signing_key:
72
141
  specification_version: 4
73
142
  summary: Mark Tor users using rack, for filtering / throttling / etc