Project

General

Profile

Download (789 Bytes) Statistics
| Branch: | Tag: | Revision:
module Foreman
class BruteforceProtection
attr_reader :request_ip

def initialize(request_ip:)
@request_ip = request_ip
end

def get_login_failures
Rails.cache.fetch("failed_login_#{request_ip}") { 0 } if request_ip.present?
end

def count_login_failure
Rails.cache.write("failed_login_#{request_ip}", get_login_failures + 1, expires_in: 5.minutes)
end

def bruteforce_attempt?
failed_login_attempts_limit > 0 && get_login_failures >= failed_login_attempts_limit
end

def log_bruteforce
Rails.logger.warn("Brute-force attempt blocked from IP: #{request_ip}")
end

private

def failed_login_attempts_limit
@failed_login_attempts_limit ||= Setting[:failed_login_attempts_limit].to_i
end
end
end
(2-2/20)