Class: Rack::Proxy
- Inherits:
-
Object
- Object
- Rack::Proxy
- Defined in:
- lib/rack/proxy.rb
Overview
Subclass and bring your own #rewrite_request and #rewrite_response
Direct Known Subclasses
ExampleServiceProxy, ForwardHost, RackPhpProxy, TrustingProxy
Constant Summary collapse
- VERSION =
"0.7.0"
Class Method Summary collapse
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app = nil, opts = {}) ⇒ Proxy
constructor
A new instance of Proxy.
-
#rewrite_env(env) ⇒ Object
Return modified env.
-
#rewrite_response(triplet) ⇒ Object
Return a rack triplet [status, headers, body].
Constructor Details
#initialize(app = nil, opts = {}) ⇒ Proxy
Returns a new instance of Proxy.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/rack/proxy.rb', line 42 def initialize(app = nil, opts= {}) if app.is_a?(Hash) opts = app @app = nil else @app = app end @streaming = opts.fetch(:streaming, true) @ssl_verify_none = opts.fetch(:ssl_verify_none, false) @backend = URI(opts[:backend]) if opts[:backend] @read_timeout = opts.fetch(:read_timeout, 60) @ssl_version = opts[:ssl_version] if opts[:ssl_version] @username = opts[:username] if opts[:username] @password = opts[:password] if opts[:password] @opts = opts end |
Class Method Details
.extract_http_request_headers(env) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/rack/proxy.rb', line 11 def extract_http_request_headers(env) headers = env.reject do |k, v| !(/^HTTP_[A-Z0-9_\.]+$/ === k) || v.nil? end.map do |k, v| [reconstruct_header_name(k), v] end.inject(Utils::HeaderHash.new) do |hash, k_v| k, v = k_v hash[k] = v hash end x_forwarded_for = (headers["X-Forwarded-For"].to_s.split(/, +/) << env["REMOTE_ADDR"]).join(", ") headers.merge!("X-Forwarded-For" => x_forwarded_for) end |
.normalize_headers(headers) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/rack/proxy.rb', line 27 def normalize_headers(headers) mapped = headers.map do |k, v| [k, if v.is_a? Array then v.join("\n") else v end] end Utils::HeaderHash.new Hash[mapped] end |
Instance Method Details
#call(env) ⇒ Object
62 63 64 |
# File 'lib/rack/proxy.rb', line 62 def call(env) rewrite_response(perform_request(rewrite_env(env))) end |
#rewrite_env(env) ⇒ Object
Return modified env
67 68 69 |
# File 'lib/rack/proxy.rb', line 67 def rewrite_env(env) env end |
#rewrite_response(triplet) ⇒ Object
Return a rack triplet [status, headers, body]
72 73 74 |
# File 'lib/rack/proxy.rb', line 72 def rewrite_response(triplet) triplet end |