class IpChecker

Public Class Methods

new(project_name) click to toggle source
# File lib/ip_checker.rb, line 4
def initialize(project_name)
  @project_name = project_name
end

Public Instance Methods

is_black_list(connection) click to toggle source
# File lib/ip_checker.rb, line 44
def is_black_list(connection)
  auth_type_ip = connection.execute("SELECT *
      FROM
          dtb_ip_address_block
      WHERE
          dtb_ip_address_block.ip_address = 'all'
              AND dtb_ip_address_block.auth_type = 1
              AND dtb_ip_address_block.project = '#{@project_name}';")
  auth_type_ip.first && auth_type_ip.first[2].to_s == '1' ? true : false
end
is_block_ip(request) click to toggle source
# File lib/ip_checker.rb, line 8
def is_block_ip(request)
  ip_range = []
  cidr = []
  user_ip = request.env["HTTP_X_FORWARDED_FOR"] || request.remote_ip
  connection = ActiveRecord::Base.connection()

  #check blacklist (true) or whitelist (false)
  is_black_list = is_black_list(connection)

  filter_ips = connection.execute("SELECT * FROM dtb_ip_address_block
                                  WHERE dtb_ip_address_block.ip_address != 'all'
                                  AND dtb_ip_address_block.project = '#{@project_name}';")

  filter_ips.each do |ip|
    begin
      if ip[1].include?"-"
        #create ip range
        min, max = ip[1].split("-")
        range = NetAddr.range(min, max, :Inclusive => true)
        ip_range = ip_range + range
      else
        #create ip range by CIDR prefix
        cidr = NetAddr::CIDR.create(ip[1]).enumerate
        ip_range = ip_range + cidr
      end
    rescue
    end
  end

  if ip_range.include?(user_ip)
    return is_black_list ? true : false
  else
    return is_black_list ? false : true
  end
end