mirror of
https://github.com/samsonjs/rack-attack.git
synced 2026-03-25 09:25:49 +00:00
collapse fail2ban name/discriminator into one argument
This commit is contained in:
parent
9761faf6be
commit
2819e0d7a4
2 changed files with 14 additions and 14 deletions
|
|
@ -2,7 +2,7 @@ module Rack
|
|||
module Attack
|
||||
class Fail2Ban
|
||||
class << self
|
||||
def filter(name, discriminator, options)
|
||||
def filter(discriminator, options)
|
||||
bantime = options[:bantime] or raise ArgumentError, "Must pass bantime option"
|
||||
findtime = options[:findtime] or raise ArgumentError, "Must pass findtime option"
|
||||
maxretry = options[:maxretry] or raise ArgumentError, "Must pass maxretry option"
|
||||
|
|
@ -11,13 +11,13 @@ module Rack
|
|||
# Return true for blacklist
|
||||
true
|
||||
elsif yield
|
||||
fail!(name, discriminator, bantime, findtime, maxretry)
|
||||
fail!(discriminator, bantime, findtime, maxretry)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def fail!(name, discriminator, bantime, findtime, maxretry)
|
||||
count = cache.count("#{name}:#{discriminator}", findtime)
|
||||
def fail!(discriminator, bantime, findtime, maxretry)
|
||||
count = cache.count("fail2ban:count:#{discriminator}", findtime)
|
||||
if count >= maxretry
|
||||
ban!(discriminator, bantime)
|
||||
end
|
||||
|
|
@ -27,11 +27,11 @@ module Rack
|
|||
end
|
||||
|
||||
def ban!(discriminator, bantime)
|
||||
cache.write("fail2ban:#{discriminator}", 1, bantime)
|
||||
cache.write("fail2ban:ban:#{discriminator}", 1, bantime)
|
||||
end
|
||||
|
||||
def banned?(discriminator)
|
||||
cache.read("fail2ban:#{discriminator}")
|
||||
cache.read("fail2ban:ban:#{discriminator}")
|
||||
end
|
||||
|
||||
def cache
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ describe 'Rack::Attack.Fail2Ban' do
|
|||
Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new
|
||||
@f2b_options = {:bantime => @bantime, :findtime => @findtime, :maxretry => 2}
|
||||
Rack::Attack.blacklist('pentest') do |req|
|
||||
Rack::Attack::Fail2Ban.filter("pentest", req.ip, @f2b_options){req.query_string =~ /OMGHAX/}
|
||||
Rack::Attack::Fail2Ban.filter(req.ip, @f2b_options){req.query_string =~ /OMGHAX/}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -28,7 +28,7 @@ describe 'Rack::Attack.Fail2Ban' do
|
|||
end
|
||||
|
||||
it 'increases fail count' do
|
||||
key = "rack::attack:#{Time.now.to_i/@findtime}:pentest:1.2.3.4"
|
||||
key = "rack::attack:#{Time.now.to_i/@findtime}:fail2ban:count:1.2.3.4"
|
||||
@cache.store.read(key).must_equal 1
|
||||
end
|
||||
|
||||
|
|
@ -50,12 +50,12 @@ describe 'Rack::Attack.Fail2Ban' do
|
|||
end
|
||||
|
||||
it 'increases fail count' do
|
||||
key = "rack::attack:#{Time.now.to_i/@findtime}:pentest:1.2.3.4"
|
||||
key = "rack::attack:#{Time.now.to_i/@findtime}:fail2ban:count:1.2.3.4"
|
||||
@cache.store.read(key).must_equal 2
|
||||
end
|
||||
|
||||
it 'is banned' do
|
||||
key = "rack::attack:fail2ban:1.2.3.4"
|
||||
key = "rack::attack:fail2ban:ban:1.2.3.4"
|
||||
@cache.store.read(key).must_equal 1
|
||||
end
|
||||
|
||||
|
|
@ -87,12 +87,12 @@ describe 'Rack::Attack.Fail2Ban' do
|
|||
end
|
||||
|
||||
it 'does not increase fail count' do
|
||||
key = "rack::attack:#{Time.now.to_i/@findtime}:pentest:1.2.3.4"
|
||||
key = "rack::attack:#{Time.now.to_i/@findtime}:fail2ban:count:1.2.3.4"
|
||||
@cache.store.read(key).must_equal 2
|
||||
end
|
||||
|
||||
it 'is still banned' do
|
||||
key = "rack::attack:fail2ban:1.2.3.4"
|
||||
key = "rack::attack:fail2ban:ban:1.2.3.4"
|
||||
@cache.store.read(key).must_equal 1
|
||||
end
|
||||
end
|
||||
|
|
@ -107,12 +107,12 @@ describe 'Rack::Attack.Fail2Ban' do
|
|||
end
|
||||
|
||||
it 'does not increase fail count' do
|
||||
key = "rack::attack:#{Time.now.to_i/@findtime}:pentest:1.2.3.4"
|
||||
key = "rack::attack:#{Time.now.to_i/@findtime}:fail2ban:count:1.2.3.4"
|
||||
@cache.store.read(key).must_equal 2
|
||||
end
|
||||
|
||||
it 'is still banned' do
|
||||
key = "rack::attack:fail2ban:1.2.3.4"
|
||||
key = "rack::attack:fail2ban:ban:1.2.3.4"
|
||||
@cache.store.read(key).must_equal 1
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue