diff --git a/CHANGELOG.md b/CHANGELOG.md index 71008c9..e7fbfbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ All notable changes to this project will be documented in this file. +## [6.5.0] - 2021-02-07 + +### Added + +- Added ability to normalize throttle discriminator by setting `Rack::Attack.throttle_discriminator_normalizer` (@fatkodima) + + Example: + + Rack::Attack.throttle_discriminator_normalizer = ->(discriminator) { ... } + + or disable default normalization with: + + Rack::Attack.throttle_discriminator_normalizer = nil + +### Removed + +- Dropped support for ruby v2.4 +- Dropped support for rails v5.1 + ## [6.4.0] - 2021-01-23 ### Added @@ -232,6 +251,7 @@ so your custom code is less prone to race conditions ([#282](https://github.com/ - Remove unused variable - Extract mandatory options to constants +[6.5.0]: https://github.com/rack/rack-attack/compare/v6.4.0...v6.5.0/ [6.4.0]: https://github.com/rack/rack-attack/compare/v6.3.1...v6.4.0/ [6.3.1]: https://github.com/rack/rack-attack/compare/v6.3.0...v6.3.1/ [6.3.0]: https://github.com/rack/rack-attack/compare/v6.2.2...v6.3.0/ diff --git a/lib/rack/attack.rb b/lib/rack/attack.rb index 47ba82f..bc9dbed 100644 --- a/lib/rack/attack.rb +++ b/lib/rack/attack.rb @@ -31,7 +31,7 @@ module Rack autoload :Allow2Ban, 'rack/attack/allow2ban' class << self - attr_accessor :enabled, :notifier, :discriminator_normalizer + attr_accessor :enabled, :notifier, :throttle_discriminator_normalizer attr_reader :configuration def instrument(request) @@ -87,7 +87,7 @@ module Rack # Set defaults @enabled = true @notifier = ActiveSupport::Notifications if defined?(ActiveSupport::Notifications) - @discriminator_normalizer = lambda do |discriminator| + @throttle_discriminator_normalizer = lambda do |discriminator| discriminator.to_s.strip.downcase end @configuration = Configuration.new diff --git a/lib/rack/attack/throttle.rb b/lib/rack/attack/throttle.rb index 1cc50f4..6992339 100644 --- a/lib/rack/attack/throttle.rb +++ b/lib/rack/attack/throttle.rb @@ -51,8 +51,8 @@ module Rack def discriminator_for(request) discriminator = block.call(request) - if discriminator && Rack::Attack.discriminator_normalizer - discriminator = Rack::Attack.discriminator_normalizer.call(discriminator) + if discriminator && Rack::Attack.throttle_discriminator_normalizer + discriminator = Rack::Attack.throttle_discriminator_normalizer.call(discriminator) end discriminator end diff --git a/lib/rack/attack/version.rb b/lib/rack/attack/version.rb index fb11922..0c28e15 100644 --- a/lib/rack/attack/version.rb +++ b/lib/rack/attack/version.rb @@ -2,6 +2,6 @@ module Rack class Attack - VERSION = '6.4.0' + VERSION = '6.5.0' end end diff --git a/spec/rack_attack_throttle_spec.rb b/spec/rack_attack_throttle_spec.rb index feb599c..0b0d68a 100644 --- a/spec/rack_attack_throttle_spec.rb +++ b/spec/rack_attack_throttle_spec.rb @@ -145,7 +145,7 @@ describe 'Rack::Attack.throttle with block retuning nil' do end end -describe 'Rack::Attack.throttle with discriminator_normalizer' do +describe 'Rack::Attack.throttle with throttle_discriminator_normalizer' do before do @period = 60 @emails = [ @@ -161,16 +161,16 @@ describe 'Rack::Attack.throttle with discriminator_normalizer' do end end - it 'should not differentiate requests when discriminator_normalizer is enabled' do + it 'should not differentiate requests when throttle_discriminator_normalizer is enabled' do post_logins key = "rack::attack:#{Time.now.to_i / @period}:logins/email:person@example.com" _(Rack::Attack.cache.store.read(key)).must_equal 3 end - it 'should differentiate requests when discriminator_normalizer is disabled' do + it 'should differentiate requests when throttle_discriminator_normalizer is disabled' do begin - prev = Rack::Attack.discriminator_normalizer - Rack::Attack.discriminator_normalizer = nil + prev = Rack::Attack.throttle_discriminator_normalizer + Rack::Attack.throttle_discriminator_normalizer = nil post_logins @emails.each do |email| @@ -178,7 +178,7 @@ describe 'Rack::Attack.throttle with discriminator_normalizer' do _(Rack::Attack.cache.store.read(key)).must_equal 1 end ensure - Rack::Attack.discriminator_normalizer = prev + Rack::Attack.throttle_discriminator_normalizer = prev end end