savon 2.17.2 → 3.0.0.rc1
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 +4 -4
- data/CHANGELOG.md +17 -91
- data/README.md +52 -52
- data/Rakefile +2 -6
- data/lib/savon/block_interface.rb +4 -3
- data/lib/savon/builder.rb +33 -34
- data/lib/savon/client.rb +13 -44
- data/lib/savon/header.rb +12 -12
- data/lib/savon/http_error.rb +5 -3
- data/lib/savon/log_message.rb +3 -2
- data/lib/savon/message.rb +7 -6
- data/lib/savon/mock/expectation.rb +24 -38
- data/lib/savon/mock/spec_helper.rb +11 -7
- data/lib/savon/mock.rb +0 -1
- data/lib/savon/model.rb +25 -25
- data/lib/savon/operation.rb +74 -104
- data/lib/savon/options.rb +175 -276
- data/lib/savon/qualified_message.rb +1 -2
- data/lib/savon/request.rb +147 -0
- data/lib/savon/request_logger.rb +57 -0
- data/lib/savon/response.rb +23 -33
- data/lib/savon/soap_fault.rb +6 -6
- data/lib/savon/string_utils.rb +4 -3
- data/lib/savon/version.rb +1 -2
- data/lib/savon.rb +11 -2
- metadata +130 -69
- data/lib/savon/faraday_migration_hint.rb +0 -186
- data/lib/savon/transport/faraday.rb +0 -98
- data/lib/savon/transport/httpi.rb +0 -135
- data/lib/savon/transport/logging.rb +0 -60
- data/lib/savon/transport/response.rb +0 -44
metadata
CHANGED
|
@@ -1,166 +1,183 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: savon
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0.rc1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel Harrington
|
|
8
|
+
autorequire:
|
|
8
9
|
bindir: bin
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date:
|
|
11
|
+
date: 2024-07-15 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
|
-
name:
|
|
14
|
+
name: nori
|
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
|
15
16
|
requirements:
|
|
16
17
|
- - "~>"
|
|
17
18
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '
|
|
19
|
+
version: '2.4'
|
|
19
20
|
type: :runtime
|
|
20
21
|
prerelease: false
|
|
21
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
23
|
requirements:
|
|
23
24
|
- - "~>"
|
|
24
25
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '
|
|
26
|
+
version: '2.4'
|
|
26
27
|
- !ruby/object:Gem::Dependency
|
|
27
|
-
name:
|
|
28
|
+
name: faraday
|
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
|
29
30
|
requirements:
|
|
30
|
-
- - "
|
|
31
|
+
- - "~>"
|
|
31
32
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 2.
|
|
33
|
+
version: '2.8'
|
|
33
34
|
type: :runtime
|
|
34
35
|
prerelease: false
|
|
35
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
37
|
requirements:
|
|
37
|
-
- - "
|
|
38
|
+
- - "~>"
|
|
38
39
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 2.
|
|
40
|
+
version: '2.8'
|
|
40
41
|
- !ruby/object:Gem::Dependency
|
|
41
|
-
name:
|
|
42
|
+
name: faraday-gzip
|
|
42
43
|
requirement: !ruby/object:Gem::Requirement
|
|
43
44
|
requirements:
|
|
44
45
|
- - "~>"
|
|
45
46
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '
|
|
47
|
+
version: '2.0'
|
|
47
48
|
type: :runtime
|
|
48
49
|
prerelease: false
|
|
49
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
51
|
requirements:
|
|
51
52
|
- - "~>"
|
|
52
53
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '
|
|
54
|
+
version: '2.0'
|
|
54
55
|
- !ruby/object:Gem::Dependency
|
|
55
|
-
name:
|
|
56
|
+
name: faraday-follow_redirects
|
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
|
57
58
|
requirements:
|
|
58
|
-
- - "
|
|
59
|
+
- - "~>"
|
|
59
60
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '
|
|
61
|
-
|
|
61
|
+
version: '0.3'
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0.3'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: wasabi
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">"
|
|
62
74
|
- !ruby/object:Gem::Version
|
|
63
75
|
version: '5'
|
|
64
76
|
type: :runtime
|
|
65
77
|
prerelease: false
|
|
66
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
67
79
|
requirements:
|
|
68
|
-
- - "
|
|
69
|
-
- !ruby/object:Gem::Version
|
|
70
|
-
version: '4'
|
|
71
|
-
- - "<"
|
|
80
|
+
- - ">"
|
|
72
81
|
- !ruby/object:Gem::Version
|
|
73
82
|
version: '5'
|
|
74
83
|
- !ruby/object:Gem::Dependency
|
|
75
|
-
name:
|
|
84
|
+
name: akami
|
|
76
85
|
requirement: !ruby/object:Gem::Requirement
|
|
77
86
|
requirements:
|
|
78
87
|
- - "~>"
|
|
79
88
|
- !ruby/object:Gem::Version
|
|
80
|
-
version: '2
|
|
89
|
+
version: '1.2'
|
|
81
90
|
type: :runtime
|
|
82
91
|
prerelease: false
|
|
83
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
84
93
|
requirements:
|
|
85
94
|
- - "~>"
|
|
86
95
|
- !ruby/object:Gem::Version
|
|
87
|
-
version: '2
|
|
96
|
+
version: '1.2'
|
|
88
97
|
- !ruby/object:Gem::Dependency
|
|
89
|
-
name:
|
|
98
|
+
name: gyoku
|
|
90
99
|
requirement: !ruby/object:Gem::Requirement
|
|
91
100
|
requirements:
|
|
92
|
-
- - "
|
|
101
|
+
- - "~>"
|
|
93
102
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: 1.
|
|
103
|
+
version: '1.2'
|
|
95
104
|
type: :runtime
|
|
96
105
|
prerelease: false
|
|
97
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
98
107
|
requirements:
|
|
99
|
-
- - "
|
|
108
|
+
- - "~>"
|
|
100
109
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: 1.
|
|
110
|
+
version: '1.2'
|
|
102
111
|
- !ruby/object:Gem::Dependency
|
|
103
|
-
name:
|
|
112
|
+
name: builder
|
|
104
113
|
requirement: !ruby/object:Gem::Requirement
|
|
105
114
|
requirements:
|
|
106
|
-
- - "
|
|
115
|
+
- - ">="
|
|
107
116
|
- !ruby/object:Gem::Version
|
|
108
|
-
version:
|
|
117
|
+
version: 2.1.2
|
|
109
118
|
type: :runtime
|
|
110
119
|
prerelease: false
|
|
111
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
112
121
|
requirements:
|
|
113
|
-
- - "
|
|
122
|
+
- - ">="
|
|
114
123
|
- !ruby/object:Gem::Version
|
|
115
|
-
version:
|
|
124
|
+
version: 2.1.2
|
|
116
125
|
- !ruby/object:Gem::Dependency
|
|
117
|
-
name:
|
|
126
|
+
name: nokogiri
|
|
118
127
|
requirement: !ruby/object:Gem::Requirement
|
|
119
128
|
requirements:
|
|
120
129
|
- - ">="
|
|
121
130
|
- !ruby/object:Gem::Version
|
|
122
|
-
version:
|
|
123
|
-
- - "<"
|
|
124
|
-
- !ruby/object:Gem::Version
|
|
125
|
-
version: '6'
|
|
131
|
+
version: 1.8.1
|
|
126
132
|
type: :runtime
|
|
127
133
|
prerelease: false
|
|
128
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
129
135
|
requirements:
|
|
130
136
|
- - ">="
|
|
131
137
|
- !ruby/object:Gem::Version
|
|
132
|
-
version:
|
|
133
|
-
- - "<"
|
|
134
|
-
- !ruby/object:Gem::Version
|
|
135
|
-
version: '6'
|
|
138
|
+
version: 1.8.1
|
|
136
139
|
- !ruby/object:Gem::Dependency
|
|
137
|
-
name:
|
|
140
|
+
name: mail
|
|
138
141
|
requirement: !ruby/object:Gem::Requirement
|
|
139
142
|
requirements:
|
|
140
143
|
- - "~>"
|
|
141
144
|
- !ruby/object:Gem::Version
|
|
142
|
-
version: '
|
|
143
|
-
type: :
|
|
145
|
+
version: '2.5'
|
|
146
|
+
type: :runtime
|
|
144
147
|
prerelease: false
|
|
145
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
146
149
|
requirements:
|
|
147
150
|
- - "~>"
|
|
148
151
|
- !ruby/object:Gem::Version
|
|
149
|
-
version: '
|
|
152
|
+
version: '2.5'
|
|
150
153
|
- !ruby/object:Gem::Dependency
|
|
151
|
-
name:
|
|
154
|
+
name: faraday-net_http_persistent
|
|
152
155
|
requirement: !ruby/object:Gem::Requirement
|
|
153
156
|
requirements:
|
|
154
157
|
- - "~>"
|
|
155
158
|
- !ruby/object:Gem::Version
|
|
156
|
-
version:
|
|
159
|
+
version: '2.1'
|
|
157
160
|
type: :development
|
|
158
161
|
prerelease: false
|
|
159
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
160
163
|
requirements:
|
|
161
164
|
- - "~>"
|
|
162
165
|
- !ruby/object:Gem::Version
|
|
163
|
-
version:
|
|
166
|
+
version: '2.1'
|
|
167
|
+
- !ruby/object:Gem::Dependency
|
|
168
|
+
name: rubyntlm
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - ">="
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0.6'
|
|
174
|
+
type: :development
|
|
175
|
+
prerelease: false
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - ">="
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '0.6'
|
|
164
181
|
- !ruby/object:Gem::Dependency
|
|
165
182
|
name: rack
|
|
166
183
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -176,7 +193,27 @@ dependencies:
|
|
|
176
193
|
- !ruby/object:Gem::Version
|
|
177
194
|
version: '4'
|
|
178
195
|
- !ruby/object:Gem::Dependency
|
|
179
|
-
name:
|
|
196
|
+
name: puma
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - ">="
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: 4.3.8
|
|
202
|
+
- - "<"
|
|
203
|
+
- !ruby/object:Gem::Version
|
|
204
|
+
version: '7'
|
|
205
|
+
type: :development
|
|
206
|
+
prerelease: false
|
|
207
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
208
|
+
requirements:
|
|
209
|
+
- - ">="
|
|
210
|
+
- !ruby/object:Gem::Version
|
|
211
|
+
version: 4.3.8
|
|
212
|
+
- - "<"
|
|
213
|
+
- !ruby/object:Gem::Version
|
|
214
|
+
version: '7'
|
|
215
|
+
- !ruby/object:Gem::Dependency
|
|
216
|
+
name: httpclient
|
|
180
217
|
requirement: !ruby/object:Gem::Requirement
|
|
181
218
|
requirements:
|
|
182
219
|
- - ">="
|
|
@@ -190,33 +227,33 @@ dependencies:
|
|
|
190
227
|
- !ruby/object:Gem::Version
|
|
191
228
|
version: '0'
|
|
192
229
|
- !ruby/object:Gem::Dependency
|
|
193
|
-
name:
|
|
230
|
+
name: mutex_m
|
|
194
231
|
requirement: !ruby/object:Gem::Requirement
|
|
195
232
|
requirements:
|
|
196
233
|
- - ">="
|
|
197
234
|
- !ruby/object:Gem::Version
|
|
198
|
-
version:
|
|
235
|
+
version: '0'
|
|
199
236
|
type: :development
|
|
200
237
|
prerelease: false
|
|
201
238
|
version_requirements: !ruby/object:Gem::Requirement
|
|
202
239
|
requirements:
|
|
203
240
|
- - ">="
|
|
204
241
|
- !ruby/object:Gem::Version
|
|
205
|
-
version:
|
|
242
|
+
version: '0'
|
|
206
243
|
- !ruby/object:Gem::Dependency
|
|
207
|
-
name:
|
|
244
|
+
name: byebug
|
|
208
245
|
requirement: !ruby/object:Gem::Requirement
|
|
209
246
|
requirements:
|
|
210
|
-
- - "
|
|
247
|
+
- - ">="
|
|
211
248
|
- !ruby/object:Gem::Version
|
|
212
|
-
version: '0
|
|
249
|
+
version: '0'
|
|
213
250
|
type: :development
|
|
214
251
|
prerelease: false
|
|
215
252
|
version_requirements: !ruby/object:Gem::Requirement
|
|
216
253
|
requirements:
|
|
217
|
-
- - "
|
|
254
|
+
- - ">="
|
|
218
255
|
- !ruby/object:Gem::Version
|
|
219
|
-
version: '0
|
|
256
|
+
version: '0'
|
|
220
257
|
- !ruby/object:Gem::Dependency
|
|
221
258
|
name: rake
|
|
222
259
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -245,6 +282,34 @@ dependencies:
|
|
|
245
282
|
- - "~>"
|
|
246
283
|
- !ruby/object:Gem::Version
|
|
247
284
|
version: '3.9'
|
|
285
|
+
- !ruby/object:Gem::Dependency
|
|
286
|
+
name: mocha
|
|
287
|
+
requirement: !ruby/object:Gem::Requirement
|
|
288
|
+
requirements:
|
|
289
|
+
- - "~>"
|
|
290
|
+
- !ruby/object:Gem::Version
|
|
291
|
+
version: '0.14'
|
|
292
|
+
type: :development
|
|
293
|
+
prerelease: false
|
|
294
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
295
|
+
requirements:
|
|
296
|
+
- - "~>"
|
|
297
|
+
- !ruby/object:Gem::Version
|
|
298
|
+
version: '0.14'
|
|
299
|
+
- !ruby/object:Gem::Dependency
|
|
300
|
+
name: json
|
|
301
|
+
requirement: !ruby/object:Gem::Requirement
|
|
302
|
+
requirements:
|
|
303
|
+
- - ">="
|
|
304
|
+
- !ruby/object:Gem::Version
|
|
305
|
+
version: 2.3.0
|
|
306
|
+
type: :development
|
|
307
|
+
prerelease: false
|
|
308
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
309
|
+
requirements:
|
|
310
|
+
- - ">="
|
|
311
|
+
- !ruby/object:Gem::Version
|
|
312
|
+
version: 2.3.0
|
|
248
313
|
description: Heavy metal SOAP client
|
|
249
314
|
email: me@rubiii.com
|
|
250
315
|
executables: []
|
|
@@ -259,7 +324,6 @@ files:
|
|
|
259
324
|
- lib/savon/block_interface.rb
|
|
260
325
|
- lib/savon/builder.rb
|
|
261
326
|
- lib/savon/client.rb
|
|
262
|
-
- lib/savon/faraday_migration_hint.rb
|
|
263
327
|
- lib/savon/header.rb
|
|
264
328
|
- lib/savon/http_error.rb
|
|
265
329
|
- lib/savon/log_message.rb
|
|
@@ -271,22 +335,18 @@ files:
|
|
|
271
335
|
- lib/savon/operation.rb
|
|
272
336
|
- lib/savon/options.rb
|
|
273
337
|
- lib/savon/qualified_message.rb
|
|
338
|
+
- lib/savon/request.rb
|
|
339
|
+
- lib/savon/request_logger.rb
|
|
274
340
|
- lib/savon/response.rb
|
|
275
341
|
- lib/savon/soap_fault.rb
|
|
276
342
|
- lib/savon/string_utils.rb
|
|
277
|
-
- lib/savon/transport/faraday.rb
|
|
278
|
-
- lib/savon/transport/httpi.rb
|
|
279
|
-
- lib/savon/transport/logging.rb
|
|
280
|
-
- lib/savon/transport/response.rb
|
|
281
343
|
- lib/savon/version.rb
|
|
282
|
-
homepage:
|
|
344
|
+
homepage: http://savonrb.com
|
|
283
345
|
licenses:
|
|
284
346
|
- MIT
|
|
285
347
|
metadata:
|
|
286
348
|
rubygems_mfa_required: 'true'
|
|
287
|
-
|
|
288
|
-
changelog_uri: https://github.com/savonrb/savon/blob/main/CHANGELOG.md
|
|
289
|
-
bug_tracker_uri: https://github.com/savonrb/savon/issues
|
|
349
|
+
post_install_message:
|
|
290
350
|
rdoc_options: []
|
|
291
351
|
require_paths:
|
|
292
352
|
- lib
|
|
@@ -301,7 +361,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
301
361
|
- !ruby/object:Gem::Version
|
|
302
362
|
version: '0'
|
|
303
363
|
requirements: []
|
|
304
|
-
rubygems_version: 3.6
|
|
364
|
+
rubygems_version: 3.5.6
|
|
365
|
+
signing_key:
|
|
305
366
|
specification_version: 4
|
|
306
367
|
summary: Heavy metal SOAP client
|
|
307
368
|
test_files: []
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "uri"
|
|
4
|
-
|
|
5
|
-
module Savon
|
|
6
|
-
# Formats the replacement Faraday setup for one HTTPI-only option.
|
|
7
|
-
class FaradayMigrationHint
|
|
8
|
-
VALUE_AWARE_OPTIONS = %i[
|
|
9
|
-
proxy
|
|
10
|
-
open_timeout
|
|
11
|
-
read_timeout
|
|
12
|
-
write_timeout
|
|
13
|
-
ssl_version
|
|
14
|
-
ssl_min_version
|
|
15
|
-
ssl_max_version
|
|
16
|
-
ssl_verify_mode
|
|
17
|
-
ssl_cert_key_file
|
|
18
|
-
ssl_cert_file
|
|
19
|
-
ssl_ca_cert_file
|
|
20
|
-
ssl_ciphers
|
|
21
|
-
ssl_ca_cert_path
|
|
22
|
-
adapter
|
|
23
|
-
].freeze
|
|
24
|
-
|
|
25
|
-
STATIC_HINTS = {
|
|
26
|
-
ssl_cert_key: "client.faraday.ssl.client_key = key",
|
|
27
|
-
ssl_cert_key_password: [
|
|
28
|
-
"key = OpenSSL::PKey.read(File.read(key_path), password)",
|
|
29
|
-
"client.faraday.ssl.client_key = key"
|
|
30
|
-
],
|
|
31
|
-
ssl_cert: "client.faraday.ssl.client_cert = cert",
|
|
32
|
-
ssl_ca_cert: [
|
|
33
|
-
"store = OpenSSL::X509::Store.new",
|
|
34
|
-
"store.set_default_paths",
|
|
35
|
-
"store.add_cert(cert)",
|
|
36
|
-
"client.faraday.ssl.cert_store = store"
|
|
37
|
-
],
|
|
38
|
-
ssl_cert_store: "client.faraday.ssl.cert_store = store",
|
|
39
|
-
basic_auth: "client.faraday.request :authorization, :basic, user, pass",
|
|
40
|
-
digest_auth: [
|
|
41
|
-
"gem 'faraday-digestauth'",
|
|
42
|
-
"require 'faraday/digestauth'",
|
|
43
|
-
"client.faraday.request :digest, user, pass"
|
|
44
|
-
],
|
|
45
|
-
ntlm: [
|
|
46
|
-
"gem 'faraday-ntlm_auth'",
|
|
47
|
-
"require 'faraday/ntlm_auth'",
|
|
48
|
-
"client.faraday.adapter :net_http_persistent",
|
|
49
|
-
"client.faraday.request :ntlm_auth, auth: [user, pass, domain]"
|
|
50
|
-
],
|
|
51
|
-
follow_redirects: [
|
|
52
|
-
"gem 'faraday-follow_redirects'",
|
|
53
|
-
"require 'faraday/follow_redirects'",
|
|
54
|
-
"client.faraday.response :follow_redirects"
|
|
55
|
-
]
|
|
56
|
-
}.freeze
|
|
57
|
-
|
|
58
|
-
OPTIONS = (VALUE_AWARE_OPTIONS + STATIC_HINTS.keys).freeze
|
|
59
|
-
|
|
60
|
-
def initialize(option, value)
|
|
61
|
-
@option = option
|
|
62
|
-
@value = value
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def message
|
|
66
|
-
hint = hint_lines
|
|
67
|
-
return " #{option} - Use: #{hint}" unless hint.is_a?(Array)
|
|
68
|
-
|
|
69
|
-
" #{option} - Use:\n#{hint.map { |line| " #{line}" }.join("\n")}"
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
private
|
|
73
|
-
|
|
74
|
-
attr_reader :option, :value
|
|
75
|
-
|
|
76
|
-
def hint_lines
|
|
77
|
-
case option
|
|
78
|
-
when :proxy
|
|
79
|
-
"client.faraday.proxy = #{redacted_proxy_value}"
|
|
80
|
-
when :open_timeout, :read_timeout, :write_timeout
|
|
81
|
-
"client.faraday.options.#{option} = #{value.inspect}"
|
|
82
|
-
when :ssl_version, :ssl_min_version, :ssl_max_version
|
|
83
|
-
ssl_version_hint
|
|
84
|
-
when :ssl_verify_mode
|
|
85
|
-
ssl_verify_mode_hint
|
|
86
|
-
when :ssl_cert_key_file
|
|
87
|
-
ssl_cert_key_file_hint
|
|
88
|
-
when :ssl_cert_file
|
|
89
|
-
ssl_cert_file_hint
|
|
90
|
-
when :ssl_ca_cert_file
|
|
91
|
-
"client.faraday.ssl.ca_file = #{value.inspect}"
|
|
92
|
-
when :ssl_ciphers
|
|
93
|
-
"client.faraday.ssl.ciphers = #{value.inspect}"
|
|
94
|
-
when :ssl_ca_cert_path
|
|
95
|
-
"client.faraday.ssl.ca_path = #{value.inspect}"
|
|
96
|
-
when :adapter
|
|
97
|
-
adapter_hint
|
|
98
|
-
else
|
|
99
|
-
STATIC_HINTS.fetch(option)
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def redacted_proxy_value
|
|
104
|
-
uri = URI.parse(value.to_s)
|
|
105
|
-
return value.inspect unless uri.absolute? && uri.host
|
|
106
|
-
|
|
107
|
-
redacted = uri.dup
|
|
108
|
-
redacted.userinfo = "..." if redacted.userinfo
|
|
109
|
-
redacted.path = "" if redacted.respond_to?(:path=)
|
|
110
|
-
redacted.query = nil if redacted.respond_to?(:query=)
|
|
111
|
-
redacted.fragment = nil if redacted.respond_to?(:fragment=)
|
|
112
|
-
redacted.to_s.inspect
|
|
113
|
-
rescue URI::InvalidURIError
|
|
114
|
-
'"[redacted proxy URL]"'
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def ssl_version_hint
|
|
118
|
-
faraday_option = {
|
|
119
|
-
ssl_version: "version",
|
|
120
|
-
ssl_min_version: "min_version",
|
|
121
|
-
ssl_max_version: "max_version"
|
|
122
|
-
}.fetch(option)
|
|
123
|
-
|
|
124
|
-
"client.faraday.ssl.#{faraday_option} = #{value.inspect}"
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def ssl_cert_key_file_hint
|
|
128
|
-
[
|
|
129
|
-
"key = OpenSSL::PKey.read(File.read(#{value.inspect}))",
|
|
130
|
-
"client.faraday.ssl.client_key = key"
|
|
131
|
-
]
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
def ssl_cert_file_hint
|
|
135
|
-
[
|
|
136
|
-
"cert = OpenSSL::X509::Certificate.new(File.read(#{value.inspect}))",
|
|
137
|
-
"client.faraday.ssl.client_cert = cert"
|
|
138
|
-
]
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def adapter_hint
|
|
142
|
-
case value
|
|
143
|
-
when :net_http
|
|
144
|
-
"client.faraday.adapter :net_http"
|
|
145
|
-
when :httpclient
|
|
146
|
-
[
|
|
147
|
-
"gem 'faraday-httpclient'",
|
|
148
|
-
"require 'faraday/httpclient'",
|
|
149
|
-
"client.faraday.adapter :httpclient"
|
|
150
|
-
]
|
|
151
|
-
when :excon
|
|
152
|
-
[
|
|
153
|
-
"gem 'faraday-excon'",
|
|
154
|
-
"require 'faraday/excon'",
|
|
155
|
-
"client.faraday.adapter :excon"
|
|
156
|
-
]
|
|
157
|
-
when :net_http_persistent
|
|
158
|
-
[
|
|
159
|
-
"gem 'faraday-net_http_persistent'",
|
|
160
|
-
"require 'faraday/net_http_persistent'",
|
|
161
|
-
"client.faraday.adapter :net_http_persistent"
|
|
162
|
-
]
|
|
163
|
-
else
|
|
164
|
-
[
|
|
165
|
-
"choose and install a Faraday adapter matching #{value.inspect}",
|
|
166
|
-
"client.faraday.adapter :net_http"
|
|
167
|
-
]
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
def ssl_verify_mode_hint
|
|
172
|
-
case value
|
|
173
|
-
when :none
|
|
174
|
-
"client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_NONE"
|
|
175
|
-
when :peer
|
|
176
|
-
"client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_PEER"
|
|
177
|
-
when :fail_if_no_peer_cert
|
|
178
|
-
"client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT"
|
|
179
|
-
when :client_once
|
|
180
|
-
"client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_CLIENT_ONCE"
|
|
181
|
-
else
|
|
182
|
-
"client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_PEER or OpenSSL::SSL::VERIFY_NONE"
|
|
183
|
-
end
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
end
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "savon/transport/logging"
|
|
4
|
-
require "savon/transport/response"
|
|
5
|
-
|
|
6
|
-
module Savon
|
|
7
|
-
module Transport
|
|
8
|
-
# Faraday-backed HTTP transport for the opt-in Faraday path.
|
|
9
|
-
#
|
|
10
|
-
# Encapsulates everything Faraday-specific:
|
|
11
|
-
# * header assembly (SOAP + global + local + cookies)
|
|
12
|
-
# * request execution via the caller-configured Faraday::Connection
|
|
13
|
-
#
|
|
14
|
-
# Transport-level concerns (SSL, auth, proxy, timeouts, middleware) are
|
|
15
|
-
# the caller's responsibility via client.faraday before any call is made.
|
|
16
|
-
class Faraday
|
|
17
|
-
include Logging
|
|
18
|
-
|
|
19
|
-
# @param connection [Faraday::Connection] the memoized connection from client.faraday
|
|
20
|
-
# @param globals [Savon::GlobalOptions] the client-level options
|
|
21
|
-
def initialize(connection, globals)
|
|
22
|
-
@connection = connection
|
|
23
|
-
@globals = globals
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Assembles headers, executes the POST via the Faraday connection, and
|
|
27
|
-
# returns a Transport::Response. Logs the outbound request and inbound
|
|
28
|
-
# response when logging is enabled.
|
|
29
|
-
#
|
|
30
|
-
# @param url [String] the SOAP endpoint URL
|
|
31
|
-
# @param soap_headers [Hash] SOAP-level headers (Content-Type, SOAPAction, etc.)
|
|
32
|
-
# @param body [String] the serialized SOAP envelope
|
|
33
|
-
# @param locals [Savon::LocalOptions] per-request options
|
|
34
|
-
# @return [Transport::Response]
|
|
35
|
-
def post(url, soap_headers, body, locals)
|
|
36
|
-
headers = build_headers(soap_headers, locals)
|
|
37
|
-
|
|
38
|
-
log_request(url, headers, body) if log?
|
|
39
|
-
|
|
40
|
-
faraday_response = @connection.post(url, body, headers)
|
|
41
|
-
response = Response.new(
|
|
42
|
-
faraday_response.status,
|
|
43
|
-
faraday_response.headers.to_h,
|
|
44
|
-
faraday_response.body,
|
|
45
|
-
cookies: self.class.parse_cookies(faraday_response.headers)
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
log_response(response) if log?
|
|
49
|
-
response
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Parses Set-Cookie headers into a Hash of name => value. Accepts both
|
|
53
|
-
# the Array and String form. Attributes after the first ';' are discarded.
|
|
54
|
-
def self.parse_cookies(headers)
|
|
55
|
-
raw = headers["set-cookie"] || headers["Set-Cookie"]
|
|
56
|
-
return {} unless raw
|
|
57
|
-
|
|
58
|
-
raw_array = raw.is_a?(Array) ? raw : raw.split(/,\s*/)
|
|
59
|
-
raw_array.each_with_object({}) do |cookie_str, hash|
|
|
60
|
-
name_value = cookie_str.split(";", 2).first.to_s.strip
|
|
61
|
-
name, value = name_value.split("=", 2)
|
|
62
|
-
hash[name] = value if name && !name.empty?
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
private
|
|
67
|
-
|
|
68
|
-
# Merges all header sources in precedence order:
|
|
69
|
-
# locals[:headers] > globals[:headers] > soap_headers
|
|
70
|
-
# Appends Cookie from locals[:cookies].
|
|
71
|
-
def build_headers(soap_headers, locals)
|
|
72
|
-
headers = {}
|
|
73
|
-
headers.merge!(@globals[:headers]) if @globals.include?(:headers)
|
|
74
|
-
headers.merge!(locals[:headers]) if locals.include?(:headers)
|
|
75
|
-
|
|
76
|
-
# soap_headers are lowest priority
|
|
77
|
-
soap_headers.each do |k, v| headers[k] ||= v end
|
|
78
|
-
|
|
79
|
-
cookie_header = format_cookies(locals[:cookies])
|
|
80
|
-
headers["Cookie"] = cookie_header if cookie_header
|
|
81
|
-
|
|
82
|
-
headers
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# Builds the Cookie header from a given value.
|
|
86
|
-
# Accepts:
|
|
87
|
-
# * String - passed through verbatim
|
|
88
|
-
# * Hash - formatted as "name=value; name=value" (browser style)
|
|
89
|
-
# Returns nil when no cookies were supplied.
|
|
90
|
-
def format_cookies(cookies)
|
|
91
|
-
return nil if cookies.nil?
|
|
92
|
-
return cookies if cookies.is_a?(String)
|
|
93
|
-
|
|
94
|
-
cookies.map { |name, value| "#{name}=#{value}" }.join("; ")
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|