signet 0.16.1 → 0.18.0

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: 53569e11ad43433cd62b3d887bc959a632a835e6fa72ada936856967820e24df
4
- data.tar.gz: 30970162c79ed861a09a6424bb84822685a2f5413d9ac1c0b5172cad3fa8a197
3
+ metadata.gz: 430b4ec8945e95be77f454a8103b93cbaf6ec2e2ff5d8ea875a96686e5c877d0
4
+ data.tar.gz: 672370d6c1769532dc02b34f4c89a8c2aac7613bd5aab71e1f182e0ceba2ea0c
5
5
  SHA512:
6
- metadata.gz: e4d619adaec9829803ac0fbc1e6f3c13f6d2b03caa64252bc35d4df0bcd72b9ef995b3f1a157c5ab02e328c88ca0d74b25edefebbf08e7ab41361017a5d5fdd8
7
- data.tar.gz: ea2ed4ad72eace1d2ec0936a0243ca7ad07920cc9fee43a27f2c3f6de100370c60953a7842f6a416490e5bd93d7f17ff7771d7c7ef515fe8ad7ffcc4474547a1
6
+ metadata.gz: cdd439206b52e37418e88c8010df6943f3d826277e222c4444f2bf351d1787040cc14192346125d8935d7ff8ac167b2f93d849aa32bda81524be9c041196e857
7
+ data.tar.gz: 9fc07647d3c15cfbd6526baaa589ec7f6e09083c92a0a299e47b2e07937e593dec6df78638796160a110a68a30c453064d86e0fac0dba349807ac3316618dbef
data/CHANGELOG.md CHANGED
@@ -1,87 +1,91 @@
1
1
  # Release History
2
2
 
3
- ### [0.16.1](https://www.github.com/googleapis/signet/compare/signet/v0.16.0...signet/v0.16.1) (2022-02-24)
3
+ ### 0.18.0 (2023-09-01)
4
4
 
5
+ #### Features
5
6
 
6
- ### Bug Fixes
7
+ * Expose Granted Scopes while fetching credentials ([#230](https://github.com/googleapis/signet/issues/230))
7
8
 
8
- * Support Faraday 2 ([f1c6cc3](https://www.github.com/googleapis/signet/commit/f1c6cc373876ea84281fadf72d7041976f2bc133))
9
+ ### 0.17.0 (2022-06-23)
9
10
 
10
- ## [0.16.0](https://www.github.com/googleapis/signet/compare/signet/v0.15.0...signet/v0.16.0) (2021-09-03)
11
+ * Updated minimum Ruby version to 2.6
11
12
 
13
+ ### 0.16.1 (2022-02-24)
12
14
 
13
- ### Features
15
+ #### Bug Fixes
14
16
 
15
- * Support for fetching an access token with basic auth ([3c43e32](https://www.github.com/googleapis/signet/commit/3c43e3201d79b1e2303e672f3c07e060c5079423))
17
+ * Support Faraday 2
16
18
 
19
+ ### 0.16.0 (2021-09-03)
17
20
 
18
- ### Bug Fixes
21
+ #### Features
19
22
 
20
- * Remove extraneous files from the gem ([e515bb6](https://www.github.com/googleapis/signet/commit/e515bb627a64e32ec885412fed8b01eb73067ee0))
21
- * Require addressable 2.8 to remediate vulnerability ([9a2f899](https://www.github.com/googleapis/signet/commit/9a2f8996f522538c4bb7998535e2a50331d564fc))
23
+ * Support for fetching an access token with basic auth
22
24
 
23
- ## [0.15.0](https://www.github.com/googleapis/signet/compare/v0.14.1...v0.15.0) (2021-03-04)
25
+ #### Bug Fixes
24
26
 
27
+ * Remove extraneous files from the gem
28
+ * Require addressable 2.8 to remediate vulnerability
25
29
 
26
- ### Features
30
+ ### 0.15.0 (2021-03-04)
27
31
 
28
- * Drop support for Ruby 2.4 and add support for Ruby 3.0 ([bd6fe87](https://www.github.com/googleapis/signet/commit/bd6fe87948f8fc7702720dae651e82f4fd348b5d))
32
+ * Drop support for Ruby 2.4 and add support for Ruby 3.0
29
33
 
30
- ## 0.14.1 / 2021-01-27
34
+ ### 0.14.1 / 2021-01-27
31
35
 
32
36
  * Fix OAuth1 signature with duplicate query param names
33
37
 
34
- ## 0.14.0 / 2020-03-31
38
+ ### 0.14.0 / 2020-03-31
35
39
 
36
40
  * Support for fetching ID tokens from google oauth2 endpoint.
37
41
 
38
- ## 0.13.2 / 2020-03-25
42
+ ### 0.13.2 / 2020-03-25
39
43
 
40
44
  Rerelease of 0.13.1.
41
45
 
42
- ## 0.13.1 / 2020-03-24
46
+ ### 0.13.1 / 2020-03-24
43
47
 
44
48
  * Update github url
45
49
 
46
- ## 0.13.0 / 2020-02-24
50
+ ### 0.13.0 / 2020-02-24
47
51
 
48
52
  * Support Faraday 1.x
49
53
 
50
- ## 0.12.0 / 2019-10-08
54
+ ### 0.12.0 / 2019-10-08
51
55
 
52
56
  * This version now requires Ruby 2.4.
53
57
  * Support array values of the "aud" field.
54
58
  * Normalize the version constant to match related gems.
55
59
 
56
- ## 0.11.0 / 2018-10-08
60
+ ### 0.11.0 / 2018-10-08
57
61
 
58
62
  * Add constant time comparison for oauth signatures.
59
63
 
60
- ## 0.10.0 / 2018-09-21
64
+ ### 0.10.0 / 2018-09-21
61
65
 
62
66
  * Add UnexpectedStatusError class for http status errors that are not handled.
63
67
 
64
- ## 0.9.2 / 2018-09-12
68
+ ### 0.9.2 / 2018-09-12
65
69
 
66
70
  * Update issued_at correctly when it is set simultaneously with expires_in.
67
71
 
68
- ## 0.9.1 / 2018-08-29
72
+ ### 0.9.1 / 2018-08-29
69
73
 
70
74
  * Warn on EOL ruby versions.
71
75
  * Fix DateTime normalization.
72
76
 
73
- ## 0.9.0 / 2018-08-20
77
+ ### 0.9.0 / 2018-08-20
74
78
 
75
79
  * Add RemoteServerError class for 5xx level errors.
76
80
  * Allow to_json to be called with arguments
77
81
  * Expires_in now sets and reflects current expires_at value
78
82
  * Expires_within(0) now returns false when expires_at is nil.
79
83
 
80
- ## 0.8.1 / 2017-10-13
84
+ ### 0.8.1 / 2017-10-13
81
85
 
82
86
  * Restore support for Ruby 1.9.3
83
87
 
84
- ## 0.8.0 / 2017-10-12
88
+ ### 0.8.0 / 2017-10-12
85
89
 
86
90
  * Ensure the "expires_at" attribute is recalculated on refresh (chutzimir)
87
91
  * Fix warnings on Ruby 2.4 (koic)
@@ -89,20 +93,20 @@ Rerelease of 0.13.1.
89
93
  * Provide signature verification algorithm for compatibility with ruby-jwt 2.0 (jurriaan)
90
94
  * Signet::OAuth2::Client#decoded_id_token can take a keyfinder block (mvastola)
91
95
 
92
- ## 0.7.3 / 2016-06-20
96
+ ### 0.7.3 / 2016-06-20
93
97
 
94
98
  * Fix timestamp parsing on 32-bit systems
95
99
  * Fix expiration check when issue/expiry times are nil
96
100
 
97
- ## 0.7.2 / 2015-12-21
101
+ ### 0.7.2 / 2015-12-21
98
102
 
99
103
  * Don't assume Faraday form encoding middleware is present
100
104
 
101
- ## 0.7.1 / 2015-12-17
105
+ ### 0.7.1 / 2015-12-17
102
106
 
103
107
  * Fix an issue with date parsing
104
108
 
105
- ## 0.7 / 2015-12-06
109
+ ### 0.7 / 2015-12-06
106
110
 
107
111
  * No longer overwrite SSL environment variables.
108
112
  * Tighten up date & URL (de)serialization for OAuth2 client
@@ -111,7 +115,7 @@ Rerelease of 0.13.1.
111
115
  * Add expires_within(sec) method to oauth2 client to facilitate proactive
112
116
  refreshes
113
117
 
114
- ## 0.6.1 / 2015-06-08
118
+ ### 0.6.1 / 2015-06-08
115
119
 
116
120
  * Fix language warnings for unused & shadowed variables ((@blowmage)[])
117
121
  * Update SSL cert path for OSX ((@gambaroff)[])
@@ -119,14 +123,14 @@ Rerelease of 0.13.1.
119
123
  * Fix incorrect parameter name in OAuth2 client docs ((@samuelreh)[])
120
124
  * Fix symbolization of URL parameter keys ((@swifthand)[])
121
125
 
122
- ## 0.6.0 / 2014-12-05
126
+ ### 0.6.0 / 2014-12-05
123
127
 
124
128
  * Drop support for ruby versions < 1.9.3
125
129
  * Update gem dependencies and lock down versions tighter
126
130
  * Allow form encoded responses when exchanging OAuth 2 authorization codes
127
131
  * Normalize options keys for indifferent access
128
132
 
129
- ## 0.5.1 / 2014-06-08
133
+ ### 0.5.1 / 2014-06-08
130
134
 
131
135
  * Allow Hash objects to be used to initialize authorization URI
132
136
  * Added PLAINTEXT and RSA-SHA1 signature methods to OAuth 1 support
@@ -134,53 +138,53 @@ Rerelease of 0.13.1.
134
138
  * The `approval_prompt` option no longer defaults to `:force`
135
139
  * The `approval_prompt` and `prompt` are now mutually exclusive.
136
140
 
137
- ## 0.5.0 / 2013-05-31
141
+ ### 0.5.0 / 2013-05-31
138
142
 
139
143
  * Switched to faraday 0.9.0
140
144
  * Added `expires_at` option
141
145
 
142
- ## 0.4.5
146
+ ### 0.4.5
143
147
 
144
148
  * Minor documentation fixes
145
149
  * Allow postmessage as a valid redirect_uri in OAuth 2
146
150
 
147
- ## 0.4.4
151
+ ### 0.4.4
148
152
 
149
153
  * Add support for assertion profile
150
154
 
151
- ## 0.4.3
155
+ ### 0.4.3
152
156
 
153
157
  * Added method to clear credentials
154
158
 
155
- ## 0.4.2
159
+ ### 0.4.2
156
160
 
157
161
  * Backwards compatibility for MultiJson
158
162
 
159
- ## 0.4.1
163
+ ### 0.4.1
160
164
 
161
165
  * Updated Launchy dependency
162
166
 
163
- ## 0.4.0
167
+ ### 0.4.0
164
168
 
165
169
  * Added OAuth 1 server implementation
166
170
  * Updated Faraday dependency
167
171
 
168
- ## 0.3.4
172
+ ### 0.3.4
169
173
 
170
174
  * Attempts to auto-detect CA cert location
171
175
 
172
- ## 0.3.3
176
+ ### 0.3.3
173
177
 
174
178
  * Request objects no longer recreated during processing
175
179
  * Faraday middleware now supported
176
180
  * Streamed requests now supported
177
181
  * Fixed assertion profiles; client ID/secret omission no longer an error
178
182
 
179
- ## 0.3.2
183
+ ### 0.3.2
180
184
 
181
185
  * Added audience security check for ID tokens
182
186
 
183
- ## 0.3.1
187
+ ### 0.3.1
184
188
 
185
189
  * Fixed a warning while determining grant type
186
190
  * Removed requirement that a connection be supplied when authorizing requests
@@ -188,52 +192,52 @@ Rerelease of 0.13.1.
188
192
  * Fixed some documentation stuff around markdown formatting
189
193
  * Added support for Google Code wiki format output when generating docs
190
194
 
191
- ## 0.3.0
195
+ ### 0.3.0
192
196
 
193
197
  * Replaced httpadapter gem dependency with faraday
194
198
  * Replaced json gem dependency with multi_json
195
199
  * Updated to OAuth 2.0 draft 22
196
200
  * Complete test coverage
197
201
 
198
- ## 0.2.4
202
+ ### 0.2.4
199
203
 
200
204
  * Updated to incorporate changes to the Google OAuth endpoints
201
205
 
202
- ## 0.2.3
206
+ ### 0.2.3
203
207
 
204
208
  * Added support for JWT-formatted ID tokens.
205
209
  * Added :issued_at option to #update_token! method.
206
210
 
207
- ## 0.2.2
211
+ ### 0.2.2
208
212
 
209
213
  * Lowered requirements for json gem
210
214
 
211
- ## 0.2.1
215
+ ### 0.2.1
212
216
 
213
217
  * Updated to keep in sync with the new httpadapter changes
214
218
 
215
- ## 0.2.0
219
+ ### 0.2.0
216
220
 
217
221
  * Added support for OAuth 2.0 draft 10
218
222
 
219
- ## 0.1.4
223
+ ### 0.1.4
220
224
 
221
225
  * Added support for a two-legged authorization flow
222
226
 
223
- ## 0.1.3
227
+ ### 0.1.3
224
228
 
225
229
  * Fixed issue with headers passed in as a Hash
226
230
  * Fixed incompatibilities with Ruby 1.8.6
227
231
 
228
- ## 0.1.2
232
+ ### 0.1.2
229
233
 
230
234
  * Fixed bug with overzealous normalization
231
235
 
232
- ## 0.1.1
236
+ ### 0.1.1
233
237
 
234
238
  * Fixed bug with missing StringIO require
235
239
  * Fixed issue with dependency on unreleased features of addressable
236
240
 
237
- ## 0.1.0
241
+ ### 0.1.0
238
242
 
239
243
  * Initial release
data/README.md CHANGED
@@ -59,11 +59,11 @@ Be sure `https://rubygems.org` is in your gem sources.
59
59
 
60
60
  ## Supported Ruby Versions
61
61
 
62
- This library is supported on Ruby 2.5+.
62
+ This library is supported on Ruby 2.6+.
63
63
 
64
64
  Google provides official support for Ruby versions that are actively supported
65
- by Ruby Core—that is, Ruby versions that are either in normal maintenance or in
66
- security maintenance, and not end of life. Currently, this means Ruby 2.5 and
67
- later. Older versions of Ruby _may_ still work, but are unsupported and not
68
- recommended. See https://www.ruby-lang.org/en/downloads/branches/ for details
69
- about the Ruby support schedule.
65
+ by Ruby Core—that is, Ruby versions that are either in normal maintenance or
66
+ in security maintenance, and not end of life. Older versions of Ruby _may_
67
+ still work, but are unsupported and not recommended. See
68
+ https://www.ruby-lang.org/en/downloads/branches/ for details about the Ruby
69
+ support schedule.
@@ -75,7 +75,7 @@ module Signet # :nodoc:
75
75
  args = args.first.to_ary
76
76
  end
77
77
  if args.all? { |value| value.is_a? Array }
78
- parameters = args.each_with_object({}) { |(k, v), h| h[k] = v; }
78
+ parameters = args.each_with_object({}) { |(k, v), h| h[k] = v }
79
79
  @key = key_from_hash.call parameters
80
80
  @secret = secret_from_hash.call parameters
81
81
  elsif args.size == 2
@@ -458,7 +458,7 @@ module Signet
458
458
  # can't have been signed correctly(5849#3.4.1.3)
459
459
  unless post_parameters.sort == auth_hash.reject { |k, _v| k.index "oauth_" }.to_a.sort
460
460
  raise MalformedAuthorizationError, "Request is of type application/x-www-form-urlencoded " \
461
- "but Authentication header did not include form values"
461
+ "but Authentication header did not include form values"
462
462
  end
463
463
  end
464
464
 
@@ -350,7 +350,7 @@ module Signet # :nodoc:
350
350
  query_values = parsed_uri.query_values || {}
351
351
  if options[:additional_parameters]
352
352
  query_values = query_values.merge(
353
- options[:additional_parameters].each_with_object({}) { |(k, v), h| h[k] = v; }
353
+ options[:additional_parameters].each_with_object({}) { |(k, v), h| h[k] = v }
354
354
  )
355
355
  end
356
356
  query_values["oauth_token"] = temporary_credential_key if temporary_credential_key
@@ -20,6 +20,7 @@ require "signet/errors"
20
20
  require "signet/oauth_2"
21
21
  require "jwt"
22
22
  require "date"
23
+ require "time"
23
24
 
24
25
  module Signet
25
26
  module OAuth2
@@ -31,52 +32,54 @@ module Signet
31
32
  #
32
33
  # @param [Hash] options
33
34
  # The configuration parameters for the client.
34
- # - <code>:authorization_uri</code> -
35
+ # - `:authorization_uri` -
35
36
  # The authorization server's HTTP endpoint capable of
36
37
  # authenticating the end-user and obtaining authorization.
37
- # - <code>:token_credential_uri</code> -
38
+ # - `:token_credential_uri` -
38
39
  # The authorization server's HTTP endpoint capable of issuing
39
40
  # tokens and refreshing expired tokens.
40
- # - <code>:client_id</code> -
41
+ # - `:client_id` -
41
42
  # A unique identifier issued to the client to identify itself to the
42
43
  # authorization server.
43
- # - <code>:client_secret</code> -
44
+ # - `:client_secret` -
44
45
  # A shared symmetric secret issued by the authorization server,
45
46
  # which is used to authenticate the client.
46
- # - <code>:scope</code> -
47
+ # - `:scope` -
47
48
  # The scope of the access request, expressed either as an Array
48
49
  # or as a space-delimited String.
49
- # - <code>:target_audience</code> -
50
+ # - `:target_audience` -
50
51
  # The final target audience for ID tokens fetched by this client,
51
52
  # as a String.
52
- # - <code>:state</code> -
53
+ # - `:state` -
53
54
  # An arbitrary string designed to allow the client to maintain state.
54
- # - <code>:code</code> -
55
+ # - `:code` -
55
56
  # The authorization code received from the authorization server.
56
- # - <code>:redirect_uri</code> -
57
+ # - `:redirect_uri` -
57
58
  # The redirection URI used in the initial request.
58
- # - <code>:username</code> -
59
+ # - `:username` -
59
60
  # The resource owner's username.
60
- # - <code>:password</code> -
61
+ # - `:password` -
61
62
  # The resource owner's password.
62
- # - <code>:issuer</code> -
63
+ # - `:issuer` -
63
64
  # Issuer ID when using assertion profile
64
- # - <code>:person</code> -
65
+ # - `:person` -
65
66
  # Target user for assertions
66
- # - <code>:expiry</code> -
67
+ # - `:expiry` -
67
68
  # Number of seconds assertions are valid for
68
- # - <code>:signing_key</code> -
69
+ # - `:signing_key` -
69
70
  # Signing key when using assertion profile
70
- # - <code>:refresh_token</code> -
71
+ # - `:refresh_token` -
71
72
  # The refresh token associated with the access token
72
73
  # to be refreshed.
73
- # - <code>:access_token</code> -
74
+ # - `:access_token` -
74
75
  # The current access token for this client.
75
- # - <code>:id_token</code> -
76
+ # - `:id_token` -
76
77
  # The current ID token for this client.
77
- # - <code>:extension_parameters</code> -
78
+ # - `:extension_parameters` -
78
79
  # When using an extension grant type, this the set of parameters used
79
80
  # by that extension.
81
+ # - `:granted_scopes` -
82
+ # All scopes granted by authorization server.
80
83
  #
81
84
  # @example
82
85
  # client = Signet::OAuth2::Client.new(
@@ -108,6 +111,7 @@ module Signet
108
111
  @state = nil
109
112
  @username = nil
110
113
  @access_type = nil
114
+ @granted_scopes = nil
111
115
  update! options
112
116
  end
113
117
 
@@ -116,56 +120,58 @@ module Signet
116
120
  #
117
121
  # @param [Hash] options
118
122
  # The configuration parameters for the client.
119
- # - <code>:authorization_uri</code> -
123
+ # - `:authorization_uri` -
120
124
  # The authorization server's HTTP endpoint capable of
121
125
  # authenticating the end-user and obtaining authorization.
122
- # - <code>:token_credential_uri</code> -
126
+ # - `:token_credential_uri` -
123
127
  # The authorization server's HTTP endpoint capable of issuing
124
128
  # tokens and refreshing expired tokens.
125
- # - <code>:client_id</code> -
129
+ # - `:client_id` -
126
130
  # A unique identifier issued to the client to identify itself to the
127
131
  # authorization server.
128
- # - <code>:client_secret</code> -
132
+ # - `:client_secret` -
129
133
  # A shared symmetric secret issued by the authorization server,
130
134
  # which is used to authenticate the client.
131
- # - <code>:scope</code> -
135
+ # - `:scope` -
132
136
  # The scope of the access request, expressed either as an Array
133
137
  # or as a space-delimited String.
134
- # - <code>:target_audience</code> -
138
+ # - `:target_audience` -
135
139
  # The final target audience for ID tokens fetched by this client,
136
140
  # as a String.
137
- # - <code>:state</code> -
141
+ # - `:state` -
138
142
  # An arbitrary string designed to allow the client to maintain state.
139
- # - <code>:code</code> -
143
+ # - `:code` -
140
144
  # The authorization code received from the authorization server.
141
- # - <code>:redirect_uri</code> -
145
+ # - `:redirect_uri` -
142
146
  # The redirection URI used in the initial request.
143
- # - <code>:username</code> -
147
+ # - `:username` -
144
148
  # The resource owner's username.
145
- # - <code>:password</code> -
149
+ # - `:password` -
146
150
  # The resource owner's password.
147
- # - <code>:issuer</code> -
151
+ # - `:issuer` -
148
152
  # Issuer ID when using assertion profile
149
- # - <code>:audience</code> -
153
+ # - `:audience` -
150
154
  # Target audience for assertions
151
- # - <code>:person</code> -
155
+ # - `:person` -
152
156
  # Target user for assertions
153
- # - <code>:expiry</code> -
157
+ # - `:expiry` -
154
158
  # Number of seconds assertions are valid for
155
- # - <code>:signing_key</code> -
159
+ # - `:signing_key` -
156
160
  # Signing key when using assertion profile
157
- # - <code>:refresh_token</code> -
161
+ # - `:refresh_token` -
158
162
  # The refresh token associated with the access token
159
163
  # to be refreshed.
160
- # - <code>:access_token</code> -
164
+ # - `:access_token` -
161
165
  # The current access token for this client.
162
- # - <code>:access_type</code> -
166
+ # - `:access_type` -
163
167
  # The current access type parameter for #authorization_uri.
164
- # - <code>:id_token</code> -
168
+ # - `:id_token` -
165
169
  # The current ID token for this client.
166
- # - <code>:extension_parameters</code> -
170
+ # - `:extension_parameters` -
167
171
  # When using an extension grant type, this is the set of parameters used
168
172
  # by that extension.
173
+ # - `:granted_scopes` -
174
+ # All scopes granted by authorization server.
169
175
  #
170
176
  # @example
171
177
  # client.update!(
@@ -252,7 +258,7 @@ module Signet
252
258
  self.access_token = options[:access_token] if options.key? :access_token
253
259
  self.refresh_token = options[:refresh_token] if options.key? :refresh_token
254
260
  self.id_token = options[:id_token] if options.key? :id_token
255
-
261
+ self.granted_scopes = options[:granted_scopes] if options.key? :granted_scopes
256
262
  self
257
263
  end
258
264
 
@@ -610,7 +616,7 @@ module Signet
610
616
  # @param [Integer, String] new_expiry
611
617
  # Assertion expiry, in seconds
612
618
  def expiry= new_expiry
613
- @expiry = new_expiry ? new_expiry.to_i : nil
619
+ @expiry = new_expiry&.to_i
614
620
  end
615
621
 
616
622
  ##
@@ -822,6 +828,33 @@ module Signet
822
828
  @expires_at = normalize_timestamp new_expires_at
823
829
  end
824
830
 
831
+ ##
832
+ # Returns the scopes granted by the authorization server.
833
+ #
834
+ # @return [Array, nil] The scope of access returned by the authorization server.
835
+ def granted_scopes
836
+ @granted_scopes
837
+ end
838
+
839
+ ##
840
+ # Sets the scopes returned by authorization server for this client.
841
+ #
842
+ # @param [String, Array, nil] new_granted_scopes
843
+ # The scope of access returned by authorization server. This will
844
+ # ideally be expressed as space-delimited String.
845
+ def granted_scopes= new_granted_scopes
846
+ case new_granted_scopes
847
+ when Array
848
+ @granted_scopes = new_granted_scopes
849
+ when String
850
+ @granted_scopes = new_granted_scopes.split
851
+ when nil
852
+ @granted_scopes = nil
853
+ else
854
+ raise TypeError, "Expected Array or String, got #{new_granted_scopes.class}"
855
+ end
856
+ end
857
+
825
858
  ##
826
859
  # Returns true if the access token has expired.
827
860
  # Returns false if the token has not expired or has an nil @expires_at.
@@ -856,6 +889,7 @@ module Signet
856
889
  @code = nil
857
890
  @issued_at = nil
858
891
  @expires_at = nil
892
+ @granted_scopes = nil
859
893
  end
860
894
 
861
895
  ##
@@ -915,27 +949,28 @@ module Signet
915
949
  # @return [String] A serialized JSON representation of the client.
916
950
  def to_json *_args
917
951
  MultiJson.dump(
918
- "authorization_uri" => authorization_uri ? authorization_uri.to_s : nil,
919
- "token_credential_uri" => token_credential_uri ? token_credential_uri.to_s : nil,
952
+ "authorization_uri" => authorization_uri&.to_s,
953
+ "token_credential_uri" => token_credential_uri&.to_s,
920
954
  "client_id" => client_id,
921
955
  "client_secret" => client_secret,
922
956
  "scope" => scope,
923
957
  "target_audience" => target_audience,
924
958
  "state" => state,
925
959
  "code" => code,
926
- "redirect_uri" => redirect_uri ? redirect_uri.to_s : nil,
960
+ "redirect_uri" => redirect_uri&.to_s,
927
961
  "username" => username,
928
962
  "password" => password,
929
963
  "issuer" => issuer,
930
964
  "audience" => audience,
931
965
  "person" => person,
932
966
  "expiry" => expiry,
933
- "expires_at" => expires_at ? expires_at.to_i : nil,
967
+ "expires_at" => expires_at&.to_i,
934
968
  "signing_key" => signing_key,
935
969
  "refresh_token" => refresh_token,
936
970
  "access_token" => access_token,
937
971
  "id_token" => id_token,
938
- "extension_parameters" => extension_parameters
972
+ "extension_parameters" => extension_parameters,
973
+ "granted_scopes" => granted_scopes
939
974
  )
940
975
  end
941
976
 
@@ -1019,19 +1054,22 @@ module Signet
1019
1054
  content_type = response.header[:content_type]
1020
1055
  end
1021
1056
 
1022
- return ::Signet::OAuth2.parse_credentials body, content_type if status == 200
1023
-
1024
1057
  message = " Server message:\n#{response.body.to_s.strip}" unless body.to_s.strip.empty?
1058
+
1025
1059
  if [400, 401, 403].include? status
1026
1060
  message = "Authorization failed.#{message}"
1027
1061
  raise ::Signet::AuthorizationError.new message, response: response
1028
1062
  elsif status.to_s[0] == "5"
1029
1063
  message = "Remote server error.#{message}"
1030
1064
  raise ::Signet::RemoteServerError, message
1031
- else
1065
+ elsif status != 200
1032
1066
  message = "Unexpected status code: #{response.status}.#{message}"
1033
1067
  raise ::Signet::UnexpectedStatusError, message
1034
1068
  end
1069
+ # status == 200
1070
+ parsed_response = ::Signet::OAuth2.parse_credentials body, content_type
1071
+ parsed_response["granted_scopes"] = parsed_response.delete("scope") if parsed_response
1072
+ parsed_response
1035
1073
  end
1036
1074
 
1037
1075
  def fetch_access_token! options = {}
@@ -78,7 +78,7 @@ module Signet # :nodoc:
78
78
  when %r{^application/json.*}
79
79
  MultiJson.load body
80
80
  when %r{^application/x-www-form-urlencoded.*}
81
- Hash[Addressable::URI.form_unencode(body)]
81
+ Addressable::URI.form_unencode(body).to_h
82
82
  else
83
83
  raise ArgumentError, "Invalid content type '#{content_type}'"
84
84
  end
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module Signet
16
- VERSION = "0.16.1".freeze
16
+ VERSION = "0.18.0".freeze
17
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.1
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Aman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-02-24 00:00:00.000000000 Z
12
+ date: 2023-09-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable
@@ -34,7 +34,7 @@ dependencies:
34
34
  version: 0.17.5
35
35
  - - "<"
36
36
  - !ruby/object:Gem::Version
37
- version: '3.0'
37
+ version: 3.a
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -44,7 +44,7 @@ dependencies:
44
44
  version: 0.17.5
45
45
  - - "<"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: 3.a
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: jwt
50
50
  requirement: !ruby/object:Gem::Requirement
@@ -85,14 +85,14 @@ dependencies:
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 1.25.1
88
+ version: 1.26.1
89
89
  type: :development
90
90
  prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: 1.25.1
95
+ version: 1.26.1
96
96
  - !ruby/object:Gem::Dependency
97
97
  name: kramdown
98
98
  requirement: !ruby/object:Gem::Requirement
@@ -163,20 +163,6 @@ dependencies:
163
163
  - - "~>"
164
164
  - !ruby/object:Gem::Version
165
165
  version: '3.1'
166
- - !ruby/object:Gem::Dependency
167
- name: simplecov
168
- requirement: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '0.9'
173
- type: :development
174
- prerelease: false
175
- version_requirements: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '0.9'
180
166
  - !ruby/object:Gem::Dependency
181
167
  name: yard
182
168
  requirement: !ruby/object:Gem::Requirement
@@ -199,7 +185,7 @@ dependencies:
199
185
  version: 0.9.12
200
186
  description: 'Signet is an OAuth 1.0 / OAuth 2.0 implementation.
201
187
 
202
- '
188
+ '
203
189
  email: sbazyl@google.com
204
190
  executables: []
205
191
  extensions: []
@@ -241,14 +227,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
241
227
  requirements:
242
228
  - - ">="
243
229
  - !ruby/object:Gem::Version
244
- version: '2.5'
230
+ version: '2.6'
245
231
  required_rubygems_version: !ruby/object:Gem::Requirement
246
232
  requirements:
247
233
  - - ">="
248
234
  - !ruby/object:Gem::Version
249
235
  version: 1.3.5
250
236
  requirements: []
251
- rubygems_version: 3.3.5
237
+ rubygems_version: 3.4.19
252
238
  signing_key:
253
239
  specification_version: 4
254
240
  summary: Signet is an OAuth 1.0 / OAuth 2.0 implementation.