Sha256: fa17eaab1237e4e583dda1bec6cc7ab5534093bc8045404859652fb5321e9b1f

Contents?: true

Size: 977 Bytes

Versions: 21

Compression:

Stored size: 977 Bytes

Contents

# frozen_string_literal: true

# require "rack-attack"
module Rack
  class Attack
    class Request < ::Rack::Request
      def remote_ip
        # Cloudflare stores remote IP in CF_CONNECTING_IP header
        @_remote_ip ||= (env["HTTP_CF_CONNECTING_IP"] ||
                        env["action_dispatch.remote_ip"] ||
                        ip).to_s
      end
    end
  end
end

module NeetoCommonsBackend
  module Initializers
    class << self
      def rack_attack
        # IP Blacklist - comma separated
        blocked_ips = ENV["RACK_ATTACK_BLOCKED_IPS"].to_s.split(",")
        blocked_ips.each do |ip|
          Rack::Attack.blocklist_ip(ip)
        end

        if ENV["ENABLE_RACK_ATTACK"] == "true"
          (3..5).each do |level|
            Rack::Attack.throttle(
              "req/ip/#{level}",
              limit: (30 * (2**level)),
              period: (0.9 * (8**level)).to_i.seconds, &:remote_ip)
          end
        end
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
neeto-commons-backend-1.0.109 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.108 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.107 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.106 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.105 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.104 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.103 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.102 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.101 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.100 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.99 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.98 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.97 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.96 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.95 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.94 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.93 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.92 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.91 lib/neeto_commons_backend/initializers/rack_attack.rb
neeto-commons-backend-1.0.90 lib/neeto_commons_backend/initializers/rack_attack.rb