signet 0.15.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d6cce64f05742592f4945a2a394ab1fc239107e9c5d8145f38a4189689e46ea
4
- data.tar.gz: a20b6a81fac21113e804c8cbac63db3464da5357aa7428bc17509212217e50a3
3
+ metadata.gz: 13bd869943add17b04e66089d5c1a5d34a8d6053c55fb4dc389bc9e3a83c36ae
4
+ data.tar.gz: 17a0094e4ef483d07ea945155956d81a06423a8d57abc725d326b49c2cb62171
5
5
  SHA512:
6
- metadata.gz: b1f2c4ab3031aa346f118bc152f129559436f92ae8b3d0008f3a2efa51fb82e0e45fec0f999c6984772be58661c90f6fbe1a1c973cf6ccdec8329696da4e1101
7
- data.tar.gz: fc909052f1a89ec0f79d9b9a36ca7196cef5be879595e8c1e7699050ced959b3062881e1418fc9b8258985819f3c2bb64e7e9f60008f25e5ddccb6375934c2f5
6
+ metadata.gz: c6817470226e95dd4535bb7316b98c2b95d6ef70a8b9a1466656018fc9e642a02901390e0b40562e7ac7ea3a6acfefdb07d3317c6879453bb23ca07090bd9643
7
+ data.tar.gz: d49ad82ef1cbf8fab14b74370f07e3567c3f2594045e3cf82ec5f72f69f93ebe47954bff340fe7c472fb31f6269bbe012fec8e24f369167e59a519bfc02ff13b
data/.yardopts ADDED
@@ -0,0 +1,11 @@
1
+ --no-private
2
+ --title=Signet
3
+ --markup markdown
4
+ --markup-provider redcarpet
5
+
6
+ ./lib/**/*.rb
7
+ -
8
+ README.md
9
+ CHANGELOG.md
10
+ CODE_OF_CONDUCT.md
11
+ LICENSE
data/CHANGELOG.md CHANGED
@@ -1,67 +1,85 @@
1
1
  # Release History
2
2
 
3
- ## [0.15.0](https://www.github.com/googleapis/signet/compare/v0.14.1...v0.15.0) (2021-03-04)
3
+ ### 0.17.0 (2022-06-23)
4
4
 
5
+ * Updated minimum Ruby version to 2.6
5
6
 
6
- ### Features
7
+ ### 0.16.1 (2022-02-24)
7
8
 
8
- * Drop support for Ruby 2.4 and add support for Ruby 3.0 ([bd6fe87](https://www.github.com/googleapis/signet/commit/bd6fe87948f8fc7702720dae651e82f4fd348b5d))
9
+ #### Bug Fixes
9
10
 
10
- ## 0.14.1 / 2021-01-27
11
+ * Support Faraday 2
12
+
13
+ ### 0.16.0 (2021-09-03)
14
+
15
+ #### Features
16
+
17
+ * Support for fetching an access token with basic auth
18
+
19
+ #### Bug Fixes
20
+
21
+ * Remove extraneous files from the gem
22
+ * Require addressable 2.8 to remediate vulnerability
23
+
24
+ ### 0.15.0 (2021-03-04)
25
+
26
+ * Drop support for Ruby 2.4 and add support for Ruby 3.0
27
+
28
+ ### 0.14.1 / 2021-01-27
11
29
 
12
30
  * Fix OAuth1 signature with duplicate query param names
13
31
 
14
- ## 0.14.0 / 2020-03-31
32
+ ### 0.14.0 / 2020-03-31
15
33
 
16
34
  * Support for fetching ID tokens from google oauth2 endpoint.
17
35
 
18
- ## 0.13.2 / 2020-03-25
36
+ ### 0.13.2 / 2020-03-25
19
37
 
20
38
  Rerelease of 0.13.1.
21
39
 
22
- ## 0.13.1 / 2020-03-24
40
+ ### 0.13.1 / 2020-03-24
23
41
 
24
42
  * Update github url
25
43
 
26
- ## 0.13.0 / 2020-02-24
44
+ ### 0.13.0 / 2020-02-24
27
45
 
28
46
  * Support Faraday 1.x
29
47
 
30
- ## 0.12.0 / 2019-10-08
48
+ ### 0.12.0 / 2019-10-08
31
49
 
32
50
  * This version now requires Ruby 2.4.
33
51
  * Support array values of the "aud" field.
34
52
  * Normalize the version constant to match related gems.
35
53
 
36
- ## 0.11.0 / 2018-10-08
54
+ ### 0.11.0 / 2018-10-08
37
55
 
38
56
  * Add constant time comparison for oauth signatures.
39
57
 
40
- ## 0.10.0 / 2018-09-21
58
+ ### 0.10.0 / 2018-09-21
41
59
 
42
60
  * Add UnexpectedStatusError class for http status errors that are not handled.
43
61
 
44
- ## 0.9.2 / 2018-09-12
62
+ ### 0.9.2 / 2018-09-12
45
63
 
46
64
  * Update issued_at correctly when it is set simultaneously with expires_in.
47
65
 
48
- ## 0.9.1 / 2018-08-29
66
+ ### 0.9.1 / 2018-08-29
49
67
 
50
68
  * Warn on EOL ruby versions.
51
69
  * Fix DateTime normalization.
52
70
 
53
- ## 0.9.0 / 2018-08-20
71
+ ### 0.9.0 / 2018-08-20
54
72
 
55
73
  * Add RemoteServerError class for 5xx level errors.
56
74
  * Allow to_json to be called with arguments
57
75
  * Expires_in now sets and reflects current expires_at value
58
76
  * Expires_within(0) now returns false when expires_at is nil.
59
77
 
60
- ## 0.8.1 / 2017-10-13
78
+ ### 0.8.1 / 2017-10-13
61
79
 
62
80
  * Restore support for Ruby 1.9.3
63
81
 
64
- ## 0.8.0 / 2017-10-12
82
+ ### 0.8.0 / 2017-10-12
65
83
 
66
84
  * Ensure the "expires_at" attribute is recalculated on refresh (chutzimir)
67
85
  * Fix warnings on Ruby 2.4 (koic)
@@ -69,20 +87,20 @@ Rerelease of 0.13.1.
69
87
  * Provide signature verification algorithm for compatibility with ruby-jwt 2.0 (jurriaan)
70
88
  * Signet::OAuth2::Client#decoded_id_token can take a keyfinder block (mvastola)
71
89
 
72
- ## 0.7.3 / 2016-06-20
90
+ ### 0.7.3 / 2016-06-20
73
91
 
74
92
  * Fix timestamp parsing on 32-bit systems
75
93
  * Fix expiration check when issue/expiry times are nil
76
94
 
77
- ## 0.7.2 / 2015-12-21
95
+ ### 0.7.2 / 2015-12-21
78
96
 
79
97
  * Don't assume Faraday form encoding middleware is present
80
98
 
81
- ## 0.7.1 / 2015-12-17
99
+ ### 0.7.1 / 2015-12-17
82
100
 
83
101
  * Fix an issue with date parsing
84
102
 
85
- ## 0.7 / 2015-12-06
103
+ ### 0.7 / 2015-12-06
86
104
 
87
105
  * No longer overwrite SSL environment variables.
88
106
  * Tighten up date & URL (de)serialization for OAuth2 client
@@ -91,7 +109,7 @@ Rerelease of 0.13.1.
91
109
  * Add expires_within(sec) method to oauth2 client to facilitate proactive
92
110
  refreshes
93
111
 
94
- ## 0.6.1 / 2015-06-08
112
+ ### 0.6.1 / 2015-06-08
95
113
 
96
114
  * Fix language warnings for unused & shadowed variables ((@blowmage)[])
97
115
  * Update SSL cert path for OSX ((@gambaroff)[])
@@ -99,14 +117,14 @@ Rerelease of 0.13.1.
99
117
  * Fix incorrect parameter name in OAuth2 client docs ((@samuelreh)[])
100
118
  * Fix symbolization of URL parameter keys ((@swifthand)[])
101
119
 
102
- ## 0.6.0 / 2014-12-05
120
+ ### 0.6.0 / 2014-12-05
103
121
 
104
122
  * Drop support for ruby versions < 1.9.3
105
123
  * Update gem dependencies and lock down versions tighter
106
124
  * Allow form encoded responses when exchanging OAuth 2 authorization codes
107
125
  * Normalize options keys for indifferent access
108
126
 
109
- ## 0.5.1 / 2014-06-08
127
+ ### 0.5.1 / 2014-06-08
110
128
 
111
129
  * Allow Hash objects to be used to initialize authorization URI
112
130
  * Added PLAINTEXT and RSA-SHA1 signature methods to OAuth 1 support
@@ -114,53 +132,53 @@ Rerelease of 0.13.1.
114
132
  * The `approval_prompt` option no longer defaults to `:force`
115
133
  * The `approval_prompt` and `prompt` are now mutually exclusive.
116
134
 
117
- ## 0.5.0 / 2013-05-31
135
+ ### 0.5.0 / 2013-05-31
118
136
 
119
137
  * Switched to faraday 0.9.0
120
138
  * Added `expires_at` option
121
139
 
122
- ## 0.4.5
140
+ ### 0.4.5
123
141
 
124
142
  * Minor documentation fixes
125
143
  * Allow postmessage as a valid redirect_uri in OAuth 2
126
144
 
127
- ## 0.4.4
145
+ ### 0.4.4
128
146
 
129
147
  * Add support for assertion profile
130
148
 
131
- ## 0.4.3
149
+ ### 0.4.3
132
150
 
133
151
  * Added method to clear credentials
134
152
 
135
- ## 0.4.2
153
+ ### 0.4.2
136
154
 
137
155
  * Backwards compatibility for MultiJson
138
156
 
139
- ## 0.4.1
157
+ ### 0.4.1
140
158
 
141
159
  * Updated Launchy dependency
142
160
 
143
- ## 0.4.0
161
+ ### 0.4.0
144
162
 
145
163
  * Added OAuth 1 server implementation
146
164
  * Updated Faraday dependency
147
165
 
148
- ## 0.3.4
166
+ ### 0.3.4
149
167
 
150
168
  * Attempts to auto-detect CA cert location
151
169
 
152
- ## 0.3.3
170
+ ### 0.3.3
153
171
 
154
172
  * Request objects no longer recreated during processing
155
173
  * Faraday middleware now supported
156
174
  * Streamed requests now supported
157
175
  * Fixed assertion profiles; client ID/secret omission no longer an error
158
176
 
159
- ## 0.3.2
177
+ ### 0.3.2
160
178
 
161
179
  * Added audience security check for ID tokens
162
180
 
163
- ## 0.3.1
181
+ ### 0.3.1
164
182
 
165
183
  * Fixed a warning while determining grant type
166
184
  * Removed requirement that a connection be supplied when authorizing requests
@@ -168,52 +186,52 @@ Rerelease of 0.13.1.
168
186
  * Fixed some documentation stuff around markdown formatting
169
187
  * Added support for Google Code wiki format output when generating docs
170
188
 
171
- ## 0.3.0
189
+ ### 0.3.0
172
190
 
173
191
  * Replaced httpadapter gem dependency with faraday
174
192
  * Replaced json gem dependency with multi_json
175
193
  * Updated to OAuth 2.0 draft 22
176
194
  * Complete test coverage
177
195
 
178
- ## 0.2.4
196
+ ### 0.2.4
179
197
 
180
198
  * Updated to incorporate changes to the Google OAuth endpoints
181
199
 
182
- ## 0.2.3
200
+ ### 0.2.3
183
201
 
184
202
  * Added support for JWT-formatted ID tokens.
185
203
  * Added :issued_at option to #update_token! method.
186
204
 
187
- ## 0.2.2
205
+ ### 0.2.2
188
206
 
189
207
  * Lowered requirements for json gem
190
208
 
191
- ## 0.2.1
209
+ ### 0.2.1
192
210
 
193
211
  * Updated to keep in sync with the new httpadapter changes
194
212
 
195
- ## 0.2.0
213
+ ### 0.2.0
196
214
 
197
215
  * Added support for OAuth 2.0 draft 10
198
216
 
199
- ## 0.1.4
217
+ ### 0.1.4
200
218
 
201
219
  * Added support for a two-legged authorization flow
202
220
 
203
- ## 0.1.3
221
+ ### 0.1.3
204
222
 
205
223
  * Fixed issue with headers passed in as a Hash
206
224
  * Fixed incompatibilities with Ruby 1.8.6
207
225
 
208
- ## 0.1.2
226
+ ### 0.1.2
209
227
 
210
228
  * Fixed bug with overzealous normalization
211
229
 
212
- ## 0.1.1
230
+ ### 0.1.1
213
231
 
214
232
  * Fixed bug with missing StringIO require
215
233
  * Fixed issue with dependency on unreleased features of addressable
216
234
 
217
- ## 0.1.0
235
+ ### 0.1.0
218
236
 
219
237
  * Initial release
@@ -0,0 +1,43 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project,
4
+ and in the interest of fostering an open and welcoming community,
5
+ we pledge to respect all people who contribute through reporting issues,
6
+ posting feature requests, updating documentation,
7
+ submitting pull requests or patches, and other activities.
8
+
9
+ We are committed to making participation in this project
10
+ a harassment-free experience for everyone,
11
+ regardless of level of experience, gender, gender identity and expression,
12
+ sexual orientation, disability, personal appearance,
13
+ body size, race, ethnicity, age, religion, or nationality.
14
+
15
+ Examples of unacceptable behavior by participants include:
16
+
17
+ * The use of sexualized language or imagery
18
+ * Personal attacks
19
+ * Trolling or insulting/derogatory comments
20
+ * Public or private harassment
21
+ * Publishing other's private information,
22
+ such as physical or electronic
23
+ addresses, without explicit permission
24
+ * Other unethical or unprofessional conduct.
25
+
26
+ Project maintainers have the right and responsibility to remove, edit, or reject
27
+ comments, commits, code, wiki edits, issues, and other contributions
28
+ that are not aligned to this Code of Conduct.
29
+ By adopting this Code of Conduct,
30
+ project maintainers commit themselves to fairly and consistently
31
+ applying these principles to every aspect of managing this project.
32
+ Project maintainers who do not follow or enforce the Code of Conduct
33
+ may be permanently removed from the project team.
34
+
35
+ This code of conduct applies both within project spaces and in public spaces
36
+ when an individual is representing the project or its community.
37
+
38
+ Instances of abusive, harassing, or otherwise unacceptable behavior
39
+ may be reported by opening an issue
40
+ or contacting one or more of the project maintainers.
41
+
42
+ This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,
43
+ available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
data/SECURITY.md ADDED
@@ -0,0 +1,7 @@
1
+ # Security Policy
2
+
3
+ To report a security issue, please use [g.co/vulnz](https://g.co/vulnz).
4
+
5
+ The Google Security Team will respond within 5 working days of your report on g.co/vulnz.
6
+
7
+ We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.
@@ -926,7 +926,7 @@ module Signet
926
926
 
927
927
  content_type = request["Content-Type"].to_s
928
928
  content_type = content_type.split(";", 2).first if content_type.index ";"
929
- if request.method == :post && content_type == "application/x-www-form-urlencoded"
929
+ if request.http_method == :post && content_type == "application/x-www-form-urlencoded"
930
930
  # Serializes the body in case a hash/array was passed. Noop if already string like
931
931
  encoder = Faraday::Request::UrlEncoded.new(->(_env) {})
932
932
  encoder.call env
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- module Signet #:nodoc:
15
+ module Signet # :nodoc:
16
16
  module OAuth1
17
17
  class Credential
18
18
  ##
@@ -152,12 +152,12 @@ module Signet
152
152
  # @return [Hash] normalized request components
153
153
  def verify_request_components options = {}
154
154
  if options[:request]
155
- if options[:request].is_a?(Faraday::Request) || options[:request].is_a?(Array)
155
+ if options[:request].is_a? Faraday::Request
156
156
  request = options[:request]
157
157
  elsif options[:adapter]
158
158
  request = options[:adapter].adapt_request options[:request]
159
159
  end
160
- method = request.method
160
+ method = request.http_method
161
161
  uri = request.path
162
162
  headers = request.headers
163
163
  body = request.body
@@ -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
 
@@ -1,7 +1,7 @@
1
1
  require "openssl"
2
2
  require "signet"
3
3
 
4
- module Signet #:nodoc:
4
+ module Signet # :nodoc:
5
5
  module OAuth1
6
6
  module HMACSHA1
7
7
  def self.generate_signature \
@@ -1,6 +1,6 @@
1
1
  require "signet"
2
2
 
3
- module Signet #:nodoc:
3
+ module Signet # :nodoc:
4
4
  module OAuth1
5
5
  module PLAINTEXT
6
6
  def self.generate_signature \
@@ -3,7 +3,7 @@ require "base64"
3
3
  require "openssl"
4
4
  require "signet"
5
5
 
6
- module Signet #:nodoc:
6
+ module Signet # :nodoc:
7
7
  module OAuth1
8
8
  module RSASHA1
9
9
  def self.generate_signature \
@@ -3,7 +3,7 @@ require "signet"
3
3
 
4
4
  require "securerandom"
5
5
 
6
- module Signet #:nodoc:
6
+ module Signet # :nodoc:
7
7
  module OAuth1
8
8
  OUT_OF_BAND = "oob".freeze
9
9
 
@@ -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
@@ -880,13 +881,13 @@ module Signet
880
881
  end
881
882
 
882
883
  def grant_type= new_grant_type
883
- case new_grant_type
884
- when "authorization_code", "refresh_token",
885
- "password", "client_credentials"
886
- @grant_type = new_grant_type
887
- else
888
- @grant_type = Addressable::URI.parse new_grant_type
889
- end
884
+ @grant_type =
885
+ case new_grant_type
886
+ when "authorization_code", "refresh_token", "password", "client_credentials"
887
+ new_grant_type
888
+ else
889
+ Addressable::URI.parse new_grant_type
890
+ end
890
891
  end
891
892
 
892
893
  def to_jwt options = {}
@@ -972,8 +973,8 @@ module Signet
972
973
  end
973
974
  parameters.merge! extension_parameters
974
975
  end
975
- parameters["client_id"] = client_id unless client_id.nil?
976
- parameters["client_secret"] = client_secret unless client_secret.nil?
976
+ parameters["client_id"] = client_id if !options[:use_basic_auth] && !client_id.nil?
977
+ parameters["client_secret"] = client_secret if !options[:use_basic_auth] && !client_secret.nil?
977
978
  if options[:scope]
978
979
  parameters["scope"] = options[:scope]
979
980
  elsif options[:use_configured_scope] && !scope.nil?
@@ -990,10 +991,18 @@ module Signet
990
991
  options = deep_hash_normalize options
991
992
 
992
993
  client = options[:connection] ||= Faraday.default_connection
993
- url = Addressable::URI.parse(token_credential_uri).normalize.to_s
994
+ url = Addressable::URI.parse token_credential_uri
994
995
  parameters = generate_access_token_request options
995
996
  if client.is_a? Faraday::Connection
996
- response = client.post url,
997
+ if options[:use_basic_auth]
998
+ # The Basic Auth middleware usage differs before and after Faraday v2
999
+ if Gem::Version.new(Faraday::VERSION).segments.first >= 2
1000
+ client.request :authorization, :basic, client_id, client_secret
1001
+ else
1002
+ client.request :basic_auth, client_id, client_secret
1003
+ end
1004
+ end
1005
+ response = client.post url.normalize.to_s,
997
1006
  Addressable::URI.form_encode(parameters),
998
1007
  "Content-Type" => "application/x-www-form-urlencoded"
999
1008
  status = response.status.to_i
@@ -1001,7 +1010,11 @@ module Signet
1001
1010
  content_type = response.headers["Content-type"]
1002
1011
  else
1003
1012
  # Hurley
1004
- response = client.post url, parameters
1013
+ if options[:use_basic_auth]
1014
+ url.user = client_id
1015
+ url.password = client_secret
1016
+ end
1017
+ response = client.post url.normalize.to_s, parameters
1005
1018
  status = response.status_code.to_i
1006
1019
  body = response.body
1007
1020
  content_type = response.header[:content_type]
@@ -16,7 +16,7 @@ require "base64"
16
16
  require "signet"
17
17
  require "multi_json"
18
18
 
19
- module Signet #:nodoc:
19
+ module Signet # :nodoc:
20
20
  ##
21
21
  # An implementation of http://tools.ietf.org/html/draft-ietf-oauth-v2-10
22
22
  #
@@ -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.15.0".freeze
16
+ VERSION = "0.17.0".freeze
17
17
  end
data/lib/signet.rb CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  require "signet/version"
16
16
 
17
- module Signet #:nodoc:
17
+ module Signet # :nodoc:
18
18
  def self.parse_auth_param_list auth_param_string
19
19
  # Production rules from:
20
20
  # http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-12