Class: Netfira::WebConnect::RequestFilter
- Inherits:
-
Object
- Object
- Netfira::WebConnect::RequestFilter
- Defined in:
- lib/netfira/web_connect/request_filter.rb
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app) ⇒ RequestFilter
constructor
A new instance of RequestFilter.
- #unpack(env) ⇒ Object
Constructor Details
#initialize(app) ⇒ RequestFilter
Returns a new instance of RequestFilter.
7 8 9 |
# File 'lib/netfira/web_connect/request_filter.rb', line 7 def initialize(app) @app = app end |
Instance Method Details
#call(env) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/netfira/web_connect/request_filter.rb', line 11 def call(env) if (env['CONTENT_TYPE'] || env['HTTP_CONTENT_TYPE']) == 'application/x-netfira-webconnect-packed' begin unpack env rescue Zlib::GzipFile::Error => e return [400, {}, {errorCode: 19, errorMessage: "Gzip decompression error: #{e.}"}] end end env['WC_ACCEPTABLE_REQUEST_TYPES'] = %w[packed unpacked] @app.call env end |
#unpack(env) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/netfira/web_connect/request_filter.rb', line 23 def unpack(env) env['original.rack.input'] = input = env['rack.input'] input = Zlib::GzipReader.new(input) if (env['CONTENT_ENCODING'] || env['HTTP_CONTENT_ENCODING']) == 'gzip' method, path, query_string, headers, body = parse_request(input) %w[REQUEST_METHOD PATH_INFO QUERY_STRING].each{ |field| env["OUTER_#{field}"] = env[field] } env['REQUEST_METHOD'] = method env['PATH_INFO'] = path env['QUERY_STRING'] = query_string || '' headers.each do |key, value| field = key =~ /^content\b/i ? '' : 'HTTP_' field << key.upcase.gsub('-', '_') env["OUTER_#{field}"] = env[field] if env[field] env[field] = value end env['rack.input'] = StringIO.new(body || '') end |