Class: Rack::TranslatingProxy
- Inherits:
-
Proxy
- Object
- Proxy
- Rack::TranslatingProxy
- Defined in:
- lib/rack/translating_proxy.rb
Instance Method Summary collapse
- #_request_mappping ⇒ Object
- #_response_mapping ⇒ Object
- #_target_host ⇒ Object
- #io(stringy_thing) ⇒ Object
- #remove_interfering_response_headers(headers) ⇒ Object
- #request_mapping ⇒ Object
- #rewrite_env(env) ⇒ Object
- #rewrite_request_body(env) ⇒ Object
- #rewrite_request_path(env) ⇒ Object
- #rewrite_request_query_string(env) ⇒ Object
- #rewrite_request_string(str) ⇒ Object
- #rewrite_request_url(env) ⇒ Object
- #rewrite_response(triplet) ⇒ Object
- #rewrite_response_location(headers) ⇒ Object
- #rewrite_string(string, mapping, transform = proc { |x| x }) ⇒ Object
- #target_host ⇒ Object
Instance Method Details
#_request_mappping ⇒ Object
84 85 86 |
# File 'lib/rack/translating_proxy.rb', line 84 def _request_mappping @_request_mappping ||= request_mappping end |
#_response_mapping ⇒ Object
88 89 90 |
# File 'lib/rack/translating_proxy.rb', line 88 def _response_mapping @_response_mapping ||= request_mapping.invert end |
#_target_host ⇒ Object
92 93 94 |
# File 'lib/rack/translating_proxy.rb', line 92 def _target_host @_target_host ||= URI(target_host) end |
#io(stringy_thing) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/rack/translating_proxy.rb', line 51 def io(stringy_thing) if stringy_thing.respond_to?(:read) stringy_thing else StringIO.new(stringy_thing) end end |
#remove_interfering_response_headers(headers) ⇒ Object
74 75 76 77 78 |
# File 'lib/rack/translating_proxy.rb', line 74 def remove_interfering_response_headers(headers) headers.reject! do |key, _| %w[status connection transfer-encoding].include?(key) end end |
#request_mapping ⇒ Object
80 81 82 |
# File 'lib/rack/translating_proxy.rb', line 80 def request_mapping fail 'Not implemented' end |
#rewrite_env(env) ⇒ Object
5 6 7 8 9 10 11 12 |
# 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) ⇒ Object
20 21 22 23 24 25 |
# 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) ⇒ Object
35 36 37 |
# File 'lib/rack/translating_proxy.rb', line 35 def rewrite_request_path(env) env['REQUEST_URI'] = rewrite_request_string(env['REQUEST_URI']) end |
#rewrite_request_query_string(env) ⇒ Object
31 32 33 |
# File 'lib/rack/translating_proxy.rb', line 31 def rewrite_request_query_string(env) env['QUERY_STRING'] = rewrite_request_string(env['QUERY_STRING']) end |
#rewrite_request_string(str) ⇒ Object
27 28 29 |
# 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) ⇒ Object
14 15 16 17 18 |
# 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) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/rack/translating_proxy.rb', line 59 def rewrite_response(triplet) status, headers, body = triplet rewrite_response_location headers remove_interfering_response_headers headers [status, headers, body] end |
#rewrite_response_location(headers) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/rack/translating_proxy.rb', line 66 def rewrite_response_location(headers) if headers['location'] headers['location'] = headers['location'].map do |location| rewrite_string(location, _response_mapping) end end end |
#rewrite_string(string, mapping, transform = proc { |x| x }) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/rack/translating_proxy.rb', line 39 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 ⇒ Object
96 97 98 |
# File 'lib/rack/translating_proxy.rb', line 96 def target_host fail 'Not implemented' end |