class UTF8Cleaner::Middleware
Constants
- SANITIZE_ENV_KEYS
Public Class Methods
new(app)
click to toggle source
# File lib/utf8-cleaner/middleware.rb, line 16 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/utf8-cleaner/middleware.rb, line 20 def call(env) @app.call(sanitize_env(env)) end
Private Instance Methods
cleaned_string(value)
click to toggle source
# File lib/utf8-cleaner/middleware.rb, line 63 def cleaned_string(value) value = tidy_bytes(value) unless value.ascii_only? value = URIString.new(value).cleaned if value.include?('%') value end
sanitize_env(env)
click to toggle source
# File lib/utf8-cleaner/middleware.rb, line 28 def sanitize_env(env) sanitize_env_keys(env) sanitize_env_rack_input(env) env end
sanitize_env_keys(env)
click to toggle source
# File lib/utf8-cleaner/middleware.rb, line 34 def sanitize_env_keys(env) SANITIZE_ENV_KEYS.each do |key| next unless value = env[key] env[key] = cleaned_string(value) end end
sanitize_env_rack_input(env)
click to toggle source
# File lib/utf8-cleaner/middleware.rb, line 41 def sanitize_env_rack_input(env) case env['CONTENT_TYPE'] when 'application/x-www-form-urlencoded' # This data gets the full cleaning treatment cleaned_value = cleaned_string(env['rack.input'].read) env['rack.input'] = StringIO.new(cleaned_value) if cleaned_value env['rack.input'].rewind when 'application/json' # This data only gets cleaning of invalid UTF-8 (e.g. from another charset) # but we do not URI-decode it. rack_input = env['rack.input'].read if rack_input && !rack_input.ascii_only? env['rack.input'] = StringIO.new(tidy_bytes(rack_input)) end env['rack.input'].rewind when 'multipart/form-data' # Don't process the data since it may contain binary content else # Unknown content type. Leave it alone end end