From f01e59d95aaa965664216a9bda4346894cd205d9 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Mon, 23 Nov 2020 17:29:59 +0500 Subject: [PATCH] Some white ip check fixes --- app/models/white_ip.rb | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/app/models/white_ip.rb b/app/models/white_ip.rb index c2fb51cd1..7198c225f 100644 --- a/app/models/white_ip.rb +++ b/app/models/white_ip.rb @@ -41,11 +41,35 @@ class WhiteIp < ApplicationRecord class << self # rubocop:disable Style/CaseEquality def include_ip?(ip) - ipv4 = select { |white_ip| IPAddr.new(white_ip.ipv4, Socket::AF_INET) === IPAddr.new(ip) } - ipv6 = select { |white_ip| IPAddr.new(white_ip.ipv6, Socket::AF_INET6) === IPAddr.new(ip) } - ids = (ipv4 + ipv6).pluck(:id).flatten.uniq - where(id: ids).any? + Rails.logger.info "Checking if whitelist includes ip:#{ip}" + return false if ip.blank? + + where(id: ids_including(ip)).any? + end + + 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) } + end + if check_ip6(ip).present? + ipv6 = select { |white_ip| IPAddr.new(white_ip.ipv6, Socket::AF_INET6) === check_ip6 } + end + (ipv4 + ipv6).pluck(:id).flatten.uniq end # rubocop:enable Style/CaseEquality + + def check_ip4(ip) + IPAddr.new(ip, Socket::AF_INET) + rescue StandardError => _e + nil + end + + def check_ip6(ip) + IPAddr.new(ip, Socket::AF_INET6) + rescue StandardError => _e + nil + end + end end