module RemoteIpProxyScrubber

Simplify monkey-patching Rails logging so that it logs the request.remote_ip, not just the ip

Constants

VERSION

Public Class Methods

filter_middleware() click to toggle source

Add the following to config/application.rb or conifg/environments/*

config.middleware.insert_before(Rails::Rack::Logger, RemoteIpProxyScrubber.filter_middleware, [
  "216.73.93.70/31", # www.google.com
  "216.73.93.72/31", # www.google.com
  "17.0.0.0/8",      # Apple
])
# File lib/remote_ip_proxy_scrubber.rb, line 13
def filter_middleware
  require 'remote_ip_proxy_scrubber/filter_proxy_ips'

  RemoteIpProxyScrubber::Rails4::FilterProxyIPs
end
patched_logger() click to toggle source

Returns a Class to be used a rack middleware, replacing the existing ‘Rails::Rack::Logger`.

config.middleware.insert_before(Rails::Rack::Logger, RemoteIpProxyScrubber.patched_logger)
config.middleware.delete(Rails::Rack::Logger)
# File lib/remote_ip_proxy_scrubber.rb, line 25
def patched_logger
  require 'remote_ip_proxy_scrubber/remote_ip_logger'

  rails_version = self.rails_version
  if    rails_version >= Gem::Version.new('4.0.0')
    RemoteIpProxyScrubber::Rails4::RemoteIPLogger
  elsif rails_version >= Gem::Version.new('3.2.9')
    RemoteIpProxyScrubber::Rails3_2_9::RemoteIPLogger
  elsif rails_version >= Gem::Version.new('3.2.0')
    RemoteIpProxyScrubber::Rails3_2_0::RemoteIPLogger
  elsif rails_version >= Gem::Version.new('3.0.6')
    RemoteIpProxyScrubber::Rails3_1::RemoteIPLogger
  elsif rails_version >= Gem::Version.new('3.0.0')
    RemoteIpProxyScrubber::Rails3_0::RemoteIPLogger
  else
    fail "Sorry, this gem doesn't know how to monkey-patch the Rails logger for Rails #{rails_version} yet."
  end
end
rails_version() click to toggle source
# File lib/remote_ip_proxy_scrubber.rb, line 45
def rails_version
  rails_version = Rails.version rescue nil
  rails_version ||= RAILS_GEM_VERSION rescue nil
  if rails_version.nil?
    fail "Unable to determine the current version of Rails"
  end
  Gem::Version.new(rails_version)
end

Private Instance Methods

filter_middleware() click to toggle source

Add the following to config/application.rb or conifg/environments/*

config.middleware.insert_before(Rails::Rack::Logger, RemoteIpProxyScrubber.filter_middleware, [
  "216.73.93.70/31", # www.google.com
  "216.73.93.72/31", # www.google.com
  "17.0.0.0/8",      # Apple
])
# File lib/remote_ip_proxy_scrubber.rb, line 13
def filter_middleware
  require 'remote_ip_proxy_scrubber/filter_proxy_ips'

  RemoteIpProxyScrubber::Rails4::FilterProxyIPs
end
patched_logger() click to toggle source

Returns a Class to be used a rack middleware, replacing the existing ‘Rails::Rack::Logger`.

config.middleware.insert_before(Rails::Rack::Logger, RemoteIpProxyScrubber.patched_logger)
config.middleware.delete(Rails::Rack::Logger)
# File lib/remote_ip_proxy_scrubber.rb, line 25
def patched_logger
  require 'remote_ip_proxy_scrubber/remote_ip_logger'

  rails_version = self.rails_version
  if    rails_version >= Gem::Version.new('4.0.0')
    RemoteIpProxyScrubber::Rails4::RemoteIPLogger
  elsif rails_version >= Gem::Version.new('3.2.9')
    RemoteIpProxyScrubber::Rails3_2_9::RemoteIPLogger
  elsif rails_version >= Gem::Version.new('3.2.0')
    RemoteIpProxyScrubber::Rails3_2_0::RemoteIPLogger
  elsif rails_version >= Gem::Version.new('3.0.6')
    RemoteIpProxyScrubber::Rails3_1::RemoteIPLogger
  elsif rails_version >= Gem::Version.new('3.0.0')
    RemoteIpProxyScrubber::Rails3_0::RemoteIPLogger
  else
    fail "Sorry, this gem doesn't know how to monkey-patch the Rails logger for Rails #{rails_version} yet."
  end
end
rails_version() click to toggle source
# File lib/remote_ip_proxy_scrubber.rb, line 45
def rails_version
  rails_version = Rails.version rescue nil
  rails_version ||= RAILS_GEM_VERSION rescue nil
  if rails_version.nil?
    fail "Unable to determine the current version of Rails"
  end
  Gem::Version.new(rails_version)
end