signet 0.12.0 → 0.15.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: c80485d96774a5d31447471f38ed3f976ed3cbc751f26d9758798adee4e3fced
4
- data.tar.gz: 70a563487e412a15c01799c09ec1fed027152e024053272c15858743cf4a58ca
3
+ metadata.gz: 9d6cce64f05742592f4945a2a394ab1fc239107e9c5d8145f38a4189689e46ea
4
+ data.tar.gz: a20b6a81fac21113e804c8cbac63db3464da5357aa7428bc17509212217e50a3
5
5
  SHA512:
6
- metadata.gz: e004219f1e71c272772bb4892574d8bcc2725fc8f3fb0b474612839661f0a272400ffff50149499b27f91d6287aaeb41fe1065d7bd2652a0f58cdd9f2f12e1da
7
- data.tar.gz: 046c9e719091f1f8d17fc324762558b2e6cb00d9b74c0ad66ec4da5bda5d8ba2a2ba6f2e070baacd6af2853d2ca30c1ea198c8ec59bb6fcdf9f63ac11929df9c
6
+ metadata.gz: b1f2c4ab3031aa346f118bc152f129559436f92ae8b3d0008f3a2efa51fb82e0e45fec0f999c6984772be58661c90f6fbe1a1c973cf6ccdec8329696da4e1101
7
+ data.tar.gz: fc909052f1a89ec0f79d9b9a36ca7196cef5be879595e8c1e7699050ced959b3062881e1418fc9b8258985819f3c2bb64e7e9f60008f25e5ddccb6375934c2f5
data/CHANGELOG.md CHANGED
@@ -1,38 +1,67 @@
1
- ### 0.12.0 / 2019-10-08
1
+ # Release History
2
+
3
+ ## [0.15.0](https://www.github.com/googleapis/signet/compare/v0.14.1...v0.15.0) (2021-03-04)
4
+
5
+
6
+ ### Features
7
+
8
+ * Drop support for Ruby 2.4 and add support for Ruby 3.0 ([bd6fe87](https://www.github.com/googleapis/signet/commit/bd6fe87948f8fc7702720dae651e82f4fd348b5d))
9
+
10
+ ## 0.14.1 / 2021-01-27
11
+
12
+ * Fix OAuth1 signature with duplicate query param names
13
+
14
+ ## 0.14.0 / 2020-03-31
15
+
16
+ * Support for fetching ID tokens from google oauth2 endpoint.
17
+
18
+ ## 0.13.2 / 2020-03-25
19
+
20
+ Rerelease of 0.13.1.
21
+
22
+ ## 0.13.1 / 2020-03-24
23
+
24
+ * Update github url
25
+
26
+ ## 0.13.0 / 2020-02-24
27
+
28
+ * Support Faraday 1.x
29
+
30
+ ## 0.12.0 / 2019-10-08
2
31
 
3
32
  * This version now requires Ruby 2.4.
4
33
  * Support array values of the "aud" field.
5
34
  * Normalize the version constant to match related gems.
6
35
 
7
- ### 0.11.0 / 2018-10-08
36
+ ## 0.11.0 / 2018-10-08
8
37
 
9
38
  * Add constant time comparison for oauth signatures.
10
39
 
11
- ### 0.10.0 / 2018-09-21
40
+ ## 0.10.0 / 2018-09-21
12
41
 
13
42
  * Add UnexpectedStatusError class for http status errors that are not handled.
14
43
 
15
- ### 0.9.2 / 2018-09-12
44
+ ## 0.9.2 / 2018-09-12
16
45
 
17
46
  * Update issued_at correctly when it is set simultaneously with expires_in.
18
47
 
19
- ### 0.9.1 / 2018-08-29
48
+ ## 0.9.1 / 2018-08-29
20
49
 
21
50
  * Warn on EOL ruby versions.
22
51
  * Fix DateTime normalization.
23
52
 
24
- ### 0.9.0 / 2018-08-20
53
+ ## 0.9.0 / 2018-08-20
25
54
 
26
55
  * Add RemoteServerError class for 5xx level errors.
27
56
  * Allow to_json to be called with arguments
28
57
  * Expires_in now sets and reflects current expires_at value
29
58
  * Expires_within(0) now returns false when expires_at is nil.
30
59
 
31
- ### 0.8.1 / 2017-10-13
60
+ ## 0.8.1 / 2017-10-13
32
61
 
33
62
  * Restore support for Ruby 1.9.3
34
63
 
35
- ### 0.8.0 / 2017-10-12
64
+ ## 0.8.0 / 2017-10-12
36
65
 
37
66
  * Ensure the "expires_at" attribute is recalculated on refresh (chutzimir)
38
67
  * Fix warnings on Ruby 2.4 (koic)
@@ -40,20 +69,20 @@
40
69
  * Provide signature verification algorithm for compatibility with ruby-jwt 2.0 (jurriaan)
41
70
  * Signet::OAuth2::Client#decoded_id_token can take a keyfinder block (mvastola)
42
71
 
43
- ### 0.7.3 / 2016-06-20
72
+ ## 0.7.3 / 2016-06-20
44
73
 
45
74
  * Fix timestamp parsing on 32-bit systems
46
75
  * Fix expiration check when issue/expiry times are nil
47
76
 
48
- ### 0.7.2 / 2015-12-21
77
+ ## 0.7.2 / 2015-12-21
49
78
 
50
79
  * Don't assume Faraday form encoding middleware is present
51
80
 
52
- ### 0.7.1 / 2015-12-17
81
+ ## 0.7.1 / 2015-12-17
53
82
 
54
83
  * Fix an issue with date parsing
55
84
 
56
- ### 0.7 / 2015-12-06
85
+ ## 0.7 / 2015-12-06
57
86
 
58
87
  * No longer overwrite SSL environment variables.
59
88
  * Tighten up date & URL (de)serialization for OAuth2 client
@@ -62,7 +91,7 @@
62
91
  * Add expires_within(sec) method to oauth2 client to facilitate proactive
63
92
  refreshes
64
93
 
65
- ### 0.6.1 / 2015-06-08
94
+ ## 0.6.1 / 2015-06-08
66
95
 
67
96
  * Fix language warnings for unused & shadowed variables ((@blowmage)[])
68
97
  * Update SSL cert path for OSX ((@gambaroff)[])
@@ -70,14 +99,14 @@
70
99
  * Fix incorrect parameter name in OAuth2 client docs ((@samuelreh)[])
71
100
  * Fix symbolization of URL parameter keys ((@swifthand)[])
72
101
 
73
- ### 0.6.0 / 2014-12-05
102
+ ## 0.6.0 / 2014-12-05
74
103
 
75
104
  * Drop support for ruby versions < 1.9.3
76
105
  * Update gem dependencies and lock down versions tighter
77
106
  * Allow form encoded responses when exchanging OAuth 2 authorization codes
78
107
  * Normalize options keys for indifferent access
79
108
 
80
- ### 0.5.1 / 2014-06-08
109
+ ## 0.5.1 / 2014-06-08
81
110
 
82
111
  * Allow Hash objects to be used to initialize authorization URI
83
112
  * Added PLAINTEXT and RSA-SHA1 signature methods to OAuth 1 support
@@ -85,53 +114,53 @@
85
114
  * The `approval_prompt` option no longer defaults to `:force`
86
115
  * The `approval_prompt` and `prompt` are now mutually exclusive.
87
116
 
88
- ### 0.5.0 / 2013-05-31
117
+ ## 0.5.0 / 2013-05-31
89
118
 
90
119
  * Switched to faraday 0.9.0
91
120
  * Added `expires_at` option
92
121
 
93
- ### 0.4.5
122
+ ## 0.4.5
94
123
 
95
124
  * Minor documentation fixes
96
125
  * Allow postmessage as a valid redirect_uri in OAuth 2
97
126
 
98
- ### 0.4.4
127
+ ## 0.4.4
99
128
 
100
129
  * Add support for assertion profile
101
130
 
102
- ### 0.4.3
131
+ ## 0.4.3
103
132
 
104
133
  * Added method to clear credentials
105
134
 
106
- ### 0.4.2
135
+ ## 0.4.2
107
136
 
108
137
  * Backwards compatibility for MultiJson
109
138
 
110
- ### 0.4.1
139
+ ## 0.4.1
111
140
 
112
141
  * Updated Launchy dependency
113
142
 
114
- ### 0.4.0
143
+ ## 0.4.0
115
144
 
116
145
  * Added OAuth 1 server implementation
117
146
  * Updated Faraday dependency
118
147
 
119
- ### 0.3.4
148
+ ## 0.3.4
120
149
 
121
150
  * Attempts to auto-detect CA cert location
122
151
 
123
- ### 0.3.3
152
+ ## 0.3.3
124
153
 
125
154
  * Request objects no longer recreated during processing
126
155
  * Faraday middleware now supported
127
156
  * Streamed requests now supported
128
157
  * Fixed assertion profiles; client ID/secret omission no longer an error
129
158
 
130
- ### 0.3.2
159
+ ## 0.3.2
131
160
 
132
161
  * Added audience security check for ID tokens
133
162
 
134
- ### 0.3.1
163
+ ## 0.3.1
135
164
 
136
165
  * Fixed a warning while determining grant type
137
166
  * Removed requirement that a connection be supplied when authorizing requests
@@ -139,52 +168,52 @@
139
168
  * Fixed some documentation stuff around markdown formatting
140
169
  * Added support for Google Code wiki format output when generating docs
141
170
 
142
- ### 0.3.0
171
+ ## 0.3.0
143
172
 
144
173
  * Replaced httpadapter gem dependency with faraday
145
174
  * Replaced json gem dependency with multi_json
146
175
  * Updated to OAuth 2.0 draft 22
147
176
  * Complete test coverage
148
177
 
149
- ### 0.2.4
178
+ ## 0.2.4
150
179
 
151
180
  * Updated to incorporate changes to the Google OAuth endpoints
152
181
 
153
- ### 0.2.3
182
+ ## 0.2.3
154
183
 
155
184
  * Added support for JWT-formatted ID tokens.
156
185
  * Added :issued_at option to #update_token! method.
157
186
 
158
- ### 0.2.2
187
+ ## 0.2.2
159
188
 
160
189
  * Lowered requirements for json gem
161
190
 
162
- ### 0.2.1
191
+ ## 0.2.1
163
192
 
164
193
  * Updated to keep in sync with the new httpadapter changes
165
194
 
166
- ### 0.2.0
195
+ ## 0.2.0
167
196
 
168
197
  * Added support for OAuth 2.0 draft 10
169
198
 
170
- ### 0.1.4
199
+ ## 0.1.4
171
200
 
172
201
  * Added support for a two-legged authorization flow
173
202
 
174
- ### 0.1.3
203
+ ## 0.1.3
175
204
 
176
205
  * Fixed issue with headers passed in as a Hash
177
206
  * Fixed incompatibilities with Ruby 1.8.6
178
207
 
179
- ### 0.1.2
208
+ ## 0.1.2
180
209
 
181
210
  * Fixed bug with overzealous normalization
182
211
 
183
- ### 0.1.1
212
+ ## 0.1.1
184
213
 
185
214
  * Fixed bug with missing StringIO require
186
215
  * Fixed issue with dependency on unreleased features of addressable
187
216
 
188
- ### 0.1.0
217
+ ## 0.1.0
189
218
 
190
219
  * Initial release
data/README.md CHANGED
@@ -8,7 +8,6 @@
8
8
  </dl>
9
9
 
10
10
  [![Gem Version](https://badge.fury.io/rb/signet.svg)](https://badge.fury.io/rb/signet)
11
- [![Build Status](https://secure.travis-ci.org/google/signet.png)](http://travis-ci.org/google/signet)
12
11
 
13
12
  ## Description
14
13
 
@@ -32,8 +31,8 @@ require 'signet/oauth_2/client'
32
31
  client = Signet::OAuth2::Client.new(
33
32
  :authorization_uri => 'https://accounts.google.com/o/oauth2/auth',
34
33
  :token_credential_uri => 'https://oauth2.googleapis.com/token',
35
- :client_id => '44410190108-74nkm6jc5e3vvjqis803frkvmu88cu3a.apps.googleusercontent.com',
36
- :client_secret => 'X1NUhvO-rQr9sm8uUSMY8i7v',
34
+ :client_id => "#{YOUR_CLIENT_ID}.apps.googleusercontent.com",
35
+ :client_secret => YOUR_CLIENT_SECRET,
37
36
  :scope => 'email profile',
38
37
  :redirect_uri => 'https://example.client.com/oauth'
39
38
  )
@@ -60,8 +59,11 @@ Be sure `https://rubygems.org` is in your gem sources.
60
59
 
61
60
  ## Supported Ruby Versions
62
61
 
63
- This library requires Ruby 2.4 or later.
64
- In general, this library supports Ruby versions that are considered current and
65
- supported by Ruby Core (that is, Ruby versions that are either in normal
66
- maintenance or in security maintenance).
67
- See https://www.ruby-lang.org/en/downloads/branches/ for further details.
62
+ This library is supported on Ruby 2.5+.
63
+
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.
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ task :release_gem, :tag do |_t, args|
8
8
  raise "You must provide a tag to release." if tag.nil?
9
9
 
10
10
  # Verify the tag format "vVERSION"
11
- m = tag.match(/signet\/v(?<version>\S*)/)
11
+ m = tag.match /v(?<version>\S*)/
12
12
  raise "Tag #{tag} does not match the expected format." if m.nil?
13
13
 
14
14
  version = m[:version]
@@ -30,16 +30,23 @@ task :release_gem, :tag do |_t, args|
30
30
  end
31
31
 
32
32
  path_to_be_pushed = "pkg/signet-#{version}.gem"
33
+ gem_was_published = nil
33
34
  if File.file? path_to_be_pushed
34
35
  begin
35
- ::Gems.push File.new(path_to_be_pushed)
36
+ response = ::Gems.push File.new(path_to_be_pushed)
37
+ puts response
38
+ raise unless response.include? "Successfully registered gem:"
39
+ gem_was_published = true
36
40
  puts "Successfully built and pushed signet for version #{version}"
37
41
  rescue StandardError => e
42
+ gem_was_published = false
38
43
  puts "Error while releasing signet version #{version}: #{e.message}"
39
44
  end
40
45
  else
41
46
  raise "Cannot build signet for version #{version}"
42
47
  end
48
+
49
+ Rake::Task["kokoro:publish_docs"].invoke if gem_was_published
43
50
  end
44
51
 
45
52
  task :ci do
@@ -77,7 +84,21 @@ namespace :kokoro do
77
84
  .first.split("(").last.split(")").first || "0.1.0"
78
85
  end
79
86
  Rake::Task["kokoro:load_env_vars"].invoke
80
- Rake::Task["release_gem"].invoke "signet/v#{version}"
87
+ Rake::Task["release_gem"].invoke "v#{version}"
88
+ end
89
+
90
+ task :post do
91
+ require_relative "rakelib/link_checker.rb"
92
+
93
+ link_checker = LinkChecker.new
94
+ link_checker.run
95
+ exit link_checker.exit_status
96
+ end
97
+
98
+ task :publish_docs do
99
+ require_relative "rakelib/devsite_builder.rb"
100
+
101
+ DevsiteBuilder.new(__dir__).publish
81
102
  end
82
103
  end
83
104
 
data/lib/signet.rb CHANGED
@@ -15,8 +15,6 @@
15
15
  require "signet/version"
16
16
 
17
17
  module Signet #:nodoc:
18
- # rubocop:disable Metrics/AbcSize
19
- # rubocop:disable Metrics/MethodLength
20
18
  def self.parse_auth_param_list auth_param_string
21
19
  # Production rules from:
22
20
  # http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-12
@@ -54,11 +52,12 @@ module Signet #:nodoc:
54
52
  # Now parse the auth-param pair strings & turn them into key-value pairs.
55
53
  (auth_param_pairs.each_with_object [] do |pair, accu|
56
54
  name, value = pair.split "=", 2
57
- if value =~ /^".*"$/
55
+ case value
56
+ when /^".*"$/
58
57
  value = value.gsub(/^"(.*)"$/, '\1').gsub(/\\(.)/, '\1')
59
- elsif value =~ /^'.*'$/
58
+ when /^'.*'$/
60
59
  value = value.gsub(/^'(.*)'$/, '\1').gsub(/\\(.)/, '\1')
61
- elsif value =~ %r{[\(\)<>@,;:\\\"/\[\]?={}]}
60
+ when %r{[()<>@,;:\\"/\[\]?={}]}
62
61
  # Certain special characters are not allowed
63
62
  raise ParseError,
64
63
  "Unexpected characters in auth param " \
@@ -68,6 +67,4 @@ module Signet #:nodoc:
68
67
  accu << [name, value]
69
68
  end)
70
69
  end
71
- # rubocop:enable Metrics/AbcSize
72
- # rubocop:enable Metrics/MethodLength
73
70
  end
@@ -49,9 +49,8 @@ module Signet #:nodoc:
49
49
  #
50
50
  # @return [String] A random nonce.
51
51
  def self.generate_nonce
52
- SecureRandom.random_bytes(16).unpack("H*").join ""
52
+ SecureRandom.random_bytes(16).unpack("H*").join
53
53
  end
54
- # rubocop:disable Metrics/MethodLength
55
54
 
56
55
  ##
57
56
  # Processes an options <code>Hash</code> to find a credential key value.
@@ -65,7 +64,7 @@ module Signet #:nodoc:
65
64
  # @return [String] The credential key value.
66
65
  def self.extract_credential_key_option credential_type, options
67
66
  # Normalize key to String to allow indifferent access.
68
- options = options.each_with_object({}) { |(k, v), accu| accu[k.to_s] = v; }
67
+ options = options.to_h.transform_keys(&:to_s)
69
68
  credential_key = "#{credential_type}_credential_key"
70
69
  credential = "#{credential_type}_credential"
71
70
  if options[credential_key]
@@ -107,7 +106,7 @@ module Signet #:nodoc:
107
106
  # @return [String] The credential secret value.
108
107
  def self.extract_credential_secret_option credential_type, options
109
108
  # Normalize key to String to allow indifferent access.
110
- options = options.each_with_object({}) { |(k, v), accu| accu[k.to_s] = v; }
109
+ options = options.to_h.transform_keys(&:to_s)
111
110
  credential_secret = "#{credential_type}_credential_secret"
112
111
  credential = "#{credential_type}_credential"
113
112
  if options[credential_secret]
@@ -136,7 +135,6 @@ module Signet #:nodoc:
136
135
  end
137
136
  credential_secret
138
137
  end
139
- # rubocop:enable Metrics/MethodLength
140
138
 
141
139
  ##
142
140
  # Normalizes a set of OAuth parameters according to the algorithm given
@@ -178,7 +176,7 @@ module Signet #:nodoc:
178
176
  query: parsed_uri.query,
179
177
  fragment: parsed_uri.fragment
180
178
  )
181
- uri_parameters = uri.query_values.to_a
179
+ uri_parameters = uri.query_values(Array) || []
182
180
  uri = uri.omit(:query, :fragment).to_s
183
181
  merged_parameters =
184
182
  uri_parameters.concat(parameters.map { |k, v| [k, v] })
@@ -214,7 +212,7 @@ module Signet #:nodoc:
214
212
  realm = realm.gsub '"', '\"'
215
213
  parameter_list.unshift "realm=\"#{realm}\""
216
214
  end
217
- "OAuth " + parameter_list.join(", ")
215
+ "OAuth #{parameter_list.join ', '}"
218
216
  end
219
217
 
220
218
  ##
@@ -228,7 +226,7 @@ module Signet #:nodoc:
228
226
  when /^OAuth$/i
229
227
  # Other token types may be supported eventually
230
228
  pairs = Signet.parse_auth_param_list(field_value[/^OAuth\s+(.*)$/i, 1])
231
- return (pairs.each_with_object [] do |(k, v), accu|
229
+ (pairs.each_with_object [] do |(k, v), accu|
232
230
  if k != "realm"
233
231
  k = unencode k
234
232
  v = unencode v
@@ -274,24 +272,18 @@ module Signet #:nodoc:
274
272
  # be a temporary credential secret when obtaining a token credential
275
273
  # for the first time
276
274
  base_string = generate_base_string method, uri, parameters
277
- parameters = parameters.each_with_object({}) { |(k, v), h| h[k.to_s] = v; }
275
+ parameters = parameters.to_h.transform_keys(&:to_s)
278
276
  signature_method = parameters["oauth_signature_method"]
279
277
  case signature_method
280
278
  when "HMAC-SHA1"
281
279
  require "signet/oauth_1/signature_methods/hmac_sha1"
282
- return Signet::OAuth1::HMACSHA1.generate_signature(
283
- base_string, client_credential_secret, token_credential_secret
284
- )
280
+ Signet::OAuth1::HMACSHA1.generate_signature base_string, client_credential_secret, token_credential_secret
285
281
  when "RSA-SHA1"
286
282
  require "signet/oauth_1/signature_methods/rsa_sha1"
287
- return Signet::OAuth1::RSASHA1.generate_signature(
288
- base_string, client_credential_secret, token_credential_secret
289
- )
283
+ Signet::OAuth1::RSASHA1.generate_signature base_string, client_credential_secret, token_credential_secret
290
284
  when "PLAINTEXT"
291
285
  require "signet/oauth_1/signature_methods/plaintext"
292
- return Signet::OAuth1::PLAINTEXT.generate_signature(
293
- base_string, client_credential_secret, token_credential_secret
294
- )
286
+ Signet::OAuth1::PLAINTEXT.generate_signature base_string, client_credential_secret, token_credential_secret
295
287
  else
296
288
  raise NotImplementedError,
297
289
  "Unsupported signature method: #{signature_method}"
@@ -396,7 +388,7 @@ module Signet #:nodoc:
396
388
  raise ArgumentError, "Missing :client_credential_key parameter." if client_credential_key.nil?
397
389
  raise ArgumentError, "Missing :temporary_credential_key parameter." if temporary_credential_key.nil?
398
390
  raise ArgumentError, "Missing :verifier parameter." if options[:verifier].nil?
399
- parameters = [
391
+ [
400
392
  ["oauth_consumer_key", client_credential_key],
401
393
  ["oauth_token", temporary_credential_key],
402
394
  ["oauth_signature_method", options[:signature_method]],
@@ -405,8 +397,6 @@ module Signet #:nodoc:
405
397
  ["oauth_verifier", options[:verifier]],
406
398
  ["oauth_version", "1.0"]
407
399
  ]
408
- # No additional parameters allowed here
409
- parameters
410
400
  end
411
401
 
412
402
  ##