2 class CompressedRequests
7 def method_handled?(env)
8 %w[POST PUT].include? env["REQUEST_METHOD"]
11 def encoding_handled?(env)
12 %w[gzip deflate].include? env["HTTP_CONTENT_ENCODING"]
16 if method_handled?(env) && encoding_handled?(env)
17 extracted = decode(env[::Rack::RACK_INPUT], env["HTTP_CONTENT_ENCODING"])
19 env.delete("HTTP_CONTENT_ENCODING")
20 env.delete(::Rack::RACK_REQUEST_FORM_ERROR)
21 env.delete(::Rack::RACK_REQUEST_FORM_HASH)
22 env.delete(::Rack::RACK_REQUEST_FORM_INPUT)
23 env.delete(::Rack::RACK_REQUEST_FORM_PAIRS)
24 env["CONTENT_LENGTH"] = extracted.bytesize
25 env[::Rack::RACK_INPUT] = StringIO.new(extracted)
28 if env["HTTP_CONTENT_ENCODING"]
35 def decode(input, content_encoding)
39 when "gzip" then Zlib::GzipReader.new(input).read
40 when "deflate" then Zlib::Inflate.inflate(input.read)
46 Rails.configuration.middleware.use OpenStreetMap::CompressedRequests