signet 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -36
  3. data/Gemfile +5 -4
  4. data/README.md +4 -5
  5. data/Rakefile +86 -37
  6. data/lib/signet.rb +17 -14
  7. data/lib/signet/errors.rb +4 -4
  8. data/lib/signet/oauth_1.rb +128 -153
  9. data/lib/signet/oauth_1/client.rb +309 -343
  10. data/lib/signet/oauth_1/credential.rb +40 -37
  11. data/lib/signet/oauth_1/server.rb +197 -203
  12. data/lib/signet/oauth_1/signature_methods/hmac_sha1.rb +11 -10
  13. data/lib/signet/oauth_1/signature_methods/plaintext.rb +8 -7
  14. data/lib/signet/oauth_1/signature_methods/rsa_sha1.rb +11 -11
  15. data/lib/signet/oauth_2.rb +41 -43
  16. data/lib/signet/oauth_2/client.rb +302 -313
  17. data/lib/signet/version.rb +2 -73
  18. data/signet.gemspec +37 -39
  19. data/spec/signet/oauth_1/client_spec.rb +313 -315
  20. data/spec/signet/oauth_1/credential_spec.rb +64 -56
  21. data/spec/signet/oauth_1/server_spec.rb +362 -362
  22. data/spec/signet/oauth_1/signature_methods/hmac_sha1_spec.rb +26 -26
  23. data/spec/signet/oauth_1/signature_methods/plaintext_spec.rb +28 -28
  24. data/spec/signet/oauth_1/signature_methods/rsa_sha1_spec.rb +34 -35
  25. data/spec/signet/oauth_1_spec.rb +527 -524
  26. data/spec/signet/oauth_2/client_spec.rb +612 -576
  27. data/spec/signet/oauth_2_spec.rb +88 -89
  28. data/spec/signet_spec.rb +41 -41
  29. data/spec/spec_helper.rb +7 -7
  30. data/spec/spec_helper_spec.rb +8 -8
  31. metadata +50 -43
  32. data/tasks/clobber.rake +0 -2
  33. data/tasks/gem.rake +0 -34
  34. data/tasks/git.rake +0 -40
  35. data/tasks/metrics.rake +0 -41
  36. data/tasks/spec.rake +0 -34
  37. data/tasks/wiki.rake +0 -38
  38. data/tasks/yard.rake +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee45b6d3e6075bfd1d1e5b2fae2830e0f981b2e70e7bb075422e51e20b12f4e8
4
- data.tar.gz: 3f019f83eda28d4e0a2b80da812c181f605eae19ecc5b138f9ceee2cfd686fbc
3
+ metadata.gz: c80485d96774a5d31447471f38ed3f976ed3cbc751f26d9758798adee4e3fced
4
+ data.tar.gz: 70a563487e412a15c01799c09ec1fed027152e024053272c15858743cf4a58ca
5
5
  SHA512:
6
- metadata.gz: 4e9f7704e31e89ecb6b8b24c6f09d1d13615cdfc7ba2d165384ab854be0f33c175bc38db7fd138070fdafff73d33676b96d8e1403b10128e811c25311cd15bf8
7
- data.tar.gz: 399c408f37ef1cd30d0e0d31dab9d80ebed8a917e659d252905f4d162511edf2f88d72e27cf8b0792794245ce8e06ae769c473aa94f4c559dcea9e222e221785
6
+ metadata.gz: e004219f1e71c272772bb4892574d8bcc2725fc8f3fb0b474612839661f0a272400ffff50149499b27f91d6287aaeb41fe1065d7bd2652a0f58cdd9f2f12e1da
7
+ data.tar.gz: 046c9e719091f1f8d17fc324762558b2e6cb00d9b74c0ad66ec4da5bda5d8ba2a2ba6f2e070baacd6af2853d2ca30c1ea198c8ec59bb6fcdf9f63ac11929df9c
@@ -1,27 +1,38 @@
1
- ## 0.11.0 (2018-10-08)
1
+ ### 0.12.0 / 2019-10-08
2
+
3
+ * This version now requires Ruby 2.4.
4
+ * Support array values of the "aud" field.
5
+ * Normalize the version constant to match related gems.
6
+
7
+ ### 0.11.0 / 2018-10-08
8
+
2
9
  * Add constant time comparison for oauth signatures.
3
10
 
4
- ## 0.10.0 (2018-09-21)
11
+ ### 0.10.0 / 2018-09-21
12
+
5
13
  * Add UnexpectedStatusError class for http status errors that are not handled.
6
14
 
7
- ## 0.9.2 (2018-09-12)
15
+ ### 0.9.2 / 2018-09-12
16
+
8
17
  * Update issued_at correctly when it is set simultaneously with expires_in.
9
18
 
10
- ## 0.9.1 (2018-08-29)
19
+ ### 0.9.1 / 2018-08-29
20
+
11
21
  * Warn on EOL ruby versions.
12
22
  * Fix DateTime normalization.
13
23
 
14
- ## 0.9.0 (2018-08-20)
24
+ ### 0.9.0 / 2018-08-20
25
+
15
26
  * Add RemoteServerError class for 5xx level errors.
16
27
  * Allow to_json to be called with arguments
17
28
  * Expires_in now sets and reflects current expires_at value
18
29
  * Expires_within(0) now returns false when expires_at is nil.
19
30
 
20
- ## 0.8.1 (2017-10-13)
31
+ ### 0.8.1 / 2017-10-13
21
32
 
22
33
  * Restore support for Ruby 1.9.3
23
34
 
24
- ## 0.8.0 (2017-10-12)
35
+ ### 0.8.0 / 2017-10-12
25
36
 
26
37
  * Ensure the "expires_at" attribute is recalculated on refresh (chutzimir)
27
38
  * Fix warnings on Ruby 2.4 (koic)
@@ -29,20 +40,20 @@
29
40
  * Provide signature verification algorithm for compatibility with ruby-jwt 2.0 (jurriaan)
30
41
  * Signet::OAuth2::Client#decoded_id_token can take a keyfinder block (mvastola)
31
42
 
32
- ## 0.7.3 (2016-06-20)
43
+ ### 0.7.3 / 2016-06-20
33
44
 
34
45
  * Fix timestamp parsing on 32-bit systems
35
46
  * Fix expiration check when issue/expiry times are nil
36
47
 
37
- ## 0.7.2 (2015-12-21)
48
+ ### 0.7.2 / 2015-12-21
38
49
 
39
50
  * Don't assume Faraday form encoding middleware is present
40
51
 
41
- ## 0.7.1 (2015-12-17)
52
+ ### 0.7.1 / 2015-12-17
42
53
 
43
54
  * Fix an issue with date parsing
44
55
 
45
- ## 0.7 (2015-12-06)
56
+ ### 0.7 / 2015-12-06
46
57
 
47
58
  * No longer overwrite SSL environment variables.
48
59
  * Tighten up date & URL (de)serialization for OAuth2 client
@@ -51,7 +62,7 @@
51
62
  * Add expires_within(sec) method to oauth2 client to facilitate proactive
52
63
  refreshes
53
64
 
54
- ## 0.6.1 (2015-06-08)
65
+ ### 0.6.1 / 2015-06-08
55
66
 
56
67
  * Fix language warnings for unused & shadowed variables ((@blowmage)[])
57
68
  * Update SSL cert path for OSX ((@gambaroff)[])
@@ -59,14 +70,14 @@
59
70
  * Fix incorrect parameter name in OAuth2 client docs ((@samuelreh)[])
60
71
  * Fix symbolization of URL parameter keys ((@swifthand)[])
61
72
 
62
- ## 0.6.0 (2014-12-05)
73
+ ### 0.6.0 / 2014-12-05
63
74
 
64
75
  * Drop support for ruby versions < 1.9.3
65
76
  * Update gem dependencies and lock down versions tighter
66
77
  * Allow form encoded responses when exchanging OAuth 2 authorization codes
67
78
  * Normalize options keys for indifferent access
68
79
 
69
- ## 0.5.1 (2014-06-08)
80
+ ### 0.5.1 / 2014-06-08
70
81
 
71
82
  * Allow Hash objects to be used to initialize authorization URI
72
83
  * Added PLAINTEXT and RSA-SHA1 signature methods to OAuth 1 support
@@ -74,53 +85,53 @@
74
85
  * The `approval_prompt` option no longer defaults to `:force`
75
86
  * The `approval_prompt` and `prompt` are now mutually exclusive.
76
87
 
77
- ## 0.5.0 (2013-05-31)
88
+ ### 0.5.0 / 2013-05-31
78
89
 
79
90
  * Switched to faraday 0.9.0
80
91
  * Added `expires_at` option
81
92
 
82
- ## 0.4.5
93
+ ### 0.4.5
83
94
 
84
95
  * Minor documentation fixes
85
96
  * Allow postmessage as a valid redirect_uri in OAuth 2
86
97
 
87
- ## 0.4.4
98
+ ### 0.4.4
88
99
 
89
100
  * Add support for assertion profile
90
101
 
91
- ## 0.4.3
102
+ ### 0.4.3
92
103
 
93
104
  * Added method to clear credentials
94
105
 
95
- ## 0.4.2
106
+ ### 0.4.2
96
107
 
97
108
  * Backwards compatibility for MultiJson
98
109
 
99
- ## 0.4.1
110
+ ### 0.4.1
100
111
 
101
112
  * Updated Launchy dependency
102
113
 
103
- ## 0.4.0
114
+ ### 0.4.0
104
115
 
105
116
  * Added OAuth 1 server implementation
106
117
  * Updated Faraday dependency
107
118
 
108
- ## 0.3.4
119
+ ### 0.3.4
109
120
 
110
121
  * Attempts to auto-detect CA cert location
111
122
 
112
- ## 0.3.3
123
+ ### 0.3.3
113
124
 
114
125
  * Request objects no longer recreated during processing
115
126
  * Faraday middleware now supported
116
127
  * Streamed requests now supported
117
128
  * Fixed assertion profiles; client ID/secret omission no longer an error
118
129
 
119
- ## 0.3.2
130
+ ### 0.3.2
120
131
 
121
132
  * Added audience security check for ID tokens
122
133
 
123
- ## 0.3.1
134
+ ### 0.3.1
124
135
 
125
136
  * Fixed a warning while determining grant type
126
137
  * Removed requirement that a connection be supplied when authorizing requests
@@ -128,52 +139,52 @@
128
139
  * Fixed some documentation stuff around markdown formatting
129
140
  * Added support for Google Code wiki format output when generating docs
130
141
 
131
- ## 0.3.0
142
+ ### 0.3.0
132
143
 
133
144
  * Replaced httpadapter gem dependency with faraday
134
145
  * Replaced json gem dependency with multi_json
135
146
  * Updated to OAuth 2.0 draft 22
136
147
  * Complete test coverage
137
148
 
138
- ## 0.2.4
149
+ ### 0.2.4
139
150
 
140
151
  * Updated to incorporate changes to the Google OAuth endpoints
141
152
 
142
- ## 0.2.3
153
+ ### 0.2.3
143
154
 
144
155
  * Added support for JWT-formatted ID tokens.
145
156
  * Added :issued_at option to #update_token! method.
146
157
 
147
- ## 0.2.2
158
+ ### 0.2.2
148
159
 
149
160
  * Lowered requirements for json gem
150
161
 
151
- ## 0.2.1
162
+ ### 0.2.1
152
163
 
153
164
  * Updated to keep in sync with the new httpadapter changes
154
165
 
155
- ## 0.2.0
166
+ ### 0.2.0
156
167
 
157
168
  * Added support for OAuth 2.0 draft 10
158
169
 
159
- ## 0.1.4
170
+ ### 0.1.4
160
171
 
161
172
  * Added support for a two-legged authorization flow
162
173
 
163
- ## 0.1.3
174
+ ### 0.1.3
164
175
 
165
176
  * Fixed issue with headers passed in as a Hash
166
177
  * Fixed incompatibilities with Ruby 1.8.6
167
178
 
168
- ## 0.1.2
179
+ ### 0.1.2
169
180
 
170
181
  * Fixed bug with overzealous normalization
171
182
 
172
- ## 0.1.1
183
+ ### 0.1.1
173
184
 
174
185
  * Fixed bug with missing StringIO require
175
186
  * Fixed issue with dependency on unreleased features of addressable
176
187
 
177
- ## 0.1.0
188
+ ### 0.1.0
178
189
 
179
190
  * Initial release
data/Gemfile CHANGED
@@ -1,7 +1,8 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'jruby-openssl', :platforms => :jruby
6
- gem 'hurley'
7
- gem 'bundler', '~> 1.15'
5
+ gem "bundler", ">= 1.15"
6
+ gem "gems", "~> 1.2"
7
+ gem "hurley"
8
+ gem "jruby-openssl", platforms: :jruby
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Signet
2
2
 
3
3
  <dl>
4
- <dt>Homepage</dt><dd><a href="http://code.google.com/p/oauth-signet/">http://code.google.com/p/oauth-signet/</a></dd>
4
+ <dt>Homepage</dt><dd><a href="https://github.com/googleapis/signet/">https://github.com/googleapis/signet/</a></dd>
5
5
  <dt>Author</dt><dd><a href="mailto:bobaman@google.com">Bob Aman</a></dd>
6
6
  <dt>Copyright</dt><dd>Copyright © 2010 Google, Inc.</dd>
7
7
  <dt>License</dt><dd>Apache 2.0</dd>
@@ -59,10 +59,9 @@ client.fetch_access_token!
59
59
  Be sure `https://rubygems.org` is in your gem sources.
60
60
 
61
61
  ## Supported Ruby Versions
62
- This library is currently supported on Ruby 1.9+.
63
- However, Ruby 2.4 or later is strongly recommended, as earlier releases have
64
- reached or are nearing end-of-life. After March 31, 2019, Google will provide
65
- official support only for Ruby versions that are considered current and
62
+
63
+ This library requires Ruby 2.4 or later.
64
+ In general, this library supports Ruby versions that are considered current and
66
65
  supported by Ruby Core (that is, Ruby versions that are either in normal
67
66
  maintenance or in security maintenance).
68
67
  See https://www.ruby-lang.org/en/downloads/branches/ for further details.
data/Rakefile CHANGED
@@ -1,42 +1,91 @@
1
- lib_dir = File.expand_path(File.join(File.dirname(__FILE__), "lib"))
2
- $:.unshift(lib_dir)
3
- $:.uniq!
4
-
5
- require 'rubygems'
6
- require 'rake'
1
+ require "rubygems"
2
+ require "json"
3
+ require "rake"
7
4
  require "bundler/gem_tasks"
8
5
 
9
- require File.join(File.dirname(__FILE__), 'lib/signet', 'version')
10
-
11
- PKG_DISPLAY_NAME = 'Signet'
12
- PKG_NAME = PKG_DISPLAY_NAME.downcase
13
- PKG_VERSION = Signet::VERSION::STRING
14
- PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
15
-
16
- RELEASE_NAME = "REL #{PKG_VERSION}"
17
-
18
- PKG_AUTHOR = "Bob Aman"
19
- PKG_AUTHOR_EMAIL = "bobaman@google.com"
20
- PKG_HOMEPAGE = "http://code.google.com/p/oauth-signet/"
21
- PKG_DESCRIPTION = <<-TEXT
22
- Signet is an OAuth 1.0 / OAuth 2.0 implementation.
23
- TEXT
24
- PKG_SUMMARY = PKG_DESCRIPTION
25
-
26
- PKG_FILES = FileList[
27
- "lib/**/*", "spec/**/*", "vendor/**/*",
28
- "tasks/**/*", "website/**/*",
29
- "[A-Z]*", "Rakefile"
30
- ].exclude(/database\.yml/).exclude(/[_\.]git$/).exclude(/Gemfile\.lock/)
31
-
32
- RCOV_ENABLED = !!(RUBY_PLATFORM != 'java' && RUBY_VERSION =~ /^1\.8/)
33
- if RCOV_ENABLED
34
- task :default => 'spec:rcov'
35
- else
36
- task :default => 'spec:normal'
6
+ task :release_gem, :tag do |_t, args|
7
+ tag = args[:tag]
8
+ raise "You must provide a tag to release." if tag.nil?
9
+
10
+ # Verify the tag format "vVERSION"
11
+ m = tag.match(/signet\/v(?<version>\S*)/)
12
+ raise "Tag #{tag} does not match the expected format." if m.nil?
13
+
14
+ version = m[:version]
15
+ raise "You must provide a version." if version.nil?
16
+
17
+ api_token = ENV["RUBYGEMS_API_TOKEN"]
18
+
19
+ require "gems"
20
+ if api_token
21
+ ::Gems.configure do |config|
22
+ config.key = api_token
23
+ end
24
+ end
25
+
26
+ Bundler.with_clean_env do
27
+ sh "rm -rf pkg"
28
+ sh "bundle update"
29
+ sh "bundle exec rake build"
30
+ end
31
+
32
+ path_to_be_pushed = "pkg/signet-#{version}.gem"
33
+ if File.file? path_to_be_pushed
34
+ begin
35
+ ::Gems.push File.new(path_to_be_pushed)
36
+ puts "Successfully built and pushed signet for version #{version}"
37
+ rescue StandardError => e
38
+ puts "Error while releasing signet version #{version}: #{e.message}"
39
+ end
40
+ else
41
+ raise "Cannot build signet for version #{version}"
42
+ end
37
43
  end
38
44
 
39
- WINDOWS = (RUBY_PLATFORM =~ /mswin|win32|mingw|bccwin|cygwin/) rescue false
40
- SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
45
+ task :ci do
46
+ header "Using Ruby - #{RUBY_VERSION}"
47
+ sh "bundle exec rubocop"
48
+ sh "bundle exec rspec"
49
+ end
41
50
 
42
- Dir['tasks/**/*.rake'].each { |rake| load rake }
51
+ namespace :kokoro do
52
+ task :load_env_vars do
53
+ service_account = "#{ENV['KOKORO_GFILE_DIR']}/service-account.json"
54
+ ENV["GOOGLE_APPLICATION_CREDENTIALS"] = service_account
55
+ filename = "#{ENV['KOKORO_GFILE_DIR']}/env_vars.json"
56
+ env_vars = JSON.parse File.read(filename)
57
+ env_vars.each { |k, v| ENV[k] = v }
58
+ end
59
+
60
+ task :presubmit do
61
+ Rake::Task["ci"].invoke
62
+ end
63
+
64
+ task :continuous do
65
+ Rake::Task["ci"].invoke
66
+ end
67
+
68
+ task :nightly do
69
+ Rake::Task["ci"].invoke
70
+ end
71
+
72
+ task :release do
73
+ version = "0.1.0"
74
+ Bundler.with_clean_env do
75
+ version = `bundle exec gem list`
76
+ .split("\n").select { |line| line.include? "signet" }
77
+ .first.split("(").last.split(")").first || "0.1.0"
78
+ end
79
+ Rake::Task["kokoro:load_env_vars"].invoke
80
+ Rake::Task["release_gem"].invoke "signet/v#{version}"
81
+ end
82
+ end
83
+
84
+ def header str, token = "#"
85
+ line_length = str.length + 8
86
+ puts ""
87
+ puts token * line_length
88
+ puts "#{token * 3} #{str} #{token * 3}"
89
+ puts token * line_length
90
+ puts ""
91
+ end
@@ -12,13 +12,15 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'signet/version'
15
+ require "signet/version"
16
16
 
17
17
  module Signet #:nodoc:
18
- def self.parse_auth_param_list(auth_param_string)
18
+ # rubocop:disable Metrics/AbcSize
19
+ # rubocop:disable Metrics/MethodLength
20
+ def self.parse_auth_param_list auth_param_string
19
21
  # Production rules from:
20
22
  # http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-12
21
- token = /[-!#$\%&'*+.^_`|~0-9a-zA-Z]+/
23
+ token = /[-!#{$OUTPUT_RECORD_SEPARATOR}%&'*+.^_`|~0-9a-zA-Z]+/
22
24
  d_qdtext = /[\s\x21\x23-\x5B\x5D-\x7E\x80-\xFF]/n
23
25
  d_quoted_pair = /\\[\s\x21-\x7E\x80-\xFF]/n
24
26
  d_qs = /"(?:#{d_qdtext}|#{d_quoted_pair})*"/
@@ -36,10 +38,10 @@ module Signet #:nodoc:
36
38
  #
37
39
  # This would be way easier in Ruby 1.9, but we want backwards
38
40
  # compatibility.
39
- while (match = remainder.match(auth_param))
41
+ while (match = remainder.match auth_param)
40
42
  if match.pre_match && match.pre_match !~ /^[\s,]*$/
41
43
  raise ParseError,
42
- "Unexpected auth param format: '#{auth_param_string}'."
44
+ "Unexpected auth param format: '#{auth_param_string}'."
43
45
  end
44
46
  auth_param_pairs << match.captures[0] # Appending pair
45
47
  remainder = match.post_match
@@ -47,24 +49,25 @@ module Signet #:nodoc:
47
49
  end
48
50
  if last_match.post_match && last_match.post_match !~ /^[\s,]*$/
49
51
  raise ParseError,
50
- "Unexpected auth param format: '#{auth_param_string}'."
52
+ "Unexpected auth param format: '#{auth_param_string}'."
51
53
  end
52
54
  # Now parse the auth-param pair strings & turn them into key-value pairs.
53
- return (auth_param_pairs.inject([]) do |accu, pair|
54
- name, value = pair.split('=', 2)
55
+ (auth_param_pairs.each_with_object [] do |pair, accu|
56
+ name, value = pair.split "=", 2
55
57
  if value =~ /^".*"$/
56
58
  value = value.gsub(/^"(.*)"$/, '\1').gsub(/\\(.)/, '\1')
57
59
  elsif value =~ /^'.*'$/
58
60
  value = value.gsub(/^'(.*)'$/, '\1').gsub(/\\(.)/, '\1')
59
- elsif value =~ /[\(\)<>@,;:\\\"\/\[\]?={}]/
61
+ elsif value =~ %r{[\(\)<>@,;:\\\"/\[\]?={}]}
60
62
  # Certain special characters are not allowed
61
- raise ParseError, (
62
- "Unexpected characters in auth param " +
63
- "list: '#{auth_param_string}'."
64
- )
63
+ raise ParseError,
64
+ "Unexpected characters in auth param " \
65
+ "list: '#{auth_param_string}'."
66
+
65
67
  end
66
68
  accu << [name, value]
67
- accu
68
69
  end)
69
70
  end
71
+ # rubocop:enable Metrics/AbcSize
72
+ # rubocop:enable Metrics/MethodLength
70
73
  end