class Sqreen::Actions::IpRangesIndex
Public Class Methods
new()
click to toggle source
# File lib/sqreen/actions/ip_ranges_index.rb, line 14 def initialize @trie_v4 = Sqreen::Trie.new @trie_v6 = Sqreen::Trie.new(nil, nil, Socket::AF_INET6) end
Public Instance Methods
actions_matching(client_ip)
click to toggle source
# File lib/sqreen/actions/ip_ranges_index.rb, line 27 def actions_matching(client_ip) parsed_ip = IPAddr.new(client_ip.gsub(/%[^%\/]+/, '')) trie = parsed_ip.family == Socket::AF_INET6 ? @trie_v6 : @trie_v4 return [] unless trie found = trie.search_matching(parsed_ip.to_i, parsed_ip.family) return [] unless found.size > 0 Sqreen.log.debug("Client ip #{client_ip} matches #{found.inspect}") found.map(&:data) end
index(params, action)
click to toggle source
# File lib/sqreen/actions/ip_ranges_index.rb, line 19 def index(params, action) ranges = parse_ip_ranges params ranges.each do |r| add_prefix r, action end end
Private Instance Methods
add_prefix(prefix_str, data)
click to toggle source
# File lib/sqreen/actions/ip_ranges_index.rb, line 50 def add_prefix(prefix_str, data) prefix = Sqreen::Prefix.from_str(prefix_str, data) trie = prefix.family == Socket::AF_INET6 ? @trie_v6 : @trie_v4 trie.insert prefix end
parse_ip_ranges(params)
click to toggle source
returns array of prefixes in string form
# File lib/sqreen/actions/ip_ranges_index.rb, line 41 def parse_ip_ranges(params) ranges = params['ip_cidr'] unless ranges && ranges.is_a?(Array) && !ranges.empty? raise 'no non-empty ip_cidr array present' end ranges end