rack-proxy 0.5.9 → 0.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rack/proxy.rb +26 -22
- data/test/rack_proxy_test.rb +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62bc77dceccd17a3c51368465f5e4559b1e2c10f
|
4
|
+
data.tar.gz: fa070a3fe2a3e8ba95372e5643601fcbcd2fa71d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4a4b8488144c9d46447112e97cef94113eb8487da3550d496d85fec159cd15ced276d210b07d64b88e4d3b3f4ab52b85c659a9d1d234ea666d9a9f4f360fa02
|
7
|
+
data.tar.gz: 7b1dc10788f6b5eb53f02612bed7066d971a7f12c2ec31215c3bec7f9d95de07c479841f756b8c56f6f509fc8a78891545deba4c7f44c7bba0a8c48a97812bd2
|
data/Gemfile.lock
CHANGED
data/lib/rack/proxy.rb
CHANGED
@@ -5,7 +5,31 @@ module Rack
|
|
5
5
|
|
6
6
|
# Subclass and bring your own #rewrite_request and #rewrite_response
|
7
7
|
class Proxy
|
8
|
-
VERSION = "0.5.
|
8
|
+
VERSION = "0.5.10"
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def extract_http_request_headers(env)
|
12
|
+
headers = env.reject do |k, v|
|
13
|
+
!(/^HTTP_[A-Z_]+$/ === k) || v.nil?
|
14
|
+
end.map do |k, v|
|
15
|
+
[reconstruct_header_name(k), v]
|
16
|
+
end.inject(Utils::HeaderHash.new) do |hash, k_v|
|
17
|
+
k, v = k_v
|
18
|
+
hash[k] = v
|
19
|
+
hash
|
20
|
+
end
|
21
|
+
|
22
|
+
x_forwarded_for = (headers["X-Forwarded-For"].to_s.split(/, +/) << env["REMOTE_ADDR"]).join(", ")
|
23
|
+
|
24
|
+
headers.merge!("X-Forwarded-For" => x_forwarded_for)
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
def reconstruct_header_name(name)
|
30
|
+
name.sub(/^HTTP_/, "").gsub("_", "-")
|
31
|
+
end
|
32
|
+
end
|
9
33
|
|
10
34
|
# @option opts [String, URI::HTTP] :backend Backend host to proxy requests to
|
11
35
|
def initialize(opts={})
|
@@ -43,7 +67,7 @@ module Rack
|
|
43
67
|
target_request = Net::HTTP.const_get(source_request.request_method.capitalize).new(full_path)
|
44
68
|
|
45
69
|
# Setup headers
|
46
|
-
target_request.initialize_http_header(extract_http_request_headers(source_request.env))
|
70
|
+
target_request.initialize_http_header(self.class.extract_http_request_headers(source_request.env))
|
47
71
|
|
48
72
|
# Setup body
|
49
73
|
if target_request.request_body_permitted? && source_request.body
|
@@ -80,26 +104,6 @@ module Rack
|
|
80
104
|
[target_response.code, headers, body]
|
81
105
|
end
|
82
106
|
|
83
|
-
def extract_http_request_headers(env)
|
84
|
-
headers = env.reject do |k, v|
|
85
|
-
!(/^HTTP_[A-Z_]+$/ === k) || v.nil?
|
86
|
-
end.map do |k, v|
|
87
|
-
[reconstruct_header_name(k), v]
|
88
|
-
end.inject(Utils::HeaderHash.new) do |hash, k_v|
|
89
|
-
k, v = k_v
|
90
|
-
hash[k] = v
|
91
|
-
hash
|
92
|
-
end
|
93
|
-
|
94
|
-
x_forwarded_for = (headers["X-Forwarded-For"].to_s.split(/, +/) << env["REMOTE_ADDR"]).join(", ")
|
95
|
-
|
96
|
-
headers.merge!("X-Forwarded-For" => x_forwarded_for)
|
97
|
-
end
|
98
|
-
|
99
|
-
def reconstruct_header_name(name)
|
100
|
-
name.sub(/^HTTP_/, "").gsub("_", "-")
|
101
|
-
end
|
102
|
-
|
103
107
|
end
|
104
108
|
|
105
109
|
end
|
data/test/rack_proxy_test.rb
CHANGED
@@ -50,24 +50,24 @@ class RackProxyTest < Test::Unit::TestCase
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_header_reconstruction
|
53
|
-
|
53
|
+
proxy_class = Rack::Proxy
|
54
54
|
|
55
|
-
header =
|
55
|
+
header = proxy_class.send(:reconstruct_header_name, "HTTP_ABC")
|
56
56
|
assert header == "ABC"
|
57
57
|
|
58
|
-
header =
|
58
|
+
header = proxy_class.send(:reconstruct_header_name, "HTTP_ABC_D")
|
59
59
|
assert header == "ABC-D"
|
60
60
|
end
|
61
61
|
|
62
62
|
def test_extract_http_request_headers
|
63
|
-
|
63
|
+
proxy_class = Rack::Proxy
|
64
64
|
env = {
|
65
65
|
'NOT-HTTP-HEADER' => 'test-value',
|
66
66
|
'HTTP_ACCEPT' => 'text/html',
|
67
67
|
'HTTP_CONNECTION' => nil
|
68
68
|
}
|
69
69
|
|
70
|
-
headers =
|
70
|
+
headers = proxy_class.extract_http_request_headers(env)
|
71
71
|
assert headers.key?('ACCEPT')
|
72
72
|
assert !headers.key?('CONNECTION')
|
73
73
|
assert !headers.key?('NOT-HTTP-HEADER')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacek Becela
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|