faraday-net_http 1.0.1 → 3.4.1

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: abc66839ab88c5fc96b602b163b00c896eaee90a533db6464dbe38aa763f857f
4
- data.tar.gz: a26950415c34a093595c44b34dcd79af3efa5d9513097444e478467e882fa787
3
+ metadata.gz: 1b449661096fbc74a1cdd3bc33377a7ca128666451d1ce6b17c7d5007f351c3b
4
+ data.tar.gz: 4b7cb1e14d209c97a7e54df7349b9eea265506ef5bf5ecf5344b4077acfb6929
5
5
  SHA512:
6
- metadata.gz: 13c56f77c7bad337f780d7651479550a1f4a639eb33612c32eb76480337de2d024e531d7b22f0a8b12f4f5f787986cff208e4e5f606ec74ee4de81fe00a8458b
7
- data.tar.gz: aa3eee27950f2fc19a9a53da24ad00c66ffaf4f31b97dc110f225ccdb99d851b15a8024e70f4b6445ab026621b6a04f87e7593d178ecf5efc0673b2ef3896088
6
+ metadata.gz: 1f2325b3ce4bd6483566c8c2b70c1ad8e5a95d28c4b090dacdb0a17f5be34a89c5f1b8adae5f39faea5a6777483af7d95a41230e04614d7e27ef392b64a962cb
7
+ data.tar.gz: f82744eda714b6da33e0231718c3f4f83156d78369fc17fd6a73020ddbbccec4b79db0a2fdf25e15416ea5f8e442ff267ef97e3725e8cdcce5b2a13f283c5bcd
data/README.md CHANGED
@@ -20,16 +20,17 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- Configure your Faraday connection to use this adapter like this:
24
-
25
23
  ```ruby
26
- connection = Faraday.new(url, conn_options) do |conn|
27
- conn.adapter(:net_http)
24
+ conn = Faraday.new(...) do |f|
25
+ f.adapter :net_http do |http|
26
+ # yields Net::HTTP
27
+ http.verify_callback = lambda do |preverify, cert_store|
28
+ # do something here...
29
+ end
30
+ end
28
31
  end
29
32
  ```
30
33
 
31
- For more information on how to setup your Faraday connection and adapters usage, please refer to the [Faraday Website][faraday-website].
32
-
33
34
  ## Development
34
35
 
35
36
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -49,9 +50,8 @@ The gem is available as open source under the terms of the [license][license].
49
50
  Everyone interacting in the Faraday Net::HTTP adapter project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct][code-of-conduct].
50
51
 
51
52
  [faraday]: https://github.com/lostisland/faraday
52
- [faraday-website]: https://lostisland.github.io/faraday
53
53
  [net-http]: https://ruby-doc.org/stdlib-2.7.0/libdoc/net/http/rdoc/Net/HTTP.html
54
54
  [rubygems]: https://rubygems.org
55
55
  [repo]: https://github.com/lostisland/faraday-net_http
56
56
  [license]: https://github.com/lostisland/faraday-net_http/blob/main/LICENSE.md
57
- [code-of-conduct]: https://github.com/lostisland/faraday-net_http/blob/main/CODE_OF_CONDUCT.md
57
+ [code-of-conduct]: https://github.com/lostisland/faraday-net_http/blob/main/CODE_OF_CONDUCT.md
@@ -15,6 +15,7 @@ module Faraday
15
15
  exceptions = [
16
16
  IOError,
17
17
  Errno::EADDRNOTAVAIL,
18
+ Errno::EALREADY,
18
19
  Errno::ECONNABORTED,
19
20
  Errno::ECONNREFUSED,
20
21
  Errno::ECONNRESET,
@@ -41,8 +42,7 @@ module Faraday
41
42
 
42
43
  def build_connection(env)
43
44
  net_http_connection(env).tap do |http|
44
- http.use_ssl = env[:url].scheme == 'https' if http.respond_to?(:use_ssl=)
45
- configure_ssl(http, env[:ssl])
45
+ configure_ssl(http, env[:ssl]) if env[:url].scheme == 'https' && env[:ssl]
46
46
  configure_request(http, env[:request])
47
47
  end
48
48
  end
@@ -53,7 +53,8 @@ module Faraday
53
53
  if proxy
54
54
  Net::HTTP.new(env[:url].hostname, port,
55
55
  proxy[:uri].hostname, proxy[:uri].port,
56
- proxy[:user], proxy[:password])
56
+ proxy[:user], proxy[:password],
57
+ nil, proxy[:uri].scheme == 'https')
57
58
  else
58
59
  Net::HTTP.new(env[:url].hostname, port, nil)
59
60
  end
@@ -61,24 +62,13 @@ module Faraday
61
62
 
62
63
  def call(env)
63
64
  super
64
- http_response = connection(env) do |http|
65
- begin
66
- perform_request(http, env)
67
- rescue *NET_HTTP_EXCEPTIONS => e
68
- raise Faraday::SSLError, e if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
65
+ connection(env) do |http|
66
+ perform_request(http, env)
67
+ rescue *NET_HTTP_EXCEPTIONS => e
68
+ raise Faraday::SSLError, e if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
69
69
 
70
- raise Faraday::ConnectionFailed, e
71
- end
70
+ raise Faraday::ConnectionFailed, e
72
71
  end
73
-
74
- save_response(env, http_response.code.to_i,
75
- http_response.body || +'', nil,
76
- http_response.message) do |response_headers|
77
- http_response.each_header do |key, value|
78
- response_headers[key] = value
79
- end
80
- end
81
-
82
72
  @app.call env
83
73
  rescue Timeout::Error, Errno::ETIMEDOUT => e
84
74
  raise Faraday::TimeoutError, e
@@ -103,64 +93,51 @@ module Faraday
103
93
  end
104
94
 
105
95
  def perform_request(http, env)
106
- if env[:request].stream_response?
107
- size = 0
108
- yielded = false
109
- http_response = request_with_wrapped_block(http, env) do |chunk|
110
- if chunk.bytesize.positive? || size.positive?
111
- yielded = true
112
- size += chunk.bytesize
113
- env[:request].on_data.call(chunk, size)
114
- end
96
+ if env.stream_response?
97
+ http_response = env.stream_response do |&on_data|
98
+ request_with_wrapped_block(http, env, &on_data)
115
99
  end
116
- env[:request].on_data.call(+'', 0) unless yielded
117
- # Net::HTTP returns something,
118
- # but it's not meaningful according to the docs.
119
100
  http_response.body = nil
120
- http_response
121
101
  else
122
- request_with_wrapped_block(http, env)
102
+ http_response = request_with_wrapped_block(http, env)
123
103
  end
104
+ env.response_body = encoded_body(http_response)
105
+ env.response.finish(env)
106
+ http_response
124
107
  end
125
108
 
126
109
  def request_with_wrapped_block(http, env, &block)
127
- if (env[:method] == :get) && !env[:body]
128
- # prefer `get` to `request` because the former handles gzip (ruby 1.9)
129
- request_via_get_method(http, env, &block)
130
- else
131
- request_via_request_method(http, env, &block)
132
- end
133
- end
134
-
135
- def request_via_get_method(http, env, &block)
136
110
  # Must use Net::HTTP#start and pass it a block otherwise the server's
137
111
  # TCP socket does not close correctly.
138
112
  http.start do |opened_http|
139
- opened_http.get env[:url].request_uri, env[:request_headers], &block
113
+ opened_http.request create_request(env) do |response|
114
+ save_http_response(env, response)
115
+
116
+ response.read_body(&block) if block_given?
117
+ end
140
118
  end
141
119
  end
142
120
 
143
- def request_via_request_method(http, env, &block)
144
- # Must use Net::HTTP#start and pass it a block otherwise the server's
145
- # TCP socket does not close correctly.
146
- http.start do |opened_http|
147
- if block_given?
148
- opened_http.request create_request(env) do |response|
149
- response.read_body(&block)
150
- end
151
- else
152
- opened_http.request create_request(env)
121
+ def save_http_response(env, http_response)
122
+ save_response(
123
+ env, http_response.code.to_i, nil, nil, http_response.message, finished: false
124
+ ) do |response_headers|
125
+ http_response.each_header do |key, value|
126
+ response_headers[key] = value
153
127
  end
154
128
  end
155
129
  end
156
130
 
157
131
  def configure_ssl(http, ssl)
158
- return unless ssl
132
+ http.use_ssl = true if http.respond_to?(:use_ssl=)
159
133
 
160
134
  http.verify_mode = ssl_verify_mode(ssl)
161
135
  http.cert_store = ssl_cert_store(ssl)
162
136
 
163
- http.cert = ssl[:client_cert] if ssl[:client_cert]
137
+ cert, *extra_chain_cert = ssl[:client_cert]
138
+ http.cert = cert if cert
139
+ http.extra_chain_cert = extra_chain_cert if extra_chain_cert.any?
140
+
164
141
  http.key = ssl[:client_key] if ssl[:client_key]
165
142
  http.ca_file = ssl[:ca_file] if ssl[:ca_file]
166
143
  http.ca_path = ssl[:ca_path] if ssl[:ca_path]
@@ -168,6 +145,8 @@ module Faraday
168
145
  http.ssl_version = ssl[:version] if ssl[:version]
169
146
  http.min_version = ssl[:min_version] if ssl[:min_version]
170
147
  http.max_version = ssl[:max_version] if ssl[:max_version]
148
+ http.verify_hostname = ssl[:verify_hostname] if verify_hostname_enabled?(http, ssl)
149
+ http.ciphers = ssl[:ciphers] if ssl[:ciphers]
171
150
  end
172
151
 
173
152
  def configure_request(http, req)
@@ -193,20 +172,34 @@ module Faraday
193
172
  def ssl_cert_store(ssl)
194
173
  return ssl[:cert_store] if ssl[:cert_store]
195
174
 
196
- @ssl_cert_store ||= begin
197
- # Use the default cert store by default, i.e. system ca certs
198
- OpenSSL::X509::Store.new.tap(&:set_default_paths)
199
- end
175
+ # Use the default cert store by default, i.e. system ca certs
176
+ @ssl_cert_store ||= OpenSSL::X509::Store.new.tap(&:set_default_paths)
200
177
  end
201
178
 
202
179
  def ssl_verify_mode(ssl)
203
180
  ssl[:verify_mode] || begin
204
- if ssl.fetch(:verify, true)
205
- OpenSSL::SSL::VERIFY_PEER
206
- else
207
- OpenSSL::SSL::VERIFY_NONE
208
- end
209
- end
181
+ if ssl.fetch(:verify, true)
182
+ OpenSSL::SSL::VERIFY_PEER
183
+ else
184
+ OpenSSL::SSL::VERIFY_NONE
185
+ end
186
+ end
187
+ end
188
+
189
+ def encoded_body(http_response)
190
+ body = http_response.body || +''
191
+ /\bcharset=([^;]+)/.match(http_response['Content-Type']) do |match|
192
+ content_charset = ::Encoding.find(match[1].strip)
193
+ body = body.dup if body.frozen?
194
+ body.force_encoding(content_charset)
195
+ rescue ArgumentError
196
+ nil
197
+ end
198
+ body
199
+ end
200
+
201
+ def verify_hostname_enabled?(http, ssl)
202
+ http.respond_to?(:verify_hostname=) && ssl.key?(:verify_hostname)
210
203
  end
211
204
  end
212
205
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Faraday
4
4
  module NetHttp
5
- VERSION = '1.0.1'
5
+ VERSION = '3.4.1'
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'adapter/net_http'
4
- require_relative 'net_http/version'
3
+ require 'faraday/adapter/net_http'
4
+ require 'faraday/net_http/version'
5
5
 
6
6
  module Faraday
7
7
  module NetHttp
metadata CHANGED
@@ -1,155 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday-net_http
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 3.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan van der Pas
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-01-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: faraday
13
+ name: net-http
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '1.0'
20
- type: :development
18
+ version: 0.5.0
19
+ type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - "~>"
23
+ - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '1.0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '13.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '13.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.0'
69
- - !ruby/object:Gem::Dependency
70
- name: simplecov
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.19.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.19.0
83
- - !ruby/object:Gem::Dependency
84
- name: multipart-parser
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 0.1.1
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.1.1
97
- - !ruby/object:Gem::Dependency
98
- name: webmock
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '3.4'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '3.4'
111
- - !ruby/object:Gem::Dependency
112
- name: rubocop
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 0.91.1
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 0.91.1
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop-packaging
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.5'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '0.5'
139
- - !ruby/object:Gem::Dependency
140
- name: rubocop-performance
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '1.0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '1.0'
25
+ version: 0.5.0
153
26
  description: Faraday adapter for Net::HTTP
154
27
  email:
155
28
  - janvanderpas@gmail.com
@@ -168,8 +41,8 @@ licenses:
168
41
  metadata:
169
42
  homepage_uri: https://github.com/lostisland/faraday-net_http
170
43
  source_code_uri: https://github.com/lostisland/faraday-net_http
171
- changelog_uri: https://github.com/lostisland/faraday-net_http
172
- post_install_message:
44
+ changelog_uri: https://github.com/lostisland/faraday-net_http/releases/tag/v3.4.1
45
+ rubygems_mfa_required: 'true'
173
46
  rdoc_options: []
174
47
  require_paths:
175
48
  - lib
@@ -177,15 +50,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
50
  requirements:
178
51
  - - ">="
179
52
  - !ruby/object:Gem::Version
180
- version: 2.4.0
53
+ version: 3.0.0
181
54
  required_rubygems_version: !ruby/object:Gem::Requirement
182
55
  requirements:
183
56
  - - ">="
184
57
  - !ruby/object:Gem::Version
185
58
  version: '0'
186
59
  requirements: []
187
- rubygems_version: 3.1.4
188
- signing_key:
60
+ rubygems_version: 3.6.7
189
61
  specification_version: 4
190
62
  summary: Faraday adapter for Net::HTTP
191
63
  test_files: []