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