class Rack::Attack::Fail2Ban

Public Class Methods

banned?(discriminator) click to toggle source
# File lib/rack/attack/fail2ban.rb, line 27
def banned?(discriminator)
  cache.read("#{key_prefix}:ban:#{discriminator}") ? true : false
end
filter(discriminator, options) { || ... } click to toggle source
# File lib/rack/attack/fail2ban.rb, line 7
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"

  if banned?(discriminator)
    # Return true for blocklist
    true
  elsif yield
    fail!(discriminator, bantime, findtime, maxretry)
  end
end
reset(discriminator, options) click to toggle source
# File lib/rack/attack/fail2ban.rb, line 20
def reset(discriminator, options)
  findtime = options[:findtime] or raise ArgumentError, "Must pass findtime option"
  cache.reset_count("#{key_prefix}:count:#{discriminator}", findtime)
  # Clear ban flag just in case it's there
  cache.delete("#{key_prefix}:ban:#{discriminator}")
end

Protected Class Methods

fail!(discriminator, bantime, findtime, maxretry) click to toggle source
# File lib/rack/attack/fail2ban.rb, line 37
def fail!(discriminator, bantime, findtime, maxretry)
  count = cache.count("#{key_prefix}:count:#{discriminator}", findtime)
  if count >= maxretry
    ban!(discriminator, bantime)
  end

  true
end
key_prefix() click to toggle source
# File lib/rack/attack/fail2ban.rb, line 33
def key_prefix
  'fail2ban'
end

Private Class Methods

ban!(discriminator, bantime) click to toggle source
# File lib/rack/attack/fail2ban.rb, line 48
def ban!(discriminator, bantime)
  cache.write("#{key_prefix}:ban:#{discriminator}", 1, bantime)
end
cache() click to toggle source
# File lib/rack/attack/fail2ban.rb, line 52
def cache
  Rack::Attack.cache
end