forward-proxy 0.2.0 → 0.3.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2f3ade2ec039aaadb19726b347d6cddb7db0f2590b91ab5d6eb69b8fd5c0aee
|
4
|
+
data.tar.gz: 0733602e8b7bab9e95df20cff04bc11981964260db17242460a2c26341a9032b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c25af1d60872d711a475028eddc06bc54ee7dd609cd3cbd1858ff667a1facb5e1cfb7ca38889ab7a8603d018a6c69e4b56ee11eaba525818f2cd0bf0a7b59c5
|
7
|
+
data.tar.gz: d105d9a16183951129e62ed1b905a12e12f251541154e90869bb9a74449c10925ec19e3f3fce8d9300f7af38a00dcf6aa26e0a4f2d37ca9882a1bc64a494cba8
|
data/lib/forward_proxy/server.rb
CHANGED
@@ -35,14 +35,8 @@ module ForwardProxy
|
|
35
35
|
else
|
36
36
|
raise Errors::HTTPMethodNotImplemented
|
37
37
|
end
|
38
|
-
rescue =>
|
39
|
-
client_conn
|
40
|
-
HTTP/1.1 502
|
41
|
-
Via: #{HEADER_VIA}
|
42
|
-
eos
|
43
|
-
|
44
|
-
puts e.message
|
45
|
-
puts e.backtrace.map { |line| " #{line}" }
|
38
|
+
rescue => err
|
39
|
+
handle_error(err, client_conn)
|
46
40
|
ensure
|
47
41
|
client_conn.close
|
48
42
|
end
|
@@ -58,7 +52,7 @@ module ForwardProxy
|
|
58
52
|
if socket
|
59
53
|
log("Shutting down")
|
60
54
|
|
61
|
-
socket.close
|
55
|
+
socket.close
|
62
56
|
end
|
63
57
|
end
|
64
58
|
|
@@ -119,17 +113,18 @@ module ForwardProxy
|
|
119
113
|
def handle(client_conn, req)
|
120
114
|
Net::HTTP.start(req.host, req.port) do |http|
|
121
115
|
http.request(map_webrick_to_net_http_req(req)) do |resp|
|
116
|
+
headers= resp.to_hash.merge(Via: [HEADER_VIA, resp['Via']].compact.join(', '))
|
117
|
+
|
122
118
|
client_conn.puts <<~eos.chomp
|
123
119
|
HTTP/1.1 #{resp.code}
|
124
|
-
|
125
|
-
#{resp.each.map { |header, value| "#{header}: #{value}" }.join("\n")}\n\n
|
120
|
+
#{headers.map { |header, value| "#{header}: #{value}" }.join("\n")}\n\n
|
126
121
|
eos
|
127
122
|
|
128
|
-
# The following comments are taken from:
|
123
|
+
# The following comments are taken from:
|
129
124
|
# https://docs.ruby-lang.org/en/2.0.0/Net/HTTP.html#class-Net::HTTP-label-Streaming+Response+Bodies
|
130
|
-
|
125
|
+
|
131
126
|
# By default Net::HTTP reads an entire response into memory. If you are
|
132
|
-
# handling large files or wish to implement a progress bar you can
|
127
|
+
# handling large files or wish to implement a progress bar you can
|
133
128
|
# instead stream the body directly to an IO.
|
134
129
|
resp.read_body do |chunk|
|
135
130
|
client_conn << chunk
|
@@ -138,6 +133,16 @@ module ForwardProxy
|
|
138
133
|
end
|
139
134
|
end
|
140
135
|
|
136
|
+
def handle_error(err, client_conn)
|
137
|
+
client_conn.puts <<~eos.chomp
|
138
|
+
HTTP/1.1 502
|
139
|
+
Via: #{HEADER_VIA}
|
140
|
+
eos
|
141
|
+
|
142
|
+
log(err.message, "ERROR")
|
143
|
+
puts err.backtrace.map { |line| " #{line}" }
|
144
|
+
end
|
145
|
+
|
141
146
|
def map_webrick_to_net_http_req(req)
|
142
147
|
req_headers = Hash[req.header.map { |k, v| [k, v.first] }]
|
143
148
|
|
data/lib/forward_proxy.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: forward-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Moriarty
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Forward proxy using just Ruby standard libraries.
|
14
14
|
email:
|