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_request ⇒ Object
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 |