Fix #588 don't fail if request.ip is missing (#630)

* Fix #588 don't fail if request.ip is missing

* Fix Rails 4 suite

* Improve tests

---------

Co-authored-by: Gonzalo <456459+grzuy@users.noreply.github.com>
This commit is contained in:
Santiago Bartesaghi 2023-10-17 21:19:29 -03:00 committed by GitHub
parent e9f472786a
commit 3543f61b64
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 2 deletions

View file

@ -61,11 +61,15 @@ module Rack
end
def blocklist_ip(ip_address)
@anonymous_blocklists << Blocklist.new { |request| IPAddr.new(ip_address).include?(IPAddr.new(request.ip)) }
@anonymous_blocklists << Blocklist.new do |request|
request.ip && !request.ip.empty? && IPAddr.new(ip_address).include?(IPAddr.new(request.ip))
end
end
def safelist_ip(ip_address)
@anonymous_safelists << Safelist.new { |request| IPAddr.new(ip_address).include?(IPAddr.new(request.ip)) }
@anonymous_safelists << Safelist.new do |request|
request.ip && !request.ip.empty? && IPAddr.new(ip_address).include?(IPAddr.new(request.ip))
end
end
def throttle(name, options, &block)

View file

@ -19,6 +19,12 @@ describe "Blocking an IP" do
assert_equal 200, last_response.status
end
it "succeeds if IP is missing" do
get "/", {}, "REMOTE_ADDR" => ""
assert_equal 200, last_response.status
end
it "notifies when the request is blocked" do
notified = false
notification_type = nil

View file

@ -17,6 +17,12 @@ describe "Safelist an IP" do
assert_equal 403, last_response.status
end
it "forbids request if blocklist condition is true and safelist is false (missing IP)" do
get "/admin", {}, "REMOTE_ADDR" => ""
assert_equal 403, last_response.status
end
it "succeeds if blocklist condition is false and safelist is false" do
get "/", {}, "REMOTE_ADDR" => "1.2.3.4"