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