class ProxES::Forwarder
A lot of code in this comes from Rack::Proxy
Public Instance Methods
body_from(request)
click to toggle source
# File lib/proxes/forwarder.rb, line 59 def body_from(request) return if request.body.nil? || request.body.respond_to?(:read) == false request.body.read.tap { |_r| request.body.rewind } end
call(env)
click to toggle source
# File lib/proxes/forwarder.rb, line 15 def call(env) rewrite_response( perform_request( Rack::Request.new( rewrite_env(env) ) ) ) end
header_list()
click to toggle source
# File lib/proxes/forwarder.rb, line 51 def header_list [ 'date', 'content-type', 'cache-control', ] end
normalize_headers(headers)
click to toggle source
# File lib/proxes/forwarder.rb, line 65 def normalize_headers(headers) Rack::Utils::HeaderHash.new( headers.map do |k, v| [k, v.is_a?(Array) ? v.join("\n") : v] end.to_h ) end
perform_request(request)
click to toggle source
TODO: Consider moving these methods to the ProxES
ES Service to enable reuse
# File lib/proxes/forwarder.rb, line 30 def perform_request(request) conn.send(request.request_method.downcase) do |req| body = body_from(request) req.body = body if body req.url request.fullpath == '' ? URI.parse(env['REQUEST_URI']).request_uri : request.fullpath end end
rewrite_env(env)
click to toggle source
# File lib/proxes/forwarder.rb, line 25 def rewrite_env(env) env end
rewrite_response(response)
click to toggle source
# File lib/proxes/forwarder.rb, line 38 def rewrite_response(response) headers = (response.respond_to?(:headers) && response.headers) || normalize_headers(response.to_hash) body = response.body || [''] body = [body] unless body.respond_to?(:each) # Only keep certain headers. # See point 1 on https://www.mnot.net/blog/2011/07/11/what_proxies_must_do # TODO: Extend on the above headers.delete_if { |k, _v| !header_list.include? k.downcase } [response.status, headers, body] end