Some white ip check fixes

This commit is contained in:
Alex Sherman 2020-11-23 17:29:59 +05:00
parent bace495f57
commit f01e59d95a

View file

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