wkimeria-rack-attack 4.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,58 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe 'Rack::Attack.track' do
4
+ class Counter
5
+ def self.incr
6
+ @counter += 1
7
+ end
8
+
9
+ def self.reset
10
+ @counter = 0
11
+ end
12
+
13
+ def self.check
14
+ @counter
15
+ end
16
+ end
17
+
18
+ before do
19
+ Rack::Attack.track("everything"){ |req| true }
20
+ end
21
+ allow_ok_requests
22
+ it "should tag the env" do
23
+ get '/'
24
+ last_request.env['rack.attack.matched'].must_equal 'everything'
25
+ last_request.env['rack.attack.match_type'].must_equal :track
26
+ end
27
+
28
+ describe "with a notification subscriber and two tracks" do
29
+ before do
30
+ Counter.reset
31
+ # A second track
32
+ Rack::Attack.track("homepage"){ |req| req.path == "/"}
33
+
34
+ ActiveSupport::Notifications.subscribe("rack.attack") do |*args|
35
+ Counter.incr
36
+ end
37
+ get "/"
38
+ end
39
+
40
+ it "should notify twice" do
41
+ Counter.check.must_equal 2
42
+ end
43
+ end
44
+
45
+ describe "without limit and period options" do
46
+ it "should assign the track filter to a Check instance" do
47
+ tracker = Rack::Attack.track("homepage") { |req| req.path == "/"}
48
+ tracker.filter.class.must_equal Rack::Attack::Check
49
+ end
50
+ end
51
+
52
+ describe "with limit and period options" do
53
+ it "should assign the track filter to a Throttle instance" do
54
+ tracker = Rack::Attack.track("homepage", :limit => 10, :period => 10) { |req| req.path == "/"}
55
+ tracker.filter.class.must_equal Rack::Attack::Throttle
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,40 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require "minitest/autorun"
5
+ require "minitest/pride"
6
+ require "rack/test"
7
+ require 'active_support'
8
+ require "rack/attack"
9
+
10
+ begin
11
+ require 'debugger'
12
+ rescue LoadError
13
+ #nothing to do here
14
+ end
15
+
16
+ class MiniTest::Spec
17
+
18
+ include Rack::Test::Methods
19
+
20
+ after { Rack::Attack.clear! }
21
+
22
+ def app
23
+ Rack::Builder.new {
24
+ use Rack::Attack
25
+ run lambda {|env| [200, {}, ['Hello World']]}
26
+ }.to_app
27
+ end
28
+
29
+ def self.allow_ok_requests
30
+ it "must allow ok requests" do
31
+ get '/', {}, 'REMOTE_ADDR' => '127.0.0.1'
32
+ last_response.status.must_equal 200
33
+ last_response.body.must_equal 'Hello World'
34
+ end
35
+ end
36
+ end
37
+
38
+ class Minitest::SharedExamples < Module
39
+ include Minitest::Spec::DSL
40
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wkimeria-rack-attack
3
+ version: !ruby/object:Gem::Version
4
+ version: 4.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Aaron Suggs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rack-test
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: appraisal
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activesupport
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: 3.0.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: redis-activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: dalli
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: connection_pool
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: A rack middleware for throttling and blocking abusive requests
140
+ email: aaron@ktheory.com
141
+ executables: []
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - README.md
146
+ - Rakefile
147
+ - lib/rack/attack.rb
148
+ - lib/rack/attack/allow2ban.rb
149
+ - lib/rack/attack/blacklist.rb
150
+ - lib/rack/attack/cache.rb
151
+ - lib/rack/attack/check.rb
152
+ - lib/rack/attack/conditional_throttle.rb
153
+ - lib/rack/attack/fail2ban.rb
154
+ - lib/rack/attack/request.rb
155
+ - lib/rack/attack/store_proxy.rb
156
+ - lib/rack/attack/store_proxy/dalli_proxy.rb
157
+ - lib/rack/attack/store_proxy/redis_store_proxy.rb
158
+ - lib/rack/attack/throttle.rb
159
+ - lib/rack/attack/track.rb
160
+ - lib/rack/attack/version.rb
161
+ - lib/rack/attack/whitelist.rb
162
+ - spec/allow2ban_spec.rb
163
+ - spec/fail2ban_spec.rb
164
+ - spec/integration/offline_spec.rb
165
+ - spec/integration/rack_attack_cache_spec.rb
166
+ - spec/rack_attack_conditional_throttle_spec.rb
167
+ - spec/rack_attack_dalli_proxy_spec.rb
168
+ - spec/rack_attack_request_spec.rb
169
+ - spec/rack_attack_spec.rb
170
+ - spec/rack_attack_throttle_spec.rb
171
+ - spec/rack_attack_track_spec.rb
172
+ - spec/spec_helper.rb
173
+ homepage: http://github.com/kickstarter/rack-attack
174
+ licenses:
175
+ - MIT
176
+ metadata: {}
177
+ post_install_message:
178
+ rdoc_options:
179
+ - --charset=UTF-8
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: 1.9.2
187
+ required_rubygems_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ! '>='
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ requirements: []
193
+ rubyforge_project:
194
+ rubygems_version: 2.2.2
195
+ signing_key:
196
+ specification_version: 4
197
+ summary: Block & throttle abusive requests
198
+ test_files:
199
+ - spec/allow2ban_spec.rb
200
+ - spec/fail2ban_spec.rb
201
+ - spec/integration/offline_spec.rb
202
+ - spec/integration/rack_attack_cache_spec.rb
203
+ - spec/rack_attack_conditional_throttle_spec.rb
204
+ - spec/rack_attack_dalli_proxy_spec.rb
205
+ - spec/rack_attack_request_spec.rb
206
+ - spec/rack_attack_spec.rb
207
+ - spec/rack_attack_throttle_spec.rb
208
+ - spec/rack_attack_track_spec.rb
209
+ - spec/spec_helper.rb