httpx 0.14.4 → 0.14.5

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: 495553e317911e0901a61617fac9bacd2ee33cb9c145eb01909fd09a8d1a6f9e
4
- data.tar.gz: fb19c9915540fcc3358f18f37ac18c80812824d4dacffb69956577a7df3c96a5
3
+ metadata.gz: 16f2f2bc0c8dfff4c7a92bc573f25e717a703f06fa8f336bde41bd60ad86ad87
4
+ data.tar.gz: 313f1fe9ec2c3d5a04f838c36d6ceee6982c60e3b4d6646644428f0c5c6d1d74
5
5
  SHA512:
6
- metadata.gz: fa1c3937960cc63d447d33bc966ea453281537bdd35318becbe7c963aad82def455a657b0a7d72a5b1efe8021541f817c3657b38ca085b3643ec2f1e11a6f7cb
7
- data.tar.gz: b8322a02d53e6922f0ec2a999cc9220a7cac74600b97e7e3e9f9b9ec003ef3c184184d90b2d976f7581422d1cf03355b57fc9c32dcdaf61651545a1d5ac30983
6
+ metadata.gz: 6780278b2b12254fe0f1a884a78d7e102e965d2d5f93b7431a2239e5b2d5e8c25e6e122715af89b03e786ba752b265d53d94d1f3a66cac7fe2a26299ff25491d
7
+ data.tar.gz: e85a43e840647f60a721481e112c8b8672f3f478d4bacdae6337c52beca5e3a198e2e9f0206592ecb111dfd0b5be33addf2f2e930255750ed89f145631f8d66c
@@ -0,0 +1,11 @@
1
+ # 0.14.5
2
+
3
+ ## Bugfixes
4
+
5
+ * After a connection had been initiated, sending multiple concurrent requests (ex: `open_httpx.request(req1, req2, req3)`) could freeze; this happened when the first request would fill the write buffer (like a file upload request), and the subsequent requests would never be buffered afterwards; this was fixed by making pending requests flushing a part of a connection's consumption loop.
6
+ * Fixing v0.14.1's fixed bug again; The HTTP/1 "Connection: close" header was not being set in the last possible request on a connection, due to ann off-by-one error on connection bookkeeping;
7
+ * HTTP/1 connections didn't respect a server-set max nunmber of requests after a reconnect; Fixed by making this accounting part of the reset process;
8
+
9
+ ## Chore
10
+
11
+ * Added regression test suite, which reproduce reported bugs before the fix (backported all 0.14.x releases here)
@@ -360,6 +360,8 @@ module HTTPX
360
360
  write_drained = false
361
361
  end unless interests == :r
362
362
 
363
+ send_pending if @state == :open
364
+
363
365
  # return if socket is drained
364
366
  next unless (interests != :r || read_drained) &&
365
367
  (interests != :w || write_drained)
@@ -40,6 +40,7 @@ module HTTPX
40
40
  def reset
41
41
  @max_requests = @options.max_requests || MAX_REQUESTS
42
42
  @parser.reset!
43
+ @handshake_completed = false
43
44
  end
44
45
 
45
46
  def close
@@ -260,7 +261,8 @@ module HTTPX
260
261
 
261
262
  requests_limit = [@max_requests, @requests.size].min
262
263
 
263
- connection = if request.options.persistent || request != @requests[requests_limit - 1]
264
+ connection = if request != @requests[requests_limit - 1] &&
265
+ request.options.persistent && @max_requests != 1
264
266
  "keep-alive"
265
267
  else
266
268
  "close"
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HTTPX
4
+ module Plugins
5
+ #
6
+ # https://gitlab.com/honeyryderchuck/httpx/wikis/Authentication#ntlm-authentication
7
+ #
8
+ module NTLMAuthentication
9
+ NTLMParams = Struct.new(:user, :domain, :password)
10
+
11
+ class << self
12
+ def load_dependencies(_klass)
13
+ require "base64"
14
+ require "ntlm"
15
+ end
16
+
17
+ def configure(klass)
18
+ klass.plugin(:authentication)
19
+ end
20
+
21
+ def extra_options(options)
22
+ Class.new(options.class) do
23
+ def_option(:ntlm, <<-OUT)
24
+ raise Error, ":ntlm must be a #{NTLMParams}" unless value.is_a?(#{NTLMParams})
25
+
26
+ value
27
+ OUT
28
+ end.new(options).merge(max_concurrent_requests: 1)
29
+ end
30
+ end
31
+
32
+ module InstanceMethods
33
+ def ntlm_authentication(user, password, domain = nil)
34
+ with(ntlm: NTLMParams.new(user, domain, password))
35
+ end
36
+
37
+ alias_method :ntlm_auth, :ntlm_authentication
38
+
39
+ def request(*args, **options)
40
+ requests = build_requests(*args, options)
41
+ request = requests.first
42
+ ntlm = request.options.ntlm
43
+
44
+ return super(*requests, **options) unless ntlm
45
+
46
+ request.headers["authorization"] = "NTLM #{NTLM.negotiate(domain: ntlm.domain).to_base64}"
47
+ probe_response = wrap { send_requests(*request, options).first }
48
+
49
+ return probe_response unless probe_response.status == 401 && probe_response.headers.key?("www-authenticate") &&
50
+ (challenge = probe_response.headers["www-authenticate"][/NTLM (.*)/, 1])
51
+
52
+ challenge = Base64.decode64(challenge)
53
+ ntlm_challenge = NTLM.authenticate(challenge, ntlm.user, ntlm.domain, ntlm.password).to_base64
54
+
55
+ request.transition(:idle)
56
+
57
+ request.headers["authorization"] = "NTLM #{ntlm_challenge}"
58
+ super(request, **options)
59
+ end
60
+ end
61
+ end
62
+ register_plugin :ntlm_authentication, NTLMAuthentication
63
+ end
64
+ end
data/lib/httpx/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTTPX
4
- VERSION = "0.14.4"
4
+ VERSION = "0.14.5"
5
5
  end
@@ -0,0 +1,27 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module NTLMAuthentication
4
+
5
+ interface _NTLMOptions
6
+ def ntlm: () -> NTLMParams?
7
+ def ntlm=: (NTLMParams) -> NTLMParams
8
+ end
9
+
10
+ def self.extra_options: (Options) -> (Options & _NTLMOptions)
11
+
12
+ def self.load_dependencies: (*untyped) -> void
13
+
14
+ module InstanceMethods
15
+ def ntlm_authentication: (string user, string password, ?string? domain) -> instance
16
+ end
17
+
18
+ class NTLMParams
19
+ attr_reader user: String
20
+ attr_reader password: String
21
+ attr_reader domain: String?
22
+ end
23
+ end
24
+
25
+ type sessionNTLMAuthentication = Plugins::sessionAuthentication & Plugins::NTLMAuthentication::InstanceMethods
26
+ end
27
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.4
4
+ version: 0.14.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tiago Cardoso
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-01 00:00:00.000000000 Z
11
+ date: 2021-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http-2-next
@@ -47,48 +47,49 @@ extra_rdoc_files:
47
47
  - LICENSE.txt
48
48
  - README.md
49
49
  - doc/release_notes/0_0_1.md
50
- - doc/release_notes/0_0_2.md
51
- - doc/release_notes/0_0_3.md
52
- - doc/release_notes/0_0_4.md
50
+ - doc/release_notes/0_14_5.md
51
+ - doc/release_notes/0_1_0.md
53
52
  - doc/release_notes/0_0_5.md
54
- - doc/release_notes/0_10_0.md
55
- - doc/release_notes/0_10_1.md
56
- - doc/release_notes/0_10_2.md
57
- - doc/release_notes/0_11_0.md
58
- - doc/release_notes/0_11_1.md
53
+ - doc/release_notes/0_14_1.md
54
+ - doc/release_notes/0_0_4.md
55
+ - doc/release_notes/0_14_0.md
56
+ - doc/release_notes/0_14_4.md
57
+ - doc/release_notes/0_6_5.md
58
+ - doc/release_notes/0_13_0.md
59
+ - doc/release_notes/0_6_1.md
59
60
  - doc/release_notes/0_11_2.md
61
+ - doc/release_notes/0_7_0.md
62
+ - doc/release_notes/0_6_0.md
63
+ - doc/release_notes/0_10_2.md
60
64
  - doc/release_notes/0_11_3.md
61
- - doc/release_notes/0_12_0.md
62
- - doc/release_notes/0_13_0.md
65
+ - doc/release_notes/0_8_2.md
66
+ - doc/release_notes/0_6_4.md
63
67
  - doc/release_notes/0_13_1.md
68
+ - doc/release_notes/0_12_0.md
69
+ - doc/release_notes/0_9_0.md
70
+ - doc/release_notes/0_6_3.md
71
+ - doc/release_notes/0_10_1.md
72
+ - doc/release_notes/0_11_0.md
73
+ - doc/release_notes/0_8_1.md
74
+ - doc/release_notes/0_5_0.md
75
+ - doc/release_notes/0_6_7.md
64
76
  - doc/release_notes/0_13_2.md
65
- - doc/release_notes/0_14_0.md
66
- - doc/release_notes/0_14_1.md
67
- - doc/release_notes/0_14_2.md
68
- - doc/release_notes/0_14_3.md
69
- - doc/release_notes/0_14_4.md
70
- - doc/release_notes/0_1_0.md
71
- - doc/release_notes/0_2_0.md
72
- - doc/release_notes/0_2_1.md
73
- - doc/release_notes/0_3_0.md
74
- - doc/release_notes/0_3_1.md
75
- - doc/release_notes/0_4_0.md
76
77
  - doc/release_notes/0_4_1.md
77
- - doc/release_notes/0_5_0.md
78
78
  - doc/release_notes/0_5_1.md
79
- - doc/release_notes/0_6_0.md
80
- - doc/release_notes/0_6_1.md
81
- - doc/release_notes/0_6_2.md
82
- - doc/release_notes/0_6_3.md
83
- - doc/release_notes/0_6_4.md
84
- - doc/release_notes/0_6_5.md
85
79
  - doc/release_notes/0_6_6.md
86
- - doc/release_notes/0_6_7.md
87
- - doc/release_notes/0_7_0.md
80
+ - doc/release_notes/0_4_0.md
81
+ - doc/release_notes/0_6_2.md
82
+ - doc/release_notes/0_10_0.md
83
+ - doc/release_notes/0_11_1.md
88
84
  - doc/release_notes/0_8_0.md
89
- - doc/release_notes/0_8_1.md
90
- - doc/release_notes/0_8_2.md
91
- - doc/release_notes/0_9_0.md
85
+ - doc/release_notes/0_3_0.md
86
+ - doc/release_notes/0_14_3.md
87
+ - doc/release_notes/0_2_1.md
88
+ - doc/release_notes/0_0_3.md
89
+ - doc/release_notes/0_0_2.md
90
+ - doc/release_notes/0_3_1.md
91
+ - doc/release_notes/0_14_2.md
92
+ - doc/release_notes/0_2_0.md
92
93
  files:
93
94
  - LICENSE.txt
94
95
  - README.md
@@ -113,6 +114,7 @@ files:
113
114
  - doc/release_notes/0_14_2.md
114
115
  - doc/release_notes/0_14_3.md
115
116
  - doc/release_notes/0_14_4.md
117
+ - doc/release_notes/0_14_5.md
116
118
  - doc/release_notes/0_1_0.md
117
119
  - doc/release_notes/0_2_0.md
118
120
  - doc/release_notes/0_2_1.md
@@ -187,6 +189,7 @@ files:
187
189
  - lib/httpx/plugins/multipart/encoder.rb
188
190
  - lib/httpx/plugins/multipart/mime_type_detector.rb
189
191
  - lib/httpx/plugins/multipart/part.rb
192
+ - lib/httpx/plugins/ntlm_authentication.rb
190
193
  - lib/httpx/plugins/persistent.rb
191
194
  - lib/httpx/plugins/proxy.rb
192
195
  - lib/httpx/plugins/proxy/http.rb
@@ -246,6 +249,7 @@ files:
246
249
  - sig/plugins/follow_redirects.rbs
247
250
  - sig/plugins/h2c.rbs
248
251
  - sig/plugins/multipart.rbs
252
+ - sig/plugins/ntlm_authentication.rbs
249
253
  - sig/plugins/persistent.rbs
250
254
  - sig/plugins/proxy.rbs
251
255
  - sig/plugins/proxy/http.rbs
@@ -281,7 +285,7 @@ metadata:
281
285
  changelog_uri: https://honeyryderchuck.gitlab.io/httpx/#release-notes
282
286
  documentation_uri: https://honeyryderchuck.gitlab.io/httpx/rdoc/
283
287
  source_code_uri: https://gitlab.com/honeyryderchuck/httpx
284
- post_install_message:
288
+ post_install_message:
285
289
  rdoc_options: []
286
290
  require_paths:
287
291
  - lib
@@ -296,8 +300,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
296
300
  - !ruby/object:Gem::Version
297
301
  version: '0'
298
302
  requirements: []
299
- rubygems_version: 3.2.15
300
- signing_key:
303
+ rubygems_version: 3.0.3
304
+ signing_key:
301
305
  specification_version: 4
302
306
  summary: HTTPX, to the future, and beyond
303
307
  test_files: []