signet 0.11.0 → 0.14.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 +4 -4
- data/CHANGELOG.md +51 -15
- data/Gemfile +5 -4
- data/README.md +4 -6
- data/Rakefile +107 -37
- data/lib/signet.rb +17 -14
- data/lib/signet/errors.rb +4 -4
- data/lib/signet/oauth_1.rb +129 -154
- data/lib/signet/oauth_1/client.rb +309 -343
- data/lib/signet/oauth_1/credential.rb +40 -37
- data/lib/signet/oauth_1/server.rb +197 -203
- data/lib/signet/oauth_1/signature_methods/hmac_sha1.rb +11 -10
- data/lib/signet/oauth_1/signature_methods/plaintext.rb +8 -7
- data/lib/signet/oauth_1/signature_methods/rsa_sha1.rb +11 -11
- data/lib/signet/oauth_2.rb +41 -43
- data/lib/signet/oauth_2/client.rb +328 -313
- data/lib/signet/version.rb +2 -73
- data/signet.gemspec +37 -39
- data/spec/signet/oauth_1/client_spec.rb +313 -315
- data/spec/signet/oauth_1/credential_spec.rb +64 -56
- data/spec/signet/oauth_1/server_spec.rb +362 -362
- data/spec/signet/oauth_1/signature_methods/hmac_sha1_spec.rb +26 -26
- data/spec/signet/oauth_1/signature_methods/plaintext_spec.rb +28 -28
- data/spec/signet/oauth_1/signature_methods/rsa_sha1_spec.rb +34 -35
- data/spec/signet/oauth_1_spec.rb +553 -524
- data/spec/signet/oauth_2/client_spec.rb +652 -576
- data/spec/signet/oauth_2_spec.rb +88 -89
- data/spec/signet_spec.rb +41 -41
- data/spec/spec_helper.rb +7 -7
- data/spec/spec_helper_spec.rb +8 -8
- metadata +64 -52
- data/tasks/clobber.rake +0 -2
- data/tasks/gem.rake +0 -34
- data/tasks/git.rake +0 -40
- data/tasks/metrics.rake +0 -41
- data/tasks/spec.rake +0 -34
- data/tasks/wiki.rake +0 -38
- data/tasks/yard.rake +0 -21
@@ -12,15 +12,15 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
require
|
16
|
-
#require 'faraday/utils'
|
15
|
+
require "faraday"
|
16
|
+
# require 'faraday/utils'
|
17
17
|
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
18
|
+
require "stringio"
|
19
|
+
require "addressable/uri"
|
20
|
+
require "signet"
|
21
|
+
require "signet/errors"
|
22
|
+
require "signet/oauth_1"
|
23
|
+
require "signet/oauth_1/credential"
|
24
24
|
|
25
25
|
module Signet
|
26
26
|
module OAuth1
|
@@ -53,8 +53,8 @@ module Signet
|
|
53
53
|
# :client_credential_key => 'anonymous',
|
54
54
|
# :client_credential_secret => 'anonymous'
|
55
55
|
# )
|
56
|
-
def initialize
|
57
|
-
|
56
|
+
def initialize options = {}
|
57
|
+
update! options
|
58
58
|
end
|
59
59
|
|
60
60
|
##
|
@@ -87,29 +87,29 @@ module Signet
|
|
87
87
|
# )
|
88
88
|
#
|
89
89
|
# @see Signet::OAuth1::Client#initialize
|
90
|
-
def update!
|
90
|
+
def update! options = {}
|
91
91
|
# Normalize key to String to allow indifferent access.
|
92
|
-
options = options.
|
92
|
+
options = options.each_with_object({}) { |(k, v), accu| accu[k.to_s] = v; }
|
93
93
|
self.temporary_credential_uri = options["temporary_credential_uri"]
|
94
94
|
self.authorization_uri = options["authorization_uri"]
|
95
95
|
self.token_credential_uri = options["token_credential_uri"]
|
96
96
|
# Technically... this would allow you to pass in a :client key...
|
97
97
|
# But that would be weird. Don't do that.
|
98
98
|
self.client_credential_key =
|
99
|
-
Signet::OAuth1.extract_credential_key_option
|
99
|
+
Signet::OAuth1.extract_credential_key_option "client", options
|
100
100
|
self.client_credential_secret =
|
101
|
-
Signet::OAuth1.extract_credential_secret_option
|
101
|
+
Signet::OAuth1.extract_credential_secret_option "client", options
|
102
102
|
self.temporary_credential_key =
|
103
|
-
Signet::OAuth1.extract_credential_key_option
|
103
|
+
Signet::OAuth1.extract_credential_key_option "temporary", options
|
104
104
|
self.temporary_credential_secret =
|
105
|
-
Signet::OAuth1.extract_credential_secret_option
|
105
|
+
Signet::OAuth1.extract_credential_secret_option "temporary", options
|
106
106
|
self.token_credential_key =
|
107
|
-
Signet::OAuth1.extract_credential_key_option
|
107
|
+
Signet::OAuth1.extract_credential_key_option "token", options
|
108
108
|
self.token_credential_secret =
|
109
|
-
Signet::OAuth1.extract_credential_secret_option
|
109
|
+
Signet::OAuth1.extract_credential_secret_option "token", options
|
110
110
|
self.callback = options["callback"]
|
111
111
|
self.two_legged = options["two_legged"] || false
|
112
|
-
|
112
|
+
self
|
113
113
|
end
|
114
114
|
|
115
115
|
##
|
@@ -117,9 +117,9 @@ module Signet
|
|
117
117
|
#
|
118
118
|
# @return [Addressable::URI] The temporary credentials URI.
|
119
119
|
def temporary_credential_uri
|
120
|
-
|
120
|
+
@temporary_credential_uri
|
121
121
|
end
|
122
|
-
|
122
|
+
alias request_token_uri temporary_credential_uri
|
123
123
|
|
124
124
|
##
|
125
125
|
# Sets the temporary credentials URI for this client.
|
@@ -127,16 +127,16 @@ module Signet
|
|
127
127
|
# @param [Addressable::URI, String, #to_str]
|
128
128
|
# new_temporary_credential_uri
|
129
129
|
# The temporary credentials URI.
|
130
|
-
def temporary_credential_uri=
|
131
|
-
if new_temporary_credential_uri
|
130
|
+
def temporary_credential_uri= new_temporary_credential_uri
|
131
|
+
if !new_temporary_credential_uri.nil?
|
132
132
|
new_temporary_credential_uri =
|
133
|
-
Addressable::URI.parse
|
133
|
+
Addressable::URI.parse new_temporary_credential_uri
|
134
134
|
@temporary_credential_uri = new_temporary_credential_uri
|
135
135
|
else
|
136
136
|
@temporary_credential_uri = nil
|
137
137
|
end
|
138
138
|
end
|
139
|
-
|
139
|
+
alias request_token_uri= temporary_credential_uri=
|
140
140
|
|
141
141
|
##
|
142
142
|
# Returns the authorization URI that the user should be redirected to.
|
@@ -144,13 +144,13 @@ module Signet
|
|
144
144
|
# @return [Addressable::URI] The authorization URI.
|
145
145
|
#
|
146
146
|
# @see Signet::OAuth1.generate_authorization_uri
|
147
|
-
def authorization_uri
|
147
|
+
def authorization_uri options = {}
|
148
148
|
options = options.merge(
|
149
|
-
:
|
150
|
-
:callback
|
149
|
+
temporary_credential_key: temporary_credential_key,
|
150
|
+
callback: callback
|
151
151
|
)
|
152
|
-
return nil if @authorization_uri
|
153
|
-
|
152
|
+
return nil if @authorization_uri.nil?
|
153
|
+
Addressable::URI.parse(
|
154
154
|
::Signet::OAuth1.generate_authorization_uri(
|
155
155
|
@authorization_uri, options
|
156
156
|
)
|
@@ -162,10 +162,10 @@ module Signet
|
|
162
162
|
#
|
163
163
|
# @param [Addressable::URI, String, #to_str] new_authorization_uri
|
164
164
|
# The authorization URI.
|
165
|
-
def authorization_uri=
|
166
|
-
if new_authorization_uri
|
165
|
+
def authorization_uri= new_authorization_uri
|
166
|
+
if !new_authorization_uri.nil?
|
167
167
|
new_authorization_uri = Addressable::URI.send(
|
168
|
-
new_authorization_uri.
|
168
|
+
new_authorization_uri.is_a?(Hash) ? :new : :parse,
|
169
169
|
new_authorization_uri
|
170
170
|
)
|
171
171
|
@authorization_uri = new_authorization_uri
|
@@ -179,19 +179,19 @@ module Signet
|
|
179
179
|
#
|
180
180
|
# @return [Addressable::URI] The token credential URI.
|
181
181
|
def token_credential_uri
|
182
|
-
|
182
|
+
@token_credential_uri
|
183
183
|
end
|
184
|
-
|
184
|
+
alias access_token_uri token_credential_uri
|
185
185
|
|
186
186
|
##
|
187
187
|
# Sets the token credential URI for this client.
|
188
188
|
#
|
189
189
|
# @param [Addressable::URI, Hash, String, #to_str] new_token_credential_uri
|
190
190
|
# The token credential URI.
|
191
|
-
def token_credential_uri=
|
192
|
-
if new_token_credential_uri
|
191
|
+
def token_credential_uri= new_token_credential_uri
|
192
|
+
if !new_token_credential_uri.nil?
|
193
193
|
new_token_credential_uri = Addressable::URI.send(
|
194
|
-
new_token_credential_uri.
|
194
|
+
new_token_credential_uri.is_a?(Hash) ? :new : :parse,
|
195
195
|
new_token_credential_uri
|
196
196
|
)
|
197
197
|
@token_credential_uri = new_token_credential_uri
|
@@ -199,7 +199,7 @@ module Signet
|
|
199
199
|
@token_credential_uri = nil
|
200
200
|
end
|
201
201
|
end
|
202
|
-
|
202
|
+
alias access_token_uri= token_credential_uri=
|
203
203
|
|
204
204
|
# Lots of duplicated code here, but for the sake of auto-generating
|
205
205
|
# documentation, we're going to let it slide. Oh well.
|
@@ -209,31 +209,31 @@ module Signet
|
|
209
209
|
#
|
210
210
|
# @return [Signet::OAuth1::Credential] The client credentials.
|
211
211
|
def client_credential
|
212
|
-
if
|
213
|
-
|
214
|
-
|
215
|
-
|
212
|
+
if client_credential_key && client_credential_secret
|
213
|
+
::Signet::OAuth1::Credential.new(
|
214
|
+
client_credential_key,
|
215
|
+
client_credential_secret
|
216
216
|
)
|
217
|
-
elsif !
|
218
|
-
|
217
|
+
elsif !client_credential_key && !client_credential_secret
|
218
|
+
nil
|
219
219
|
else
|
220
220
|
raise ArgumentError,
|
221
|
-
|
221
|
+
"The client credential key and secret must be set."
|
222
222
|
end
|
223
223
|
end
|
224
|
-
|
224
|
+
alias consumer_token client_credential
|
225
225
|
|
226
226
|
##
|
227
227
|
# Sets the client credential for this client.
|
228
228
|
#
|
229
229
|
# @param [Signet::OAuth1::Credential] new_client_credential
|
230
230
|
# The client credentials.
|
231
|
-
def client_credential=
|
232
|
-
if new_client_credential
|
233
|
-
|
231
|
+
def client_credential= new_client_credential
|
232
|
+
if !new_client_credential.nil?
|
233
|
+
unless new_client_credential.is_a? ::Signet::OAuth1::Credential
|
234
234
|
raise TypeError,
|
235
|
-
|
236
|
-
|
235
|
+
"Expected Signet::OAuth1::Credential, " \
|
236
|
+
"got #{new_client_credential.class}."
|
237
237
|
end
|
238
238
|
@client_credential_key = new_client_credential.key
|
239
239
|
@client_credential_secret = new_client_credential.secret
|
@@ -242,27 +242,27 @@ module Signet
|
|
242
242
|
@client_credential_secret = nil
|
243
243
|
end
|
244
244
|
end
|
245
|
-
|
245
|
+
alias consumer_token= client_credential=
|
246
246
|
|
247
247
|
##
|
248
248
|
# Returns the client credential key for this client.
|
249
249
|
#
|
250
250
|
# @return [String] The client credential key.
|
251
251
|
def client_credential_key
|
252
|
-
|
252
|
+
@client_credential_key
|
253
253
|
end
|
254
|
-
|
254
|
+
alias consumer_key client_credential_key
|
255
255
|
|
256
256
|
##
|
257
257
|
# Sets the client credential key for this client.
|
258
258
|
#
|
259
259
|
# @param [String, #to_str] new_client_credential_key
|
260
260
|
# The client credential key.
|
261
|
-
def client_credential_key=
|
262
|
-
if new_client_credential_key
|
263
|
-
|
261
|
+
def client_credential_key= new_client_credential_key
|
262
|
+
if !new_client_credential_key.nil?
|
263
|
+
unless new_client_credential_key.respond_to? :to_str
|
264
264
|
raise TypeError,
|
265
|
-
|
265
|
+
"Can't convert #{new_client_credential_key.class} into String."
|
266
266
|
end
|
267
267
|
new_client_credential_key = new_client_credential_key.to_str
|
268
268
|
@client_credential_key = new_client_credential_key
|
@@ -270,28 +270,28 @@ module Signet
|
|
270
270
|
@client_credential_key = nil
|
271
271
|
end
|
272
272
|
end
|
273
|
-
|
273
|
+
alias consumer_key= client_credential_key=
|
274
274
|
|
275
275
|
##
|
276
276
|
# Returns the client credential secret for this client.
|
277
277
|
#
|
278
278
|
# @return [String] The client credential secret.
|
279
279
|
def client_credential_secret
|
280
|
-
|
280
|
+
@client_credential_secret
|
281
281
|
end
|
282
|
-
|
282
|
+
alias consumer_secret client_credential_secret
|
283
283
|
|
284
284
|
##
|
285
285
|
# Sets the client credential secret for this client.
|
286
286
|
#
|
287
287
|
# @param [String, #to_str] new_client_credential_secret
|
288
288
|
# The client credential secret.
|
289
|
-
def client_credential_secret=
|
290
|
-
if new_client_credential_secret
|
291
|
-
|
289
|
+
def client_credential_secret= new_client_credential_secret
|
290
|
+
if !new_client_credential_secret.nil?
|
291
|
+
unless new_client_credential_secret.respond_to? :to_str
|
292
292
|
raise TypeError,
|
293
|
-
|
294
|
-
|
293
|
+
"Can't convert #{new_client_credential_secret.class} " \
|
294
|
+
"into String."
|
295
295
|
end
|
296
296
|
new_client_credential_secret = new_client_credential_secret.to_str
|
297
297
|
@client_credential_secret = new_client_credential_secret
|
@@ -299,39 +299,39 @@ module Signet
|
|
299
299
|
@client_credential_secret = nil
|
300
300
|
end
|
301
301
|
end
|
302
|
-
|
302
|
+
alias consumer_secret= client_credential_secret=
|
303
303
|
|
304
304
|
##
|
305
305
|
# Returns the temporary credential for this client.
|
306
306
|
#
|
307
307
|
# @return [Signet::OAuth1::Credential] The temporary credentials.
|
308
308
|
def temporary_credential
|
309
|
-
if
|
310
|
-
|
311
|
-
|
312
|
-
|
309
|
+
if temporary_credential_key && temporary_credential_secret
|
310
|
+
::Signet::OAuth1::Credential.new(
|
311
|
+
temporary_credential_key,
|
312
|
+
temporary_credential_secret
|
313
313
|
)
|
314
|
-
elsif !
|
315
|
-
|
316
|
-
|
314
|
+
elsif !temporary_credential_key &&
|
315
|
+
!temporary_credential_secret
|
316
|
+
nil
|
317
317
|
else
|
318
318
|
raise ArgumentError,
|
319
|
-
|
319
|
+
"The temporary credential key and secret must be set."
|
320
320
|
end
|
321
321
|
end
|
322
|
-
|
322
|
+
alias request_token temporary_credential
|
323
323
|
|
324
324
|
##
|
325
325
|
# Sets the temporary credential for this client.
|
326
326
|
#
|
327
327
|
# @param [Signet::OAuth1::Credential] new_temporary_credential
|
328
328
|
# The temporary credentials.
|
329
|
-
def temporary_credential=
|
330
|
-
if new_temporary_credential
|
331
|
-
|
329
|
+
def temporary_credential= new_temporary_credential
|
330
|
+
if !new_temporary_credential.nil?
|
331
|
+
unless new_temporary_credential.is_a? ::Signet::OAuth1::Credential
|
332
332
|
raise TypeError,
|
333
|
-
|
334
|
-
|
333
|
+
"Expected Signet::OAuth1::Credential, " \
|
334
|
+
"got #{new_temporary_credential.class}."
|
335
335
|
end
|
336
336
|
@temporary_credential_key = new_temporary_credential.key
|
337
337
|
@temporary_credential_secret = new_temporary_credential.secret
|
@@ -340,28 +340,28 @@ module Signet
|
|
340
340
|
@temporary_credential_secret = nil
|
341
341
|
end
|
342
342
|
end
|
343
|
-
|
343
|
+
alias request_token= temporary_credential=
|
344
344
|
|
345
345
|
##
|
346
346
|
# Returns the temporary credential key for this client.
|
347
347
|
#
|
348
348
|
# @return [String] The temporary credential key.
|
349
349
|
def temporary_credential_key
|
350
|
-
|
350
|
+
@temporary_credential_key
|
351
351
|
end
|
352
|
-
|
352
|
+
alias request_token_key temporary_credential_key
|
353
353
|
|
354
354
|
##
|
355
355
|
# Sets the temporary credential key for this client.
|
356
356
|
#
|
357
357
|
# @param [String, #to_str] new_temporary_credential_key
|
358
358
|
# The temporary credential key.
|
359
|
-
def temporary_credential_key=
|
360
|
-
if new_temporary_credential_key
|
361
|
-
|
359
|
+
def temporary_credential_key= new_temporary_credential_key
|
360
|
+
if !new_temporary_credential_key.nil?
|
361
|
+
unless new_temporary_credential_key.respond_to? :to_str
|
362
362
|
raise TypeError,
|
363
|
-
|
364
|
-
|
363
|
+
"Can't convert #{new_temporary_credential_key.class} " \
|
364
|
+
"into String."
|
365
365
|
end
|
366
366
|
new_temporary_credential_key = new_temporary_credential_key.to_str
|
367
367
|
@temporary_credential_key = new_temporary_credential_key
|
@@ -369,28 +369,28 @@ module Signet
|
|
369
369
|
@temporary_credential_key = nil
|
370
370
|
end
|
371
371
|
end
|
372
|
-
|
372
|
+
alias request_token_key= temporary_credential_key=
|
373
373
|
|
374
374
|
##
|
375
375
|
# Returns the temporary credential secret for this client.
|
376
376
|
#
|
377
377
|
# @return [String] The temporary credential secret.
|
378
378
|
def temporary_credential_secret
|
379
|
-
|
379
|
+
@temporary_credential_secret
|
380
380
|
end
|
381
|
-
|
381
|
+
alias request_token_secret temporary_credential_secret
|
382
382
|
|
383
383
|
##
|
384
384
|
# Sets the temporary credential secret for this client.
|
385
385
|
#
|
386
386
|
# @param [String, #to_str] new_temporary_credential_secret
|
387
387
|
# The temporary credential secret.
|
388
|
-
def temporary_credential_secret=
|
389
|
-
if new_temporary_credential_secret
|
390
|
-
|
388
|
+
def temporary_credential_secret= new_temporary_credential_secret
|
389
|
+
if !new_temporary_credential_secret.nil?
|
390
|
+
unless new_temporary_credential_secret.respond_to? :to_str
|
391
391
|
raise TypeError,
|
392
|
-
|
393
|
-
|
392
|
+
"Can't convert #{new_temporary_credential_secret.class} " \
|
393
|
+
"into String."
|
394
394
|
end
|
395
395
|
new_temporary_credential_secret =
|
396
396
|
new_temporary_credential_secret.to_str
|
@@ -399,39 +399,39 @@ module Signet
|
|
399
399
|
@temporary_credential_secret = nil
|
400
400
|
end
|
401
401
|
end
|
402
|
-
|
402
|
+
alias request_token_secret= temporary_credential_secret=
|
403
403
|
|
404
404
|
##
|
405
405
|
# Returns the token credential for this client.
|
406
406
|
#
|
407
407
|
# @return [Signet::OAuth1::Credential] The token credentials.
|
408
408
|
def token_credential
|
409
|
-
if
|
410
|
-
|
411
|
-
|
412
|
-
|
409
|
+
if token_credential_key && token_credential_secret
|
410
|
+
::Signet::OAuth1::Credential.new(
|
411
|
+
token_credential_key,
|
412
|
+
token_credential_secret
|
413
413
|
)
|
414
|
-
elsif !
|
415
|
-
|
416
|
-
|
414
|
+
elsif !token_credential_key &&
|
415
|
+
!token_credential_secret
|
416
|
+
nil
|
417
417
|
else
|
418
418
|
raise ArgumentError,
|
419
|
-
|
419
|
+
"The token credential key and secret must be set."
|
420
420
|
end
|
421
421
|
end
|
422
|
-
|
422
|
+
alias access_token token_credential
|
423
423
|
|
424
424
|
##
|
425
425
|
# Sets the token credential for this client.
|
426
426
|
#
|
427
427
|
# @param [Signet::OAuth1::Credential] new_token_credential
|
428
428
|
# The token credentials.
|
429
|
-
def token_credential=
|
430
|
-
if new_token_credential
|
431
|
-
|
429
|
+
def token_credential= new_token_credential
|
430
|
+
if !new_token_credential.nil?
|
431
|
+
unless new_token_credential.is_a? ::Signet::OAuth1::Credential
|
432
432
|
raise TypeError,
|
433
|
-
|
434
|
-
|
433
|
+
"Expected Signet::OAuth1::Credential, " \
|
434
|
+
"got #{new_token_credential.class}."
|
435
435
|
end
|
436
436
|
@token_credential_key = new_token_credential.key
|
437
437
|
@token_credential_secret = new_token_credential.secret
|
@@ -440,28 +440,28 @@ module Signet
|
|
440
440
|
@token_credential_secret = nil
|
441
441
|
end
|
442
442
|
end
|
443
|
-
|
443
|
+
alias access_token= token_credential=
|
444
444
|
|
445
445
|
##
|
446
446
|
# Returns the token credential key for this client.
|
447
447
|
#
|
448
448
|
# @return [String] The token credential key.
|
449
449
|
def token_credential_key
|
450
|
-
|
450
|
+
@token_credential_key
|
451
451
|
end
|
452
|
-
|
452
|
+
alias access_token_key token_credential_key
|
453
453
|
|
454
454
|
##
|
455
455
|
# Sets the token credential key for this client.
|
456
456
|
#
|
457
457
|
# @param [String, #to_str] new_token_credential_key
|
458
458
|
# The token credential key.
|
459
|
-
def token_credential_key=
|
460
|
-
if new_token_credential_key
|
461
|
-
|
459
|
+
def token_credential_key= new_token_credential_key
|
460
|
+
if !new_token_credential_key.nil?
|
461
|
+
unless new_token_credential_key.respond_to? :to_str
|
462
462
|
raise TypeError,
|
463
|
-
|
464
|
-
|
463
|
+
"Can't convert #{new_token_credential_key.class} " \
|
464
|
+
"into String."
|
465
465
|
end
|
466
466
|
new_token_credential_key = new_token_credential_key.to_str
|
467
467
|
@token_credential_key = new_token_credential_key
|
@@ -469,28 +469,28 @@ module Signet
|
|
469
469
|
@token_credential_key = nil
|
470
470
|
end
|
471
471
|
end
|
472
|
-
|
472
|
+
alias access_token_key= token_credential_key=
|
473
473
|
|
474
474
|
##
|
475
475
|
# Returns the token credential secret for this client.
|
476
476
|
#
|
477
477
|
# @return [String] The token credential secret.
|
478
478
|
def token_credential_secret
|
479
|
-
|
479
|
+
@token_credential_secret
|
480
480
|
end
|
481
|
-
|
481
|
+
alias access_token_secret token_credential_secret
|
482
482
|
|
483
483
|
##
|
484
484
|
# Sets the token credential secret for this client.
|
485
485
|
#
|
486
486
|
# @param [String, #to_str] new_token_credential_secret
|
487
487
|
# The token credential secret.
|
488
|
-
def token_credential_secret=
|
489
|
-
if new_token_credential_secret
|
490
|
-
|
488
|
+
def token_credential_secret= new_token_credential_secret
|
489
|
+
if !new_token_credential_secret.nil?
|
490
|
+
unless new_token_credential_secret.respond_to? :to_str
|
491
491
|
raise TypeError,
|
492
|
-
|
493
|
-
|
492
|
+
"Can't convert #{new_token_credential_secret.class} " \
|
493
|
+
"into String."
|
494
494
|
end
|
495
495
|
new_token_credential_secret =
|
496
496
|
new_token_credential_secret.to_str
|
@@ -499,14 +499,14 @@ module Signet
|
|
499
499
|
@token_credential_secret = nil
|
500
500
|
end
|
501
501
|
end
|
502
|
-
|
502
|
+
alias access_token_secret= token_credential_secret=
|
503
503
|
|
504
504
|
##
|
505
505
|
# Returns the callback for this client.
|
506
506
|
#
|
507
507
|
# @return [String] The OAuth callback.
|
508
508
|
def callback
|
509
|
-
|
509
|
+
@callback || ::Signet::OAuth1::OUT_OF_BAND
|
510
510
|
end
|
511
511
|
|
512
512
|
##
|
@@ -514,11 +514,11 @@ module Signet
|
|
514
514
|
#
|
515
515
|
# @param [String, #to_str] new_callback
|
516
516
|
# The OAuth callback.
|
517
|
-
def callback=
|
518
|
-
if new_callback
|
519
|
-
|
517
|
+
def callback= new_callback
|
518
|
+
if !new_callback.nil?
|
519
|
+
unless new_callback.respond_to? :to_str
|
520
520
|
raise TypeError,
|
521
|
-
|
521
|
+
"Can't convert #{new_callback.class} into String."
|
522
522
|
end
|
523
523
|
new_callback = new_callback.to_str
|
524
524
|
@callback = new_callback
|
@@ -533,7 +533,7 @@ module Signet
|
|
533
533
|
# @return [TrueClass, FalseClass]
|
534
534
|
# <code>true</code> for two-legged mode, <code>false</code> otherwise.
|
535
535
|
def two_legged
|
536
|
-
|
536
|
+
@two_legged ||= false
|
537
537
|
end
|
538
538
|
|
539
539
|
##
|
@@ -541,10 +541,10 @@ module Signet
|
|
541
541
|
#
|
542
542
|
# @param [TrueClass, FalseClass] new_two_legged
|
543
543
|
# <code>true</code> for two-legged mode, <code>false</code> otherwise.
|
544
|
-
def two_legged=
|
544
|
+
def two_legged= new_two_legged
|
545
545
|
if new_two_legged != true && new_two_legged != false
|
546
546
|
raise TypeError,
|
547
|
-
|
547
|
+
"Expected true or false, got #{new_two_legged.class}."
|
548
548
|
else
|
549
549
|
@two_legged = new_two_legged
|
550
550
|
end
|
@@ -557,20 +557,22 @@ module Signet
|
|
557
557
|
#
|
558
558
|
# @return [String] A serialized JSON representation of the client.
|
559
559
|
def to_json
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
560
|
+
MultiJson.dump(
|
561
|
+
"temporary_credential_uri" => temporary_credential_uri,
|
562
|
+
"authorization_uri" => authorization_uri,
|
563
|
+
"token_credential_uri" => token_credential_uri,
|
564
|
+
"callback" => callback,
|
565
|
+
"two_legged" => two_legged,
|
566
|
+
"client_credential_key" => client_credential_key,
|
567
|
+
"client_credential_secret" => client_credential_secret,
|
568
|
+
"temporary_credential_key" => temporary_credential_key,
|
569
|
+
"temporary_credential_secret" => temporary_credential_secret,
|
570
|
+
"token_credential_key" => token_credential_key,
|
571
|
+
"token_credential_secret" => token_credential_secret
|
572
|
+
)
|
573
573
|
end
|
574
|
+
# rubocop:disable Metrics/AbcSize
|
575
|
+
# rubocop:disable Metrics/MethodLength
|
574
576
|
|
575
577
|
##
|
576
578
|
# Generates a request for temporary credentials.
|
@@ -585,60 +587,57 @@ module Signet
|
|
585
587
|
# The Authorization realm. See RFC 2617.
|
586
588
|
#
|
587
589
|
# @return [Array] The request object.
|
588
|
-
def generate_temporary_credential_request
|
590
|
+
def generate_temporary_credential_request options = {}
|
589
591
|
verifications = {
|
590
|
-
:
|
591
|
-
:
|
592
|
-
:
|
592
|
+
temporary_credential_uri: "Temporary credentials URI",
|
593
|
+
client_credential_key: "Client credential key",
|
594
|
+
client_credential_secret: "Client credential secret"
|
593
595
|
}
|
594
596
|
# Make sure all required state is set
|
595
597
|
verifications.each do |(key, _value)|
|
596
|
-
unless
|
597
|
-
raise ArgumentError, "#{key} was not set."
|
598
|
-
end
|
598
|
+
raise ArgumentError, "#{key} was not set." unless send key
|
599
599
|
end
|
600
600
|
options = {
|
601
|
-
:
|
602
|
-
:
|
603
|
-
:
|
604
|
-
:
|
601
|
+
signature_method: "HMAC-SHA1",
|
602
|
+
additional_parameters: [],
|
603
|
+
realm: nil,
|
604
|
+
connection: Faraday.default_connection
|
605
605
|
}.merge(options)
|
606
606
|
method = :post
|
607
607
|
parameters = ::Signet::OAuth1.unsigned_temporary_credential_parameters(
|
608
|
-
:
|
609
|
-
:callback
|
610
|
-
:
|
611
|
-
:
|
608
|
+
client_credential_key: client_credential_key,
|
609
|
+
callback: callback,
|
610
|
+
signature_method: options[:signature_method],
|
611
|
+
additional_parameters: options[:additional_parameters]
|
612
612
|
)
|
613
613
|
signature = ::Signet::OAuth1.sign_parameters(
|
614
614
|
method,
|
615
|
-
|
615
|
+
temporary_credential_uri,
|
616
616
|
parameters,
|
617
|
-
|
617
|
+
client_credential_secret
|
618
618
|
)
|
619
|
-
parameters << [
|
619
|
+
parameters << ["oauth_signature", signature]
|
620
620
|
authorization_header = [
|
621
|
-
|
621
|
+
"Authorization",
|
622
622
|
::Signet::OAuth1.generate_authorization_header(
|
623
623
|
parameters, options[:realm]
|
624
624
|
)
|
625
625
|
]
|
626
626
|
headers = [authorization_header]
|
627
627
|
if method == :post
|
628
|
-
headers << [
|
629
|
-
headers << [
|
628
|
+
headers << ["Content-Type", "application/x-www-form-urlencoded"]
|
629
|
+
headers << ["Content-Length", "0"]
|
630
630
|
end
|
631
|
-
|
631
|
+
options[:connection].build_request method.to_s.downcase.to_sym do |req|
|
632
632
|
req.url(Addressable::URI.parse(
|
633
|
-
|
633
|
+
temporary_credential_uri.to_str
|
634
634
|
).normalize.to_s)
|
635
|
-
req.headers = Faraday::Utils::Headers.new
|
635
|
+
req.headers = Faraday::Utils::Headers.new headers
|
636
636
|
end
|
637
637
|
end
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
)
|
638
|
+
# rubocop:enable Metrics/AbcSize
|
639
|
+
# rubocop:enable Metrics/MethodLength
|
640
|
+
alias generate_request_token_request generate_temporary_credential_request
|
642
641
|
|
643
642
|
##
|
644
643
|
# Transmits a request for a temporary credential. This method does not
|
@@ -664,36 +663,24 @@ module Signet
|
|
664
663
|
# :scope => 'https://mail.google.com/mail/feed/atom'
|
665
664
|
# }
|
666
665
|
# )
|
667
|
-
def fetch_temporary_credential
|
666
|
+
def fetch_temporary_credential options = {}
|
668
667
|
options[:connection] ||= Faraday.default_connection
|
669
|
-
request =
|
670
|
-
request_env = request.to_env
|
668
|
+
request = generate_temporary_credential_request options
|
669
|
+
request_env = request.to_env options[:connection]
|
671
670
|
request_env[:request] ||= request
|
672
|
-
response = options[:connection].app.call
|
673
|
-
if response.status.to_i == 200
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
else
|
684
|
-
message = "Unexpected status code: #{response.status}."
|
685
|
-
if response.body.to_s.strip.length > 0
|
686
|
-
message += " Server message:\n#{response.body.to_s.strip}"
|
687
|
-
end
|
688
|
-
raise ::Signet::AuthorizationError.new(
|
689
|
-
message, :request => request, :response => response
|
690
|
-
)
|
691
|
-
end
|
671
|
+
response = options[:connection].app.call request_env
|
672
|
+
return ::Signet::OAuth1.parse_form_encoded_credentials response.body if response.status.to_i == 200
|
673
|
+
message = if [400, 401, 403].include? response.status.to_i
|
674
|
+
"Authorization failed."
|
675
|
+
else
|
676
|
+
"Unexpected status code: #{response.status}."
|
677
|
+
end
|
678
|
+
message += " Server message:\n#{response.body.to_s.strip}" unless response.body.to_s.strip.empty?
|
679
|
+
raise ::Signet::AuthorizationError.new(
|
680
|
+
message, request: request, response: response
|
681
|
+
)
|
692
682
|
end
|
693
|
-
|
694
|
-
:fetch_request_token,
|
695
|
-
:fetch_temporary_credential
|
696
|
-
)
|
683
|
+
alias fetch_request_token fetch_temporary_credential
|
697
684
|
|
698
685
|
##
|
699
686
|
# Transmits a request for a temporary credential. This method updates
|
@@ -717,14 +704,13 @@ module Signet
|
|
717
704
|
# client.fetch_temporary_credential!(:additional_parameters => {
|
718
705
|
# :scope => 'https://mail.google.com/mail/feed/atom'
|
719
706
|
# })
|
720
|
-
def fetch_temporary_credential!
|
721
|
-
credential =
|
707
|
+
def fetch_temporary_credential! options = {}
|
708
|
+
credential = fetch_temporary_credential options
|
722
709
|
self.temporary_credential = credential
|
723
710
|
end
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
)
|
711
|
+
alias fetch_request_token! fetch_temporary_credential!
|
712
|
+
# rubocop:disable Metrics/AbcSize
|
713
|
+
# rubocop:disable Metrics/MethodLength
|
728
714
|
|
729
715
|
##
|
730
716
|
# Generates a request for token credentials.
|
@@ -739,63 +725,59 @@ module Signet
|
|
739
725
|
# The Authorization realm. See RFC 2617.
|
740
726
|
#
|
741
727
|
# @return [Array] The request object.
|
742
|
-
def generate_token_credential_request
|
728
|
+
def generate_token_credential_request options = {}
|
743
729
|
verifications = {
|
744
|
-
:
|
745
|
-
:
|
746
|
-
:
|
747
|
-
:
|
748
|
-
:
|
730
|
+
token_credential_uri: "Token credentials URI",
|
731
|
+
client_credential_key: "Client credential key",
|
732
|
+
client_credential_secret: "Client credential secret",
|
733
|
+
temporary_credential_key: "Temporary credential key",
|
734
|
+
temporary_credential_secret: "Temporary credential secret"
|
749
735
|
}
|
750
736
|
# Make sure all required state is set
|
751
737
|
verifications.each do |(key, _value)|
|
752
|
-
unless
|
753
|
-
raise ArgumentError, "#{key} was not set."
|
754
|
-
end
|
738
|
+
raise ArgumentError, "#{key} was not set." unless send key
|
755
739
|
end
|
756
740
|
options = {
|
757
|
-
:
|
758
|
-
:
|
759
|
-
:
|
741
|
+
signature_method: "HMAC-SHA1",
|
742
|
+
realm: nil,
|
743
|
+
connection: Faraday.default_connection
|
760
744
|
}.merge(options)
|
761
745
|
method = :post
|
762
746
|
parameters = ::Signet::OAuth1.unsigned_token_credential_parameters(
|
763
|
-
:client_credential_key
|
764
|
-
:
|
765
|
-
:
|
766
|
-
:
|
747
|
+
client_credential_key: client_credential_key,
|
748
|
+
temporary_credential_key: temporary_credential_key,
|
749
|
+
signature_method: options[:signature_method],
|
750
|
+
verifier: options[:verifier]
|
767
751
|
)
|
768
752
|
signature = ::Signet::OAuth1.sign_parameters(
|
769
753
|
method,
|
770
|
-
|
754
|
+
token_credential_uri,
|
771
755
|
parameters,
|
772
|
-
|
773
|
-
|
756
|
+
client_credential_secret,
|
757
|
+
temporary_credential_secret
|
774
758
|
)
|
775
|
-
parameters << [
|
759
|
+
parameters << ["oauth_signature", signature]
|
776
760
|
authorization_header = [
|
777
|
-
|
761
|
+
"Authorization",
|
778
762
|
::Signet::OAuth1.generate_authorization_header(
|
779
763
|
parameters, options[:realm]
|
780
764
|
)
|
781
765
|
]
|
782
766
|
headers = [authorization_header]
|
783
|
-
headers << [
|
767
|
+
headers << ["Cache-Control", "no-store"]
|
784
768
|
if method == :post
|
785
|
-
headers << [
|
786
|
-
headers << [
|
769
|
+
headers << ["Content-Type", "application/x-www-form-urlencoded"]
|
770
|
+
headers << ["Content-Length", "0"]
|
787
771
|
end
|
788
|
-
|
772
|
+
options[:connection].build_request method.to_s.downcase.to_sym do |req|
|
789
773
|
req.url(Addressable::URI.parse(
|
790
|
-
|
774
|
+
token_credential_uri.to_str
|
791
775
|
).normalize.to_s)
|
792
|
-
req.headers = Faraday::Utils::Headers.new
|
776
|
+
req.headers = Faraday::Utils::Headers.new headers
|
793
777
|
end
|
794
778
|
end
|
795
|
-
|
796
|
-
|
797
|
-
:generate_token_credential_request
|
798
|
-
)
|
779
|
+
# rubocop:enable Metrics/MethodLength
|
780
|
+
alias generate_access_token_request generate_token_credential_request
|
799
781
|
|
800
782
|
##
|
801
783
|
# Transmits a request for a token credential. This method does not
|
@@ -819,36 +801,25 @@ module Signet
|
|
819
801
|
# token_credential = client.fetch_token_credential(
|
820
802
|
# :verifier => '12345'
|
821
803
|
# )
|
822
|
-
def fetch_token_credential
|
804
|
+
def fetch_token_credential options = {}
|
823
805
|
options[:connection] ||= Faraday.default_connection
|
824
|
-
request =
|
825
|
-
request_env = request.to_env
|
806
|
+
request = generate_token_credential_request options
|
807
|
+
request_env = request.to_env options[:connection]
|
826
808
|
request_env[:request] ||= request
|
827
|
-
response = options[:connection].app.call
|
828
|
-
if response.status.to_i == 200
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
else
|
839
|
-
message = "Unexpected status code: #{response.status}."
|
840
|
-
if response.body.to_s.strip.length > 0
|
841
|
-
message += " Server message:\n#{response.body.to_s.strip}"
|
842
|
-
end
|
843
|
-
raise ::Signet::AuthorizationError.new(
|
844
|
-
message, :request => request, :response => response
|
845
|
-
)
|
846
|
-
end
|
809
|
+
response = options[:connection].app.call request_env
|
810
|
+
return ::Signet::OAuth1.parse_form_encoded_credentials response.body if response.status.to_i == 200
|
811
|
+
message = if [400, 401, 403].include? response.status.to_i
|
812
|
+
"Authorization failed."
|
813
|
+
else
|
814
|
+
"Unexpected status code: #{response.status}."
|
815
|
+
end
|
816
|
+
message += " Server message:\n#{response.body.to_s.strip}" unless response.body.to_s.strip.empty?
|
817
|
+
raise ::Signet::AuthorizationError.new(
|
818
|
+
message, request: request, response: response
|
819
|
+
)
|
847
820
|
end
|
848
|
-
|
849
|
-
|
850
|
-
:fetch_token_credential
|
851
|
-
)
|
821
|
+
# rubocop:enable Metrics/AbcSize
|
822
|
+
alias fetch_access_token fetch_token_credential
|
852
823
|
|
853
824
|
##
|
854
825
|
# Transmits a request for a token credential. This method updates
|
@@ -870,14 +841,15 @@ module Signet
|
|
870
841
|
#
|
871
842
|
# @example
|
872
843
|
# client.fetch_token_credential!(:verifier => '12345')
|
873
|
-
def fetch_token_credential!
|
874
|
-
credential =
|
844
|
+
def fetch_token_credential! options = {}
|
845
|
+
credential = fetch_token_credential options
|
875
846
|
self.token_credential = credential
|
876
847
|
end
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
848
|
+
alias fetch_access_token! fetch_token_credential!
|
849
|
+
# rubocop:disable Metrics/AbcSize
|
850
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
851
|
+
# rubocop:disable Metrics/MethodLength
|
852
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
881
853
|
|
882
854
|
##
|
883
855
|
# Generates an authenticated request for protected resources.
|
@@ -900,91 +872,85 @@ module Signet
|
|
900
872
|
# The Authorization realm. See RFC 2617.
|
901
873
|
#
|
902
874
|
# @return [Array] The request object.
|
903
|
-
def generate_authenticated_request
|
875
|
+
def generate_authenticated_request options = {}
|
904
876
|
verifications = {
|
905
|
-
:
|
906
|
-
:
|
877
|
+
client_credential_key: "Client credential key",
|
878
|
+
client_credential_secret: "Client credential secret"
|
907
879
|
}
|
908
|
-
unless
|
880
|
+
unless two_legged
|
909
881
|
verifications.update(
|
910
|
-
:
|
911
|
-
:
|
882
|
+
token_credential_key: "Token credential key",
|
883
|
+
token_credential_secret: "Token credential secret"
|
912
884
|
)
|
913
885
|
end
|
914
886
|
# Make sure all required state is set
|
915
887
|
verifications.each do |(key, _value)|
|
916
|
-
unless
|
917
|
-
raise ArgumentError, "#{key} was not set."
|
918
|
-
end
|
888
|
+
raise ArgumentError, "#{key} was not set." unless send key
|
919
889
|
end
|
920
890
|
options = {
|
921
|
-
:
|
922
|
-
:
|
923
|
-
:
|
891
|
+
signature_method: "HMAC-SHA1",
|
892
|
+
realm: nil,
|
893
|
+
connection: Faraday.default_connection
|
924
894
|
}.merge(options)
|
925
895
|
|
926
|
-
if options[:request].
|
896
|
+
if options[:request].is_a? Faraday::Request
|
927
897
|
request = options[:request]
|
928
898
|
else
|
929
|
-
if options[:request].
|
899
|
+
if options[:request].is_a? Array
|
930
900
|
method, uri, headers, body = options[:request]
|
931
901
|
else
|
932
902
|
method = options[:method] || :get
|
933
903
|
uri = options[:uri]
|
934
904
|
headers = options[:headers] || []
|
935
|
-
body = options[:body] ||
|
905
|
+
body = options[:body] || ""
|
936
906
|
end
|
937
|
-
headers = headers.to_a if headers.
|
907
|
+
headers = headers.to_a if headers.is_a? Hash
|
938
908
|
request_components = {
|
939
|
-
:method
|
940
|
-
:uri
|
941
|
-
:
|
942
|
-
:body
|
909
|
+
method: method,
|
910
|
+
uri: uri,
|
911
|
+
headers: headers,
|
912
|
+
body: body
|
943
913
|
}
|
944
914
|
# Verify that we have all pieces required to return an HTTP request
|
945
915
|
request_components.each do |(key, value)|
|
946
|
-
unless value
|
947
|
-
raise ArgumentError, "Missing :#{key} parameter."
|
948
|
-
end
|
916
|
+
raise ArgumentError, "Missing :#{key} parameter." unless value
|
949
917
|
end
|
950
|
-
if !body.
|
918
|
+
if !body.is_a?(String) && body.respond_to?(:each)
|
951
919
|
# Just in case we get a chunked body
|
952
920
|
merged_body = StringIO.new
|
953
921
|
body.each do |chunk|
|
954
|
-
merged_body.write
|
922
|
+
merged_body.write chunk
|
955
923
|
end
|
956
924
|
body = merged_body.string
|
957
925
|
end
|
958
|
-
|
959
|
-
raise TypeError, "Expected String, got #{body.class}."
|
960
|
-
end
|
926
|
+
raise TypeError, "Expected String, got #{body.class}." unless body.is_a? String
|
961
927
|
method = method.to_s.downcase.to_sym
|
962
|
-
request = options[:connection].build_request
|
963
|
-
req.url
|
964
|
-
req.headers = Faraday::Utils::Headers.new
|
928
|
+
request = options[:connection].build_request method do |req|
|
929
|
+
req.url Addressable::URI.parse(uri).normalize.to_s
|
930
|
+
req.headers = Faraday::Utils::Headers.new headers
|
965
931
|
req.body = body
|
966
932
|
end
|
967
933
|
end
|
968
934
|
|
969
935
|
parameters = ::Signet::OAuth1.unsigned_resource_parameters(
|
970
|
-
:
|
971
|
-
:token_credential_key
|
972
|
-
:
|
973
|
-
:two_legged
|
936
|
+
client_credential_key: client_credential_key,
|
937
|
+
token_credential_key: token_credential_key,
|
938
|
+
signature_method: options[:signature_method],
|
939
|
+
two_legged: two_legged
|
974
940
|
)
|
975
941
|
|
976
|
-
env = request.to_env
|
942
|
+
env = request.to_env options[:connection]
|
977
943
|
|
978
|
-
content_type = request[
|
979
|
-
content_type = content_type.split(
|
980
|
-
if request.method == :post && content_type ==
|
944
|
+
content_type = request["Content-Type"].to_s
|
945
|
+
content_type = content_type.split(";", 2).first if content_type.index ";"
|
946
|
+
if request.method == :post && content_type == "application/x-www-form-urlencoded"
|
981
947
|
# Serializes the body in case a hash/array was passed. Noop if already string like
|
982
|
-
encoder = Faraday::Request::UrlEncoded.new(
|
983
|
-
encoder.call
|
948
|
+
encoder = Faraday::Request::UrlEncoded.new(->(_env) {})
|
949
|
+
encoder.call env
|
984
950
|
request.body = env[:body]
|
985
951
|
|
986
|
-
post_parameters = Addressable::URI.form_unencode
|
987
|
-
parameters = parameters.concat
|
952
|
+
post_parameters = Addressable::URI.form_unencode env[:body]
|
953
|
+
parameters = parameters.concat post_parameters
|
988
954
|
end
|
989
955
|
|
990
956
|
# No need to attach URI query parameters, the .sign_parameters
|
@@ -993,16 +959,21 @@ module Signet
|
|
993
959
|
env[:method],
|
994
960
|
env[:url],
|
995
961
|
parameters,
|
996
|
-
|
997
|
-
|
962
|
+
client_credential_secret,
|
963
|
+
token_credential_secret
|
998
964
|
)
|
999
965
|
|
1000
|
-
parameters << [
|
1001
|
-
request[
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
966
|
+
parameters << ["oauth_signature", signature]
|
967
|
+
request["Authorization"] = ::Signet::OAuth1.generate_authorization_header(
|
968
|
+
parameters, options[:realm]
|
969
|
+
)
|
970
|
+
request["Cache-Control"] = "no-store"
|
971
|
+
request
|
1005
972
|
end
|
973
|
+
# rubocop:enable Metrics/AbcSize
|
974
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
975
|
+
# rubocop:enable Metrics/MethodLength
|
976
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
1006
977
|
|
1007
978
|
##
|
1008
979
|
# Transmits a request for a protected resource.
|
@@ -1043,25 +1014,20 @@ module Signet
|
|
1043
1014
|
# )
|
1044
1015
|
#
|
1045
1016
|
# @return [Array] The response object.
|
1046
|
-
def fetch_protected_resource
|
1017
|
+
def fetch_protected_resource options = {}
|
1047
1018
|
options[:connection] ||= Faraday.default_connection
|
1048
|
-
request =
|
1049
|
-
request_env = request.to_env
|
1019
|
+
request = generate_authenticated_request options
|
1020
|
+
request_env = request.to_env options[:connection]
|
1050
1021
|
request_env[:request] ||= request
|
1051
|
-
response = options[:connection].app.call
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
message, :request => request, :response => response
|
1061
|
-
)
|
1062
|
-
else
|
1063
|
-
return response
|
1064
|
-
end
|
1022
|
+
response = options[:connection].app.call request_env
|
1023
|
+
return response unless response.status.to_i == 401
|
1024
|
+
# When accessing a protected resource, we only want to raise an
|
1025
|
+
# error for 401 responses.
|
1026
|
+
message = "Authorization failed."
|
1027
|
+
message += " Server message:\n#{response.body.to_s.strip}" unless response.body.to_s.strip.empty?
|
1028
|
+
raise ::Signet::AuthorizationError.new(
|
1029
|
+
message, request: request, response: response
|
1030
|
+
)
|
1065
1031
|
end
|
1066
1032
|
end
|
1067
1033
|
end
|