class InvalidUTF8Rejector::Middleware

Public Class Methods

new(app) click to toggle source
# File lib/invalid_utf8_rejector/middleware.rb, line 5
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/invalid_utf8_rejector/middleware.rb, line 9
def call(env)
  if request_uri_clean?(env)
    @app.call(env)
  else
    [400, {}, [""]]
  end
end

Private Instance Methods

clean_utf8?(str) click to toggle source
# File lib/invalid_utf8_rejector/middleware.rb, line 23
def clean_utf8?(str)
  return true if str.nil?
  URI.decode_www_form_component(str).force_encoding('UTF-8').valid_encoding?
rescue ArgumentError # triggered by an invalid % encoded string.
  false
end
request_uri_clean?(env) click to toggle source
# File lib/invalid_utf8_rejector/middleware.rb, line 19
def request_uri_clean?(env)
  clean_utf8?(env["PATH_INFO"]) and clean_utf8?(env["QUERY_STRING"])
end