class FirewallConstraint::Constraint
Public Class Methods
new(ips = [])
click to toggle source
# File lib/firewall_constraint.rb, line 6 def initialize(ips = []) if ips.respond_to? :call @ips = ips else ips = [ips].flatten.compact @ips = !ips.empty? ? ips : [YAML.load_file(Rails.root.join('config','firewall_constraint.yml'))[Rails.env]].flatten.compact end end
Public Instance Methods
ips()
click to toggle source
# File lib/firewall_constraint.rb, line 44 def ips @ips.respond_to?(:call) ? @ips.call : @ips end
matches?(request)
click to toggle source
# File lib/firewall_constraint.rb, line 20 def matches?(request) return true if parsed_ips.empty? client_ip = IPAddress::parse requestor_ip(request) parsed_ips.each do |ip| begin return true if ip.include?(client_ip) rescue NoMethodError => nme end end raise config.raise_exception if config && config.raise_exception false end
parsed_ips()
click to toggle source
# File lib/firewall_constraint.rb, line 33 def parsed_ips cur_ips = ips if cur_ips == @old_ips @cached_parsed_ips else @old_ips = cur_ips @cached_parsed_ips = cur_ips.map{|c| IPAddress::parse(c)} end end
requestor_ip(request)
click to toggle source
# File lib/firewall_constraint.rb, line 16 def requestor_ip(request) request.env["HTTP_X_FORWARDED_FOR"] ? request.env["HTTP_X_FORWARDED_FOR"].split(/, /).first : request.remote_ip end