From 8ed3aaf78151915871869b130e8c3eaf997c96b2 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Thu, 4 Feb 2021 12:52:42 +0200 Subject: [PATCH 1/4] test added --- test/models/white_ip_test.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/models/white_ip_test.rb b/test/models/white_ip_test.rb index 607887730..7a0c6078b 100644 --- a/test/models/white_ip_test.rb +++ b/test/models/white_ip_test.rb @@ -38,6 +38,20 @@ class WhiteIpTest < ActiveSupport::TestCase assert white_ip.valid? end + def test_validates_include_empty_ipv4 + white_ip = WhiteIp.new + + white_ip.ipv4 = '' + white_ip.ipv6 = '001:0db8:85a3:0000:0000:8a2e:0370:7334' + white_ip.registrar = registrars(:bestnames) + + assert_nothing_raised { white_ip.save } + assert white_ip.valid? + + assert WhiteIp.include_ip?(white_ip.ipv6) + assert_not WhiteIp.include_ip?('192.168.1.1') + end + private def valid_white_ip From dc428b3c18804d927eaa2b5de75f36d6c98fd6be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Thu, 4 Feb 2021 16:24:01 +0200 Subject: [PATCH 2/4] Fix IPv4/IPv6 parsing for empty string --- app/models/white_ip.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/white_ip.rb b/app/models/white_ip.rb index 417633b12..7bb3ccb37 100644 --- a/app/models/white_ip.rb +++ b/app/models/white_ip.rb @@ -50,10 +50,10 @@ class WhiteIp < ApplicationRecord def ids_including(ip) ipv4 = ipv6 = [] if check_ip4(ip).present? - ipv4 = select { |white_ip| IPAddr.new(white_ip.ipv4, Socket::AF_INET) === check_ip4(ip) } + ipv4 = select { |white_ip| check_ip4(white_ip.ipv4) === check_ip4(ip) } end if check_ip6(ip).present? - ipv6 = select { |white_ip| IPAddr.new(white_ip.ipv6, Socket::AF_INET6) === check_ip6(ip) } + ipv6 = select { |white_ip| check_ip6(white_ip.ipv6) === check_ip6(ip) } end (ipv4 + ipv6).pluck(:id).flatten.uniq end From b34be2c0273b75a1ca3fe29b31a3954ea9a451bc Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 5 Feb 2021 10:34:32 +0200 Subject: [PATCH 3/4] modifed test --- test/models/white_ip_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/white_ip_test.rb b/test/models/white_ip_test.rb index 7a0c6078b..ba5abe42f 100644 --- a/test/models/white_ip_test.rb +++ b/test/models/white_ip_test.rb @@ -41,7 +41,7 @@ class WhiteIpTest < ActiveSupport::TestCase def test_validates_include_empty_ipv4 white_ip = WhiteIp.new - white_ip.ipv4 = '' + white_ip.ipv4 = nil white_ip.ipv6 = '001:0db8:85a3:0000:0000:8a2e:0370:7334' white_ip.registrar = registrars(:bestnames) From d99dd477c6fd667faf70a30a1faf72a4088d4837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Fri, 5 Feb 2021 11:45:58 +0200 Subject: [PATCH 4/4] WhiteIP: Replace empty string with nil --- app/models/white_ip.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/models/white_ip.rb b/app/models/white_ip.rb index 7bb3ccb37..38cee7b6b 100644 --- a/app/models/white_ip.rb +++ b/app/models/white_ip.rb @@ -4,8 +4,13 @@ class WhiteIp < ApplicationRecord validate :valid_ipv4? validate :valid_ipv6? - validate :validate_ipv4_and_ipv6 + before_save :normalize_blank_values + + def normalize_blank_values + %i[ipv4 ipv6].each { |c| self[c].present? || self[c] = nil } + end + def validate_ipv4_and_ipv6 return if ipv4.present? || ipv6.present? errors.add(:base, I18n.t(:ipv4_or_ipv6_must_be_present))