Sha256: 51bffccdf20d7f15bc3457f9256c9b9b5d42418a70c87a1dfa55e35a55840ed2

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

module FirewallConstraint
  require 'ipaddress'
  class Constraint
    def initialize(ips = [])
      if ips.respond_to? :call
        @ips = ips
      else
        ips = [ips].flatten
        @ips = !ips.empty? ? ips :
          YAML.load_file(Rails.root.join('config','firewall_constraint.yml'))[Rails.env]
      end
    end

    def matches?(request)
      return true if parsed_ips.empty?
      client_ip = IPAddress::parse(request.env["HTTP_X_FORWARDED_FOR"] ? request.env["HTTP_X_FORWARDED_FOR"] : request.remote_ip)
      parsed_ips.each do |ip|
        begin
          return true if ip.include?(client_ip)
        rescue NoMethodError => nme
        end
      end
      false
    end

    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

    def ips
      @ips.respond_to?(:call) ? @ips.call : @ips
    end
  end

  def self.new(*args)
    Constraint.new(*args)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
firewall_constraint-0.0.7 lib/firewall_constraint.rb