searchable: fix searching for invalid IP addresses.

Fix an ArgumentError exception when searching for an invalid IP address.

Also allow searching for multiple subnets at once.
This commit is contained in:
evazion
2022-09-29 03:52:34 -05:00
parent c5b215ffcb
commit 530d8cf762
3 changed files with 25 additions and 9 deletions

View File

@@ -71,11 +71,13 @@ module Searchable
def where_inet_matches(attr, value)
if value.match?(/[, ]/)
ips = value.split(/[, ]+/).map { |ip| Danbooru::IpAddress.new(ip).to_string }
where("#{qualified_column_for(attr)} = ANY(ARRAY[?]::inet[])", ips)
ips = value.split(/[, ]+/).map { |ip| Danbooru::IpAddress.parse(ip).to_s }
return none if ips.any?(&:blank?)
where("#{qualified_column_for(attr)} <<= ANY(ARRAY[?]::inet[])", ips)
else
ip = Danbooru::IpAddress.new(value)
where("#{qualified_column_for(attr)} <<= ?", ip.to_string)
ip = Danbooru::IpAddress.parse(value)
return none if ip.nil?
where("#{qualified_column_for(attr)} <<= ?", ip.to_s)
end
end