faraday_middleware 0.13.0 → 0.13.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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 759c9264c036da4dc2e7347541d09d1afee816769b06930f40517fde2a816ab4
|
4
|
+
data.tar.gz: b603e5501f0cab2e9d065cb86c71cc46b7c5260f7ef136bd13d791b19d650c3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 696314d36aa007d70c27e07c918878803c36778ce69d8192c73f32b04cbb28ac20fba0a64d7b2fbb87e2ad167cb99363a7648808f27d402d7130a5a36fd5e9b6
|
7
|
+
data.tar.gz: 5d479f6be7386844f4b699c06773fcfdc0ae22530904b95220c8433a1d2f6237072dc95dbaf4fd0929b6f098132c400bc5fbd11e3354f83ea23d7fccd0dc1d76
|
@@ -13,10 +13,25 @@ module FaradayMiddleware
|
|
13
13
|
class Gzip < Faraday::Middleware
|
14
14
|
dependency 'zlib'
|
15
15
|
|
16
|
+
def self.optional_dependency(lib = nil)
|
17
|
+
lib ? require(lib) : yield
|
18
|
+
true
|
19
|
+
rescue LoadError, NameError
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
23
|
+
BROTLI_SUPPORTED = optional_dependency 'brotli'
|
24
|
+
|
25
|
+
def self.supported_encodings
|
26
|
+
encodings = %w[gzip deflate]
|
27
|
+
encodings << 'br' if BROTLI_SUPPORTED
|
28
|
+
encodings
|
29
|
+
end
|
30
|
+
|
16
31
|
ACCEPT_ENCODING = 'Accept-Encoding'.freeze
|
17
32
|
CONTENT_ENCODING = 'Content-Encoding'.freeze
|
18
33
|
CONTENT_LENGTH = 'Content-Length'.freeze
|
19
|
-
SUPPORTED_ENCODINGS = '
|
34
|
+
SUPPORTED_ENCODINGS = supported_encodings.join(',').freeze
|
20
35
|
RUBY_ENCODING = '1.9'.respond_to?(:force_encoding)
|
21
36
|
|
22
37
|
def call(env)
|
@@ -64,8 +79,6 @@ module FaradayMiddleware
|
|
64
79
|
end
|
65
80
|
|
66
81
|
def brotli_inflate(body)
|
67
|
-
self.class.dependency 'brotli'
|
68
|
-
|
69
82
|
Brotli.inflate(body)
|
70
83
|
end
|
71
84
|
end
|
@@ -45,15 +45,24 @@ module FaradayMiddleware
|
|
45
45
|
# the "%" character which we assume already represents an escaped sequence.
|
46
46
|
URI_UNSAFE = /[^\-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]%]/
|
47
47
|
|
48
|
+
AUTH_HEADER = 'Authorization'.freeze
|
49
|
+
|
48
50
|
# Public: Initialize the middleware.
|
49
51
|
#
|
50
52
|
# options - An options Hash (default: {}):
|
51
|
-
#
|
52
|
-
#
|
53
|
+
# :limit - A Numeric redirect limit (default: 3)
|
54
|
+
# :standards_compliant - A Boolean indicating whether to respect
|
53
55
|
# the HTTP spec when following 301/302
|
54
56
|
# (default: false)
|
55
|
-
#
|
57
|
+
# :callback - A callable that will be called on redirects
|
56
58
|
# with the old and new envs
|
59
|
+
# :cookies - An Array of Strings (e.g.
|
60
|
+
# ['cookie1', 'cookie2']) to choose
|
61
|
+
# cookies to be kept, or :all to keep
|
62
|
+
# all cookies (default: []).
|
63
|
+
# :clear_authorization_header - A Boolean indicating whether the request
|
64
|
+
# Authorization header should be cleared on
|
65
|
+
# redirects (default: true)
|
57
66
|
def initialize(app, options = {})
|
58
67
|
super(app)
|
59
68
|
@options = options
|
@@ -89,7 +98,9 @@ module FaradayMiddleware
|
|
89
98
|
end
|
90
99
|
|
91
100
|
def update_env(env, request_body, response)
|
92
|
-
env[:url]
|
101
|
+
redirect_from_url = env[:url].to_s
|
102
|
+
redirect_to_url = safe_escape(response['location'] || '')
|
103
|
+
env[:url] += redirect_to_url
|
93
104
|
|
94
105
|
if convert_to_get?(response)
|
95
106
|
env[:method] = :get
|
@@ -98,6 +109,8 @@ module FaradayMiddleware
|
|
98
109
|
env[:body] = request_body
|
99
110
|
end
|
100
111
|
|
112
|
+
clear_authorization_header(env, redirect_from_url, redirect_to_url)
|
113
|
+
|
101
114
|
ENV_TO_CLEAR.each {|key| env.delete key }
|
102
115
|
|
103
116
|
env
|
@@ -130,5 +143,21 @@ module FaradayMiddleware
|
|
130
143
|
'%' + match.unpack('H2' * match.bytesize).join('%').upcase
|
131
144
|
}
|
132
145
|
end
|
146
|
+
|
147
|
+
def clear_authorization_header(env, from_url, to_url)
|
148
|
+
return env if redirect_to_same_host?(from_url, to_url)
|
149
|
+
return env unless @options.fetch(:clear_authorization_header, true)
|
150
|
+
|
151
|
+
env[:request_headers].delete(AUTH_HEADER)
|
152
|
+
end
|
153
|
+
|
154
|
+
def redirect_to_same_host?(from_url, to_url)
|
155
|
+
return true if to_url.start_with?('/')
|
156
|
+
|
157
|
+
from_uri = URI.parse(from_url)
|
158
|
+
to_uri = URI.parse(to_url)
|
159
|
+
|
160
|
+
[from_uri.scheme, from_uri.host, from_uri.port] == [to_uri.scheme, to_uri.host, to_uri.port]
|
161
|
+
end
|
133
162
|
end
|
134
163
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday_middleware
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Michaels-Ober
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-02-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|