class CountryRejector::Middleware

Public Class Methods

configuration() click to toggle source
# File lib/country_rejector.rb, line 28
def configuration
  @configuration ||= Configuration.new
end
configure() { |configuration| ... } click to toggle source
# File lib/country_rejector.rb, line 24
def configure
  yield(configuration)
end
new(app) click to toggle source

instance methods

# File lib/country_rejector.rb, line 38
def initialize(app)
  @app = app
end
reset_configuration() click to toggle source
# File lib/country_rejector.rb, line 32
def reset_configuration
  @configuration = nil
end

Public Instance Methods

call(env) click to toggle source
# File lib/country_rejector.rb, line 42
def call(env)
  return reject_request if banned?(env)
  @app.call(env)
end
configuration() click to toggle source
# File lib/country_rejector.rb, line 47
def configuration
  self.class.configuration
end

Protected Instance Methods

banned?(env) click to toggle source
# File lib/country_rejector.rb, line 59
def banned?(env)
  return env["rack.session"]["ip_rejected"] if env["rack.session"].has_key?("ip_rejected")
  return false if env[configuration.env_ip_tag].nil?
  current_country = get_ip_info(env[configuration.env_ip_tag])
  return false if current_country.nil?
  env["rack.session"]["ip_rejected"] = configuration.banned_list.include?(current_country)
rescue
  false # let the request pass, the check will be launch next time
end
get_ip_info(ip) click to toggle source
# File lib/country_rejector.rb, line 53
def get_ip_info ip
  Timeout::timeout(configuration.timeout_ms / 1000.0) do
    configuration.country_detector.call(ip)
  end
end
reject_request() click to toggle source
# File lib/country_rejector.rb, line 69
def reject_request
  [403, {"Content-Type" => "text/plain"}, ["Forbidden Access"]]
end