Module: Cdtb::IpParser

Defined in:
lib/cdtb/ip_parser.rb

Overview

Parses IPs from Rack::Request objects, discarding the port.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.decorate_rack_requestObject



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/cdtb/ip_parser.rb', line 6

def self.decorate_rack_request
  Rack::Request.class_eval do
    include Cdtb::IpParser

    alias_method :original_ip_method, :ip

    def ip
      extract_ip(self)
    end
  end
end

.extract_ip(request) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/cdtb/ip_parser.rb', line 18

def self.extract_ip(request)
  # Take the IP either from the remote addr or from the forwarded for header
  # If Rack::Request is decorated use the original method.
  ip= defined?(request.original_ip_method) ? request.original_ip_method : request.ip
  Rails.logger.info { ">>>>>>>>>>>>>>>>>>>> Request IP: #{ip}" }
  Rails.logger.info { ">>>>>>>>>>>>>>>>>>>> X-Forwarded-For: #{request.get_header("HTTP_X_FORWARDED_FOR")}" }

  num_colons= ip.scan(":").length
  if [1, 6].include?(num_colons)
    # is an IP (v4 or v6) with port
    ip.rpartition(":").first
  else
    # standard inet4 or inet6 IP without port
    ip
  end
end

Instance Method Details

#extract_ip(request) ⇒ Object



35
36
37
# File 'lib/cdtb/ip_parser.rb', line 35

def extract_ip(request)
  ::Cdtb::IpParser.extract_ip(request)
end