forward-proxy 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 628359d25536c4190014c9e082fff41b2adef209f04a62d8a6b217c078f3b58b
4
- data.tar.gz: 7834932b7242fd66c120d270a922e385a6a58ab63c65e8ce2b7957da43ba5a11
3
+ metadata.gz: a2f3ade2ec039aaadb19726b347d6cddb7db0f2590b91ab5d6eb69b8fd5c0aee
4
+ data.tar.gz: 0733602e8b7bab9e95df20cff04bc11981964260db17242460a2c26341a9032b
5
5
  SHA512:
6
- metadata.gz: 8c47ab1d691807a23ba779f1ae8d4feecd32300f8d840044f66a5cc2f40ccd33c095db60ca9e3f99fb3c8fd60c02ae46d5d8d07b6a4de6298bef24731fb57cb4
7
- data.tar.gz: 609a35651496d98e4977f3691c7834efd58fe736615b3b4594e0bc61d11dad0088f11f535f6b287db85f95c1cc8ab55ea2a536447028b690d92ffd0aa3e60669
6
+ metadata.gz: 9c25af1d60872d711a475028eddc06bc54ee7dd609cd3cbd1858ff667a1facb5e1cfb7ca38889ab7a8603d018a6c69e4b56ee11eaba525818f2cd0bf0a7b59c5
7
+ data.tar.gz: d105d9a16183951129e62ed1b905a12e12f251541154e90869bb9a74449c10925ec19e3f3fce8d9300f7af38a00dcf6aa26e0a4f2d37ca9882a1bc64a494cba8
@@ -2,4 +2,4 @@ module ForwardProxy
2
2
  module Errors
3
3
  class HTTPMethodNotImplemented < StandardError; end
4
4
  end
5
- end
5
+ end
@@ -2,4 +2,4 @@ module ForwardProxy
2
2
  module Errors
3
3
  class HTTPParseError < StandardError; end
4
4
  end
5
- end
5
+ end
@@ -35,14 +35,8 @@ module ForwardProxy
35
35
  else
36
36
  raise Errors::HTTPMethodNotImplemented
37
37
  end
38
- rescue => e
39
- client_conn.puts <<~eos.chomp
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
- Via: #{[HEADER_VIA, resp['Via']].compact.join(', ')}
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
 
@@ -1,3 +1,3 @@
1
1
  module ForwardProxy
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/forward_proxy.rb CHANGED
@@ -1,4 +1,4 @@
1
- $:.unshift File.dirname(__FILE__)
1
+ $LOAD_PATH.unshift File.dirname(__FILE__)
2
2
 
3
3
  require 'forward_proxy/version'
4
4
  require 'forward_proxy/server'
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.2.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-05-06 00:00:00.000000000 Z
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: