class Rack::TranslatingProxy
Public Instance Methods
_request_mappping()
click to toggle source
# File lib/rack/translating_proxy.rb, line 95 def _request_mappping @_request_mappping ||= request_mappping end
_response_mapping()
click to toggle source
# File lib/rack/translating_proxy.rb, line 99 def _response_mapping @_response_mapping ||= request_mapping.invert end
_target_host()
click to toggle source
# File lib/rack/translating_proxy.rb, line 103 def _target_host @_target_host ||= URI(target_host) end
io(stringy_thing)
click to toggle source
# File lib/rack/translating_proxy.rb, line 54 def io(stringy_thing) if stringy_thing.respond_to?(:read) stringy_thing else StringIO.new(stringy_thing) end end
remove_interfering_response_headers(headers)
click to toggle source
# File lib/rack/translating_proxy.rb, line 79 def remove_interfering_response_headers(headers) headers.reject! do |key, _| %w(status connection transfer-encoding).include?(key) end end
request_mapping()
click to toggle source
# File lib/rack/translating_proxy.rb, line 91 def request_mapping fail 'Not implemented' end
rewrite_env(env)
click to toggle source
# File lib/rack/translating_proxy.rb, line 5 def rewrite_env(env) rewrite_request_url env rewrite_request_body env rewrite_request_query_string env rewrite_request_path env env end
rewrite_request_body(env)
click to toggle source
# File lib/rack/translating_proxy.rb, line 20 def rewrite_request_body(env) rewritten_input = rewrite_request_string(io(env['rack.input']).read) env['rack.input'] = io(rewritten_input) env['CONTENT_LENGTH'] = rewritten_input.size end
rewrite_request_path(env)
click to toggle source
# File lib/rack/translating_proxy.rb, line 37 def rewrite_request_path(env) env['PATH_INFO'] = rewrite_request_string(env['PATH_INFO']) env['REQUEST_URI'] = rewrite_request_string(env['REQUEST_URI']) end
rewrite_request_query_string(env)
click to toggle source
# File lib/rack/translating_proxy.rb, line 33 def rewrite_request_query_string(env) env['QUERY_STRING'] = rewrite_request_string(env['QUERY_STRING']) end
rewrite_request_string(str)
click to toggle source
# File lib/rack/translating_proxy.rb, line 27 def rewrite_request_string(str) rewrite_string( str, request_mapping, URI.method(:encode_www_form_component) ) end
rewrite_request_url(env)
click to toggle source
# File lib/rack/translating_proxy.rb, line 14 def rewrite_request_url(env) env['HTTP_HOST'] = _target_host.host env['SERVER_PORT'] = _target_host.port env['rack.url_scheme'] = _target_host.scheme end
rewrite_response(triplet)
click to toggle source
# File lib/rack/translating_proxy.rb, line 62 def rewrite_response(triplet) status, headers, body = triplet rewrite_response_location headers remove_interfering_response_headers headers body = rewrite_response_body(body) headers['Content-Length'] = body.size.to_s [status, headers, [body]] end
rewrite_response_body(body)
click to toggle source
# File lib/rack/translating_proxy.rb, line 85 def rewrite_response_body(body) str = rewrite_string(body.to_s, _response_mapping) rewrite_string(str, _response_mapping, URI.method(:encode_www_form_component)) end
rewrite_response_location(headers)
click to toggle source
# File lib/rack/translating_proxy.rb, line 71 def rewrite_response_location(headers) return unless headers['location'] headers['location'] = headers['location'].map do |location| rewrite_string(location, _response_mapping) end end
rewrite_string(string, mapping, transform = proc { |x| x })
click to toggle source
# File lib/rack/translating_proxy.rb, line 42 def rewrite_string(string, mapping, transform = proc { |x| x }) mapping = mapping.map do |source, target| [transform[source], transform[target]] end mapping.each do |source, target| string = string.gsub(source, target) end string end
target_host()
click to toggle source
# File lib/rack/translating_proxy.rb, line 107 def target_host fail 'Not implemented' end