Merge branch '6-stable'

This commit is contained in:
Gonzalo 2021-02-07 16:46:46 -03:00
commit 886ba3a18d
No known key found for this signature in database
GPG key ID: 319EB6E3DB0D60FA
5 changed files with 31 additions and 11 deletions

View file

@ -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/

View file

@ -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

View file

@ -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

View file

@ -2,6 +2,6 @@
module Rack
class Attack
VERSION = '6.4.0'
VERSION = '6.5.0'
end
end

View file

@ -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