From 94a304b8150fc19955c30b67bf01091f440e2a8c Mon Sep 17 00:00:00 2001 From: madlep Date: Fri, 14 Jun 2013 12:49:53 +1000 Subject: [PATCH] reorder logic to not repeatedly extend ban after more failed requests --- lib/rack/attack/fail2ban.rb | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/rack/attack/fail2ban.rb b/lib/rack/attack/fail2ban.rb index c6c2ddf..f186ca6 100644 --- a/lib/rack/attack/fail2ban.rb +++ b/lib/rack/attack/fail2ban.rb @@ -6,14 +6,15 @@ module Rack 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 yield + + if banned?(discriminator) + # Return true for blacklist + true + elsif yield fail!(name, discriminator, bantime, findtime, maxretry) - else - banned?(discriminator) end end - + private def fail!(name, discriminator, bantime, findtime, maxretry) count = cache.count("#{name}:#{discriminator}", findtime) @@ -24,7 +25,7 @@ module Rack # Return true for blacklist true end - + def ban!(discriminator, bantime) cache.write("fail2ban:#{discriminator}", 1, bantime) end