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