Sha256: 2d24e7513e0fffb22fa3f103d73eee2b2d060161e677fc1fc0f85d21bb0c349e

Contents?: true

Size: 601 Bytes

Versions: 3

Compression:

Stored size: 601 Bytes

Contents

require 'uri'

module InvalidUTF8Rejector
  class Middleware
    def initialize(app)
      @app = app
    end

    def call(env)
      if request_uri_clean?(env)
        @app.call(env)
      else
        [400, {}, [""]]
      end
    end

    private

    def request_uri_clean?(env)
      clean_utf8?(env["PATH_INFO"]) and clean_utf8?(env["QUERY_STRING"])
    end

    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
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
invalid_utf8_rejector-0.0.4 lib/invalid_utf8_rejector/middleware.rb
invalid_utf8_rejector-0.0.3 lib/invalid_utf8_rejector/middleware.rb
invalid_utf8_rejector-0.0.2 lib/invalid_utf8_rejector/middleware.rb