Sha256: 4129c70b035630deb8f435f32e900e1e6e442226c753a1d261294bc258e3c38e

Contents?: true

Size: 1.51 KB

Versions: 29

Compression:

Stored size: 1.51 KB

Contents

# typed: true

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

require 'ipaddr'
require 'sqreen/actions/actions_index'
require 'sqreen/trie'
require 'sqreen/prefix'

module Sqreen
  module Actions
    class IpRangesIndex < ActionsIndex
      def initialize
        @trie_v4 = Sqreen::Trie.new
        @trie_v6 = Sqreen::Trie.new(nil, nil, Socket::AF_INET6)
      end

      def index(params, action)
        ranges = parse_ip_ranges params

        ranges.each do |r|
          add_prefix r, action
        end
      end

      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

      private

      # returns array of prefixes in string form
      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

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

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
sqreen-1.22.0-java lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.22.0 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.21.1-java lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.21.1 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.21.0-java lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.21.0 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.4-java lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.4 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.21.0.beta3-java lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.21.0.beta3 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.4.beta1 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.19.4 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.3 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.2 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.21.0.beta2 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.21.0.beta1 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.1-java lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.1 lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.0-java lib/sqreen/actions/ip_ranges_index.rb
sqreen-1.20.0 lib/sqreen/actions/ip_ranges_index.rb