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