File: allow2ban.rb

package info (click to toggle)
ruby-rack-attack 6.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 380 kB
  • sloc: ruby: 2,626; makefile: 4
file content (26 lines) | stat: -rw-r--r-- 678 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# frozen_string_literal: true

module Rack
  class Attack
    class Allow2Ban < Fail2Ban
      class << self
        protected

        def key_prefix
          'allow2ban'
        end

        # everything is the same here except we only return true
        # (blocking the request) if they have tripped the limit.
        def fail!(discriminator, bantime, findtime, maxretry)
          count = cache.count("#{key_prefix}:count:#{discriminator}", findtime)
          if count >= maxretry
            ban!(discriminator, bantime)
          end
          # we may not block them this time, but they're banned for next time
          false
        end
      end
    end
  end
end