oauth 0.6.2 → 1.1.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: 41420311334e3c3f5bf3c7c0523c10dae50d84ff4788e87c28765a72665a169a
4
- data.tar.gz: 58f1558f5d6c31c42405772c3ead07bfcc51754ceeff7c6b000f72b868833359
3
+ metadata.gz: 5ed78104bc98c911e6a9cf2a9e5472eb70a883396346379bcf0ca5ad9a5a5a6a
4
+ data.tar.gz: 918ffe268ffdd0a3e8cb29dda997f07ecef3156c53ff4dde82a68dec5325c8ae
5
5
  SHA512:
6
- metadata.gz: 478782009426a1dab385f9ea8702fed19b7795b3116a5a49b9e9a527374e1fa1b62657f4413aeac7e439f7f2f339e2623d6e2bd9dcf42daefbce43caa4078144
7
- data.tar.gz: 96195f350fba5187766484f3606016cd245f8cc26c9b1e7083ec11e00b4589cf57ee07d5c8a8097dd56e41c8476a3eaf52ecaa9bf67b5ad333e7a48a268e2992
6
+ metadata.gz: 5ecad352056ded301c816243d846d7628929db7cf10c320ab63627dadc5eb8aa427120f3e74824eb280f8d25e159c639fe16e6405f70d7b02b1ebbf081f0488c
7
+ data.tar.gz: 8cef46c071d1c2bc8e8a3c766477fa90ac76d61661d3131496e20dade1a199a1d9e2248dd41b022383f956f76a987d6579c3960cd4d437f7a143a3043cd086e0
data/CHANGELOG.md CHANGED
@@ -13,6 +13,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
13
 
14
14
  ### Removed
15
15
 
16
+ ## [1.1.0] 2022-08-29
17
+ ### Changed
18
+ * `OAuth::CLI` has been extracted to a new gem, `oauth-tty`, hosted on [Gitlab](https://gitlab.com/oauth-xx/oauth-tty)
19
+ * The public API of `oauth-tty` is backwards compatible (meaning `OAuth::CLI`)
20
+ * The change within the `oauth` gem is backwards compatible as `oauth-tty` has been added as a dependency
21
+ * Minor version bump is cautionary, as many lines of code have changed.
22
+ * `OAuth::Comsumer#options` hash is now handled by `snaky_hash`, which was extracted from `oauth2`
23
+ * symbolized keys, dot-access and snake-case are now normalized
24
+
25
+ ## [1.0.1] 2022-08-29
26
+ ### Changed
27
+ * `OAuth::Comsumer#options` hash is now handled by `snaky_hash`, which was extracted from `oauth2`
28
+ * symbolized keys, dot-access and snake-case are now normalized
29
+
30
+ ## [1.0.0] 2022-08-23
31
+ ### Changed
32
+ * Dropped support for Ruby < 2.7
33
+ * Dropped support for Rails < 6
34
+
35
+ ### Added
36
+ * New EOL Policy
37
+ * Non-commercial support for the oldest version of Ruby (which itself is going EOL) will be dropped each year in April
38
+
16
39
  ## [0.6.2] 2022-08-29
17
40
  ### Changed
18
41
  * `OAuth::Comsumer#options` hash is now handled by `snaky_hash`, which was extracted from `oauth2`
@@ -442,7 +465,10 @@ but please have a look at the unit tests.
442
465
  * Moved all non-Rails functionality from the Rails plugin:
443
466
  http://code.google.com/p/oauth-plugin/
444
467
 
445
- [Unreleased]: https://github.com/oauth-xx/oauth-ruby/compare/v0.6.2...v0.6-maintenance
468
+ [Unreleased]: https://github.com/oauth-xx/oauth-ruby/compare/v1.1.0...main
469
+ [1.1.0]: https://github.com/oauth-xx/oauth-ruby/releases/tag/v1.1.0
470
+ [1.0.1]: https://github.com/oauth-xx/oauth-ruby/releases/tag/v1.0.1
471
+ [1.0.0]: https://github.com/oauth-xx/oauth-ruby/releases/tag/v1.0.0
446
472
  [0.6.2]: https://github.com/oauth-xx/oauth-ruby/releases/tag/v0.6.2
447
473
  [0.6.1]: https://github.com/oauth-xx/oauth-ruby/releases/tag/v0.6.1
448
474
  [0.6.0]: https://github.com/oauth-xx/oauth-ruby/releases/tag/v0.6.0
data/CONTRIBUTING.md CHANGED
@@ -8,6 +8,23 @@ To submit a patch, please fork the project and create a patch with
8
8
  tests. Once you're happy with it send a pull request and post a message to the
9
9
  [google group][mailinglist].
10
10
 
11
+ ## Run tests
12
+
13
+ ### Against Rails 6
14
+
15
+ ```bash
16
+ BUNDLE_GEMFILE=gemfiles/a6.gemfile bundle install
17
+ BUNDLE_GEMFILE=gemfiles/a6.gemfile bundle exec rake
18
+ ```
19
+
20
+
21
+ ### Against Rails 7
22
+
23
+ ```bash
24
+ BUNDLE_GEMFILE=gemfiles/a7.gemfile bundle install
25
+ BUNDLE_GEMFILE=gemfiles/a7.gemfile bundle exec rake
26
+ ```
27
+
11
28
  ## Contributors
12
29
 
13
30
  [![Contributors](https://contrib.rocks/image?repo=oauth-xx/oauth-ruby)][contributors]
@@ -17,7 +34,7 @@ Made with [contributors-img][contrib-rocks].
17
34
  [comment]: <> (Following links are used by README, CONTRIBUTING, Homepage)
18
35
 
19
36
  [conduct]: https://github.com/oauth-xx/oauth-ruby/blob/main/CODE_OF_CONDUCT.md
20
- [contributing]: https://github.com/oauth-xx/oauth-ruby/blob/main/CONTRIBUTING.md
21
37
  [contributors]: https://github.com/oauth-xx/oauth-ruby/graphs/contributors
22
38
  [mailinglist]: http://groups.google.com/group/oauth-ruby
23
39
  [source]: https://github.com/oauth-xx/oauth-ruby/
40
+ [contrib-rocks]: https://contrib.rocks
data/LICENSE CHANGED
@@ -1,6 +1,7 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2007-2012, 2016-2017, 2020-2021 Blaine Cook, Larry Halff, Pelle Braendgaard, Peter Boling
3
+ Copyright (c) 2007-2012, 2016-2017 Blaine Cook, Larry Halff, Pelle Braendgaard
4
+ Copyright (c) 2020-2022 Peter Boling
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
7
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -20,11 +20,17 @@ See the sibling `oauth2` gem for OAuth 2.0 implementations in Ruby.
20
20
  [oauth1-spec]: http://oauth.net/core/1.0/
21
21
  [sibling-gem]: https://github.com/oauth-xx/oauth-ruby
22
22
 
23
- **NOTE**
23
+ **New EOL Policy**
24
24
 
25
- This README, on branch `v0.6-maintenance`, targets 0.6.x series releases.
26
- The v0.6.x series of releases will be EOL no later than April, 2024.
27
- For later releases please see the `main` branch README.
25
+ Versions 1.x will be EOL no later than April, 2025.
26
+ Versions 0.6.x will be EOL no later than April, 2024.
27
+ Versions 0.5.x will be EOL no later than April, 2023.
28
+
29
+ This will facilitate dropping support for old, dead, and crusty versions of Ruby.
30
+
31
+ Non-commercial support for the oldest version of Ruby (which itself is going EOL) will be dropped each year in April.
32
+
33
+ Please upgrade to version 1.1. The only breaking change in 1.x is dropping old Rubies.
28
34
 
29
35
  ## Status
30
36
 
@@ -57,10 +63,10 @@ appended indicators:
57
63
 
58
64
  | | Project | bundle add oauth |
59
65
  |:----|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
60
- | 1️⃣ | name, license, docs | [![RubyGems.org][⛳️name-img]][⛳️gem] [![License: MIT][🖇src-license-img]][🖇src-license] [![FOSSA][🏘fossa-img]][🏘fossa] [![RubyDoc.info][🚎yard-img]][🚎yard] [![InchCI][🖐inch-ci-img]][🚎yard] |
66
+ | 1️⃣ | name, license, docs | [![RubyGems.org][⛳️name-img]][⛳️gem] [![License: MIT][🖇src-license-img]][🖇src-license] [![RubyDoc.info][🚎yard-img]][🚎yard] |
61
67
  | 2️⃣ | version & activity | [![Gem Version][⛳️version-img]][⛳️gem] [![Total Downloads][🖇DL-total-img]][⛳️gem] [![Download Rank][🏘DL-rank-img]][⛳️gem] [![Source Code][🚎src-home-img]][🚎src-home] [![Open PRs][🖐prs-o-img]][🖐prs-o] [![Closed PRs][🧮prs-c-img]][🧮prs-c] <!--[![Next Version][📗next-img]][📗next]--> |
62
68
  | 3️⃣ | maintenance & linting | [![Maintainability][⛳cclim-maint-img♻️]][⛳cclim-maint] [![Helpers][🖇triage-help-img]][🖇triage-help] [![Depfu][🏘depfu-img♻️]][🏘depfu♻️] [![Contributors][🚎contributors-img]][🚎contributors] [![Style][🖐style-wf-img]][🖐style-wf] [![Kloc Roll][🧮kloc-img]][🧮kloc] |
63
- | 4️⃣ | testing | [![Open Issues][⛳iss-o-img]][⛳iss-o] [![Closed Issues][🖇iss-c-img]][🖇iss-c] [![Supported][🏘sup-wf-img]][🏘sup-wf] [![Heads][🚎heads-wf-img]][🚎heads-wf] [![Unofficial Support][🖐uns-wf-img]][🖐uns-wf] [![MacOS][🧮mac-wf-img]][🧮mac-wf] [![Windows][📗win-wf-img]][📗win-wf] |
69
+ | 4️⃣ | testing | [![Open Issues][⛳iss-o-img]][⛳iss-o] [![Closed Issues][🖇iss-c-img]][🖇iss-c] [![Supported][🏘sup-wf-img]][🏘sup-wf] [![Heads][🚎heads-wf-img]][🚎heads-wf] [![MacOS][🧮mac-wf-img]][🧮mac-wf] [![Windows][📗win-wf-img]][📗win-wf] |
64
70
  | 5️⃣ | coverage & security | [![CodeClimate][⛳cclim-cov-img♻️]][⛳cclim-cov] [![CodeCov][🖇codecov-img♻️]][🖇codecov] [![Coveralls][🏘coveralls-img]][🏘coveralls] [![Security Policy][🚎sec-pol-img]][🚎sec-pol] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Code Coverage][🧮cov-wf-img]][🧮cov-wf] |
65
71
  | 6️⃣ | resources | [![Discussion][⛳gh-discussions-img]][⛳gh-discussions] [![Get help on Codementor][🖇codementor-img]][🖇codementor] [![Chat][🏘chat-img]][🏘chat] [![Blog][🚎blog-img]][🚎blog] [![Blog][🖐wiki-img]][🖐wiki] |
66
72
  | 7️⃣ | spread 💖 | [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay] [![Sponsor Me][🖇sponsor-img]][🖇sponsor] [![Tweet @ Peter][🏘tweet-img]][🏘tweet] [🌏][aboutme] [👼][angelme] [💻][coderme] |
@@ -74,11 +80,8 @@ The link tokens in the following sections should be kept ordered by the row and
74
80
  [⛳️name-img]: https://img.shields.io/badge/name-oauth-brightgreen.svg?style=flat
75
81
  [🖇src-license]: https://opensource.org/licenses/MIT
76
82
  [🖇src-license-img]: https://img.shields.io/badge/License-MIT-green.svg
77
- [🏘fossa]: https://app.fossa.io/projects/git%2Bgithub.com%2Foauth-xx%2Foauth-ruby?ref=badge_shield
78
- [🏘fossa-img]: https://app.fossa.io/api/projects/git%2Bgithub.com%2Foauth-xx%2Foauth-ruby.svg?type=shield
79
83
  [🚎yard]: https://www.rubydoc.info/github/oauth-xx/oauth-ruby
80
84
  [🚎yard-img]: https://img.shields.io/badge/documentation-rubydoc-brightgreen.svg?style=flat
81
- [🖐inch-ci-img]: http://inch-ci.org/github/oauth-xx/oauth-ruby.png
82
85
 
83
86
  <!-- 2️⃣ version & activity -->
84
87
  [⛳️version-img]: http://img.shields.io/gem/v/oauth.svg
@@ -116,8 +119,6 @@ The link tokens in the following sections should be kept ordered by the row and
116
119
  [🏘sup-wf-img]: https://github.com/oauth-xx/oauth-ruby/actions/workflows/supported.yml/badge.svg
117
120
  [🚎heads-wf]: https://github.com/oauth-xx/oauth-ruby/actions/workflows/heads.yml
118
121
  [🚎heads-wf-img]: https://github.com/oauth-xx/oauth-ruby/actions/workflows/heads.yml/badge.svg
119
- [🖐uns-wf]: https://github.com/oauth-xx/oauth-ruby/actions/workflows/unsupported.yml
120
- [🖐uns-wf-img]: https://github.com/oauth-xx/oauth-ruby/actions/workflows/unsupported.yml/badge.svg
121
122
  [🧮mac-wf]: https://github.com/oauth-xx/oauth-ruby/actions/workflows/macos.yml
122
123
  [🧮mac-wf-img]: https://github.com/oauth-xx/oauth-ruby/actions/workflows/macos.yml/badge.svg
123
124
  [📗win-wf]: https://github.com/oauth-xx/oauth-ruby/actions/workflows/windows.yml
@@ -187,12 +188,12 @@ For more see [SECURITY.md][🚎sec-pol].
187
188
  ## Compatibility
188
189
 
189
190
  Targeted ruby compatibility is non-EOL versions of Ruby, currently 2.7, 3.0, and
190
- 3.1. Ruby is limited to 2.4+ in the gemspec, and this will change with minor version bumps,
191
+ 3.1. Ruby is limited to 2.7+ in the gemspec, and this will change with minor version bumps,
191
192
  while the gem is still in 0.x, in accordance with the SemVer spec.
192
193
 
193
- The `main` branch now targets 1.0.x releases.
194
- See `v0.6-maintenance` branch for Ruby >= 2.4.
195
- See `v0.5-maintenance` branch for Ruby >= 2.0.
194
+ The `main` branch now targets 1.x releases, for Ruby >= 2.7.
195
+ See `v0.6-maintenance` (EOL April, 2024) branch for Ruby >= 2.4.
196
+ See `v0.5-maintenance` (EOL April, 2023) branch for Ruby >= 2.0.
196
197
 
197
198
  NOTE: No further releases of version < 1.0.x are anticipated.
198
199
 
@@ -224,12 +225,12 @@ fashion. If critical issues for a particular implementation exist at the time
224
225
  of a major release, support for that Ruby version may be dropped.
225
226
  </details>
226
227
 
227
- | | Ruby OAuth Version | Maintenance Branch | 🚂 Compatibility | Official 💎 | Unofficial 💎 | Incidental 💎 |
228
- |:----|--------------------|--------------------|------------------------|----------------------|------------------------------|---------------|
229
- | 1️⃣ | 1.0.x | `main` | Rails 6, 7 | 2.7, 3.0, 3.1 | sorry, not sorry | nope |
230
- | 2️⃣ | 0.6.x | `v0.6-maintenance` | Rails 5, 6, 7 | 2.7, 3.0, 3.1 | 2.5, 2.6 | 2.4 |
231
- | 3️⃣ | 0.5.x | `v0.5-maintenance` | Rails 2, 3, 4, 5, 6, 7 | 2.7, 3.0, 3.1 | 2.1, 2.2, 2.3, 2.4, 2.5, 2.6 | 2.0 |
232
- | 4️⃣ | older | N/A | | Best of luck to you! | Please upgrade! | noop |
228
+ | | Ruby OAuth Version | Maintenance Branch | EOL | 🚂 Compatibility | Official 💎 | Unofficial 💎 | Incidental 💎 |
229
+ |:----|--------------------|--------------------|-----------|------------------------|----------------------|------------------------------|---------------|
230
+ | 1️⃣ | 1.0.x | `main` | | Rails 6, 7 | 2.7, 3.0, 3.1 | sorry, not sorry | nope |
231
+ | 2️⃣ | 0.6.x | `v0.6-maintenance` | 04/2024 | Rails 5, 6, 7 | 2.7, 3.0, 3.1 | 2.5, 2.6 | 2.4 |
232
+ | 3️⃣ | 0.5.x | `v0.5-maintenance` | 04/2023 | Rails 2, 3, 4, 5, 6, 7 | 2.7, 3.0, 3.1 | 2.1, 2.2, 2.3, 2.4, 2.5, 2.6 | 2.0 |
233
+ | 4️⃣ | older | N/A | yesterday | | Best of luck to you! | Please upgrade! | noop |
233
234
 
234
235
  NOTE: Once 1.0 is released, the 0.x series will only receive critical bug and security updates.
235
236
  See [SECURITY.md][🚎sec-pol]
@@ -247,7 +248,11 @@ gem. After extraction that gem was made to depend on this gem.
247
248
 
248
249
  Unfortunately, this gem does have some Rails related bits that are
249
250
  **optional** to load. You don't need Rails! The Rails bits may be pulled out
250
- into a separate gem with the release of version 1.0 of this gem.
251
+ into a separate gem with the 1.x minor updates of this gem.
252
+
253
+ ## Extensions
254
+
255
+ * [oauth-tty (on Gitlab)](https://gitlab.com/oauth-xx/oauth-tty) ([rubygems.org](https://rubygems.org/gems/oauth-tty))
251
256
 
252
257
  ## Usage
253
258
 
@@ -319,6 +324,8 @@ See [CONTRIBUTING.md][contributing]
319
324
 
320
325
  Made with [contributors-img][contrib-rocks].
321
326
 
327
+ [contrib-rocks]: https://contrib.rocks
328
+
322
329
  ## Versioning
323
330
 
324
331
  This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations of this scheme should be reported as
@@ -332,7 +339,7 @@ the [Pessimistic Version Constraint][pvc] with two digits of precision.
332
339
  For example:
333
340
 
334
341
  ```ruby
335
- spec.add_dependency "oauth", "~> 0.6.2"
342
+ spec.add_dependency "oauth", "~> 1.1"
336
343
  ```
337
344
 
338
345
  ## License
data/SECURITY.md CHANGED
@@ -2,11 +2,17 @@
2
2
 
3
3
  ## Supported Versions
4
4
 
5
- | Version | Supported |
6
- |---------|--------------------|
7
- | 0.6.x | :white_check_mark: |
8
- | 0.5.x | :white_check_mark: |
9
- | <= 0.5 | :x: |
5
+ | Version | Supported | EOL |
6
+ |---------|--------------------|---------|
7
+ | 1.1.x | :white_check_mark: | 04/2025 |
8
+ | 1.0.x | :white_check_mark: | 04/2025 |
9
+ | 0.6.x | :white_check_mark: | 04/2024 |
10
+ | 0.5.x | :white_check_mark: | 04/2023 |
11
+ | <= 0.5 | :x: | :x: |
12
+
13
+ ### EOL Policy
14
+
15
+ Non-commercial support for the oldest version of Ruby (which itself is going EOL) will be dropped each year in April.
10
16
 
11
17
  ## Reporting a Vulnerability
12
18
 
@@ -84,9 +84,7 @@ module EventMachine
84
84
  else
85
85
  query.to_s
86
86
  end
87
- unless uri_query.to_s.empty?
88
- combined_query = [combined_query, uri_query].reject(&:empty?).join("&")
89
- end
87
+ combined_query = [combined_query, uri_query].reject(&:empty?).join("&") unless uri_query.to_s.empty?
90
88
  combined_query.to_s.empty? ? path : "#{path}?#{combined_query}"
91
89
  end
92
90
 
@@ -162,9 +162,7 @@ module OAuth
162
162
  def get_request_token(request_options = {}, *arguments, &block)
163
163
  # if oauth_callback wasn't provided, it is assumed that oauth_verifiers
164
164
  # will be exchanged out of band
165
- unless request_options[:exclude_callback]
166
- request_options[:oauth_callback] ||= OAuth::OUT_OF_BAND
167
- end
165
+ request_options[:oauth_callback] ||= OAuth::OUT_OF_BAND unless request_options[:exclude_callback]
168
166
 
169
167
  response = if block
170
168
  token_request(
@@ -389,13 +387,9 @@ module OAuth
389
387
  end
390
388
 
391
389
  http_object.read_timeout = http_object.open_timeout = @options[:timeout] || 60
392
- if @options[:open_timeout]
393
- http_object.open_timeout = @options[:open_timeout]
394
- end
390
+ http_object.open_timeout = @options[:open_timeout] if @options[:open_timeout]
395
391
  http_object.ssl_version = @options[:ssl_version] if @options[:ssl_version]
396
- if @options[:ssl_client_cert]
397
- http_object.cert = @options[:ssl_client_cert]
398
- end
392
+ http_object.cert = @options[:ssl_client_cert] if @options[:ssl_client_cert]
399
393
  http_object.key = @options[:ssl_client_key] if @options[:ssl_client_key]
400
394
  http_object.set_debug_output(debug_output) if debug_output
401
395
 
@@ -412,9 +406,7 @@ module OAuth
412
406
  # only add if the site host matches the current http object's host
413
407
  # (in case we've specified a full url for token requests)
414
408
  uri = URI.parse(site)
415
- if uri.path && uri.path != "/" && uri.host == http.address
416
- path = uri.path + path
417
- end
409
+ path = uri.path + path if uri.path && uri.path != "/" && uri.host == http.address
418
410
 
419
411
  headers = arguments.first.is_a?(Hash) ? arguments.shift : {}
420
412
 
@@ -1,36 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_support"
4
- require "active_support/version"
5
4
  require "action_controller"
6
5
  require "uri"
7
6
 
8
- if Gem::Version.new(ActiveSupport::VERSION::STRING) < Gem::Version.new("3")
9
- # rails 2.x
10
- require "action_controller/request"
11
- unless ActionController::Request::HTTP_METHODS.include?("patch")
12
- ActionController::Request::HTTP_METHODS << "patch"
13
- ActionController::Request::HTTP_METHOD_LOOKUP["PATCH"] = :patch
14
- ActionController::Request::HTTP_METHOD_LOOKUP["patch"] = :patch
15
- end
16
-
17
- elsif Gem::Version.new(ActiveSupport::VERSION::STRING) < Gem::Version.new("4")
18
- # rails 3.x
19
- require "action_dispatch/http/request"
20
- unless ActionDispatch::Request::HTTP_METHODS.include?("patch")
21
- ActionDispatch::Request::HTTP_METHODS << "patch"
22
- ActionDispatch::Request::HTTP_METHOD_LOOKUP["PATCH"] = :patch
23
- ActionDispatch::Request::HTTP_METHOD_LOOKUP["patch"] = :patch
24
- end
25
-
26
- else # rails 4.x and later - already has patch
27
- require "action_dispatch/http/request"
28
- end
7
+ require "action_dispatch/http/request"
29
8
 
30
9
  module OAuth
31
10
  module RequestProxy
32
11
  class ActionControllerRequest < OAuth::RequestProxy::Base
33
- proxies(defined?(::ActionDispatch::AbstractRequest) ? ::ActionDispatch::AbstractRequest : ::ActionDispatch::Request)
12
+ proxies(::ActionDispatch::Request)
34
13
 
35
14
  def method
36
15
  request.method.to_s.upcase
@@ -50,7 +29,7 @@ module OAuth
50
29
  end
51
30
  end
52
31
 
53
- # Override from OAuth::RequestProxy::Base to avoid roundtrip
32
+ # Override from OAuth::RequestProxy::Base to avoid round-trip
54
33
  # conversion to Hash or Array and thus preserve the original
55
34
  # parameter names
56
35
  def parameters_for_signature
@@ -69,9 +69,7 @@ module OAuth
69
69
  end
70
70
 
71
71
  def auth_header_params
72
- unless request["Authorization"] && request["Authorization"][0, 5] == "OAuth"
73
- return nil
74
- end
72
+ return nil unless request["Authorization"] && request["Authorization"][0, 5] == "OAuth"
75
73
 
76
74
  request["Authorization"]
77
75
  end
@@ -31,9 +31,7 @@ module OAuth
31
31
  @consumer_secret = options[:consumer].secret if options[:consumer]
32
32
 
33
33
  # presence of :consumer_secret option will override any Consumer that's provided
34
- if options[:consumer_secret]
35
- @consumer_secret = options[:consumer_secret]
36
- end
34
+ @consumer_secret = options[:consumer_secret] if options[:consumer_secret]
37
35
 
38
36
  ## token secret was determined beforehand
39
37
 
data/lib/oauth/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OAuth
4
4
  module Version
5
- VERSION = "0.6.2"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pelle Braendgaard
@@ -18,6 +18,26 @@ bindir: bin
18
18
  cert_chain: []
19
19
  date: 2022-08-29 00:00:00.000000000 Z
20
20
  dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: oauth-tty
23
+ requirement: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.0'
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 1.0.1
31
+ type: :runtime
32
+ prerelease: false
33
+ version_requirements: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - "~>"
36
+ - !ruby/object:Gem::Version
37
+ version: '1.0'
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.1
21
41
  - !ruby/object:Gem::Dependency
22
42
  name: snaky_hash
23
43
  requirement: !ruby/object:Gem::Requirement
@@ -164,14 +184,14 @@ dependencies:
164
184
  requirements:
165
185
  - - "~>"
166
186
  - !ruby/object:Gem::Version
167
- version: '12.0'
187
+ version: '18.0'
168
188
  type: :development
169
189
  prerelease: false
170
190
  version_requirements: !ruby/object:Gem::Requirement
171
191
  requirements:
172
192
  - - "~>"
173
193
  - !ruby/object:Gem::Version
174
- version: '12.0'
194
+ version: '18.0'
175
195
  - !ruby/object:Gem::Dependency
176
196
  name: typhoeus
177
197
  requirement: !ruby/object:Gem::Requirement
@@ -192,18 +212,17 @@ dependencies:
192
212
  requirements:
193
213
  - - "<="
194
214
  - !ruby/object:Gem::Version
195
- version: 3.14.0
215
+ version: 3.19.0
196
216
  type: :development
197
217
  prerelease: false
198
218
  version_requirements: !ruby/object:Gem::Requirement
199
219
  requirements:
200
220
  - - "<="
201
221
  - !ruby/object:Gem::Version
202
- version: 3.14.0
222
+ version: 3.19.0
203
223
  description:
204
224
  email: oauth-ruby@googlegroups.com
205
- executables:
206
- - oauth
225
+ executables: []
207
226
  extensions: []
208
227
  extra_rdoc_files:
209
228
  - TODO
@@ -215,15 +234,7 @@ files:
215
234
  - README.md
216
235
  - SECURITY.md
217
236
  - TODO
218
- - bin/oauth
219
237
  - lib/oauth.rb
220
- - lib/oauth/cli.rb
221
- - lib/oauth/cli/authorize_command.rb
222
- - lib/oauth/cli/base_command.rb
223
- - lib/oauth/cli/help_command.rb
224
- - lib/oauth/cli/query_command.rb
225
- - lib/oauth/cli/sign_command.rb
226
- - lib/oauth/cli/version_command.rb
227
238
  - lib/oauth/client.rb
228
239
  - lib/oauth/client/action_controller_request.rb
229
240
  - lib/oauth/client/em_http.rb
@@ -268,18 +279,18 @@ licenses:
268
279
  - MIT
269
280
  metadata:
270
281
  homepage_uri: https://github.com/oauth-xx/oauth-ruby
271
- source_code_uri: https://github.com/oauth-xx/oauth-ruby/tree/v0.6.2
272
- changelog_uri: https://github.com/oauth-xx/oauth-ruby/blob/v0.6.2/CHANGELOG.md
282
+ source_code_uri: https://github.com/oauth-xx/oauth-ruby/tree/v1.1.0
283
+ changelog_uri: https://github.com/oauth-xx/oauth-ruby/blob/v1.1.0/CHANGELOG.md
273
284
  bug_tracker_uri: https://github.com/oauth-xx/oauth-ruby/issues
274
- documentation_uri: https://www.rubydoc.info/gems/oauth/0.6.2
285
+ documentation_uri: https://www.rubydoc.info/gems/oauth/1.1.0
275
286
  wiki_uri: https://github.com/oauth-xx/oauth-ruby/wiki
276
287
  rubygems_mfa_required: 'true'
277
288
  post_install_message: |2
278
289
 
279
- You have installed oauth version 0.6.2, congratulations!
290
+ You have installed oauth version 1.1.0, congratulations!
280
291
 
281
- Non-commercial support for the 0.6.x series will end by April, 2024. Please upgrade to 1.0.x as soon as possible!
282
- The only breaking change will be dropped support for Ruby 2.4, 2.5, and 2.6.
292
+ Non-commercial support for the 1.x series will end by April, 2025. Please make a plan to upgrade to the next version prior to that date.
293
+ The only breaking change will be dropped support for Ruby 2.7 and any other versions which will also have reached EOL by then.
283
294
 
284
295
  Please see:
285
296
  • https://github.com/oauth-xx/oauth-ruby/blob/main/SECURITY.md
@@ -307,7 +318,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
307
318
  requirements:
308
319
  - - ">="
309
320
  - !ruby/object:Gem::Version
310
- version: '2.4'
321
+ version: '2.7'
311
322
  required_rubygems_version: !ruby/object:Gem::Requirement
312
323
  requirements:
313
324
  - - ">="
data/bin/oauth DELETED
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require "oauth"
5
- require "oauth/cli"
6
-
7
- # don't dump a backtrace on a ^C
8
- Signal.trap("INT") do
9
- puts
10
- exit(1)
11
- end
12
- ARGV << "help" if ARGV.empty?
13
- command = ARGV.shift
14
-
15
- OAuth::CLI.new($stdout, $stdin, $stderr, command, ARGV).run
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OAuth
4
- class CLI
5
- class AuthorizeCommand < BaseCommand
6
- def required_options
7
- [:uri]
8
- end
9
-
10
- def _run
11
- request_token = get_request_token
12
-
13
- if request_token.callback_confirmed?
14
- puts "Server appears to support OAuth 1.0a; enabling support."
15
- options[:version] = "1.0a"
16
- end
17
-
18
- puts "Please visit this url to authorize:"
19
- puts request_token.authorize_url
20
-
21
- # parameters for OAuth 1.0a
22
- oauth_verifier = ask_user_for_verifier
23
-
24
- verbosely_get_access_token(request_token, oauth_verifier)
25
- end
26
-
27
- def get_request_token
28
- consumer = get_consumer
29
- scope_options = options[:scope] ? { "scope" => options[:scope] } : {}
30
- consumer.get_request_token({ oauth_callback: options[:oauth_callback] }, scope_options)
31
- rescue OAuth::Unauthorized => e
32
- alert "A problem occurred while attempting to authorize:"
33
- alert e
34
- alert e.request.body
35
- end
36
-
37
- def get_consumer
38
- OAuth::Consumer.new \
39
- options[:oauth_consumer_key],
40
- options[:oauth_consumer_secret],
41
- access_token_url: options[:access_token_url],
42
- authorize_url: options[:authorize_url],
43
- request_token_url: options[:request_token_url],
44
- scheme: options[:scheme],
45
- http_method: options[:method].to_s.downcase.to_sym
46
- end
47
-
48
- def ask_user_for_verifier
49
- if options[:version] == "1.0a"
50
- puts "Please enter the verification code provided by the SP (oauth_verifier):"
51
- @stdin.gets.chomp
52
- else
53
- puts "Press return to continue..."
54
- @stdin.gets
55
- nil
56
- end
57
- end
58
-
59
- def verbosely_get_access_token(request_token, oauth_verifier)
60
- access_token = request_token.get_access_token(oauth_verifier: oauth_verifier)
61
-
62
- puts "Response:"
63
- access_token.params.each do |k, v|
64
- puts " #{k}: #{v}" unless k.is_a?(Symbol)
65
- end
66
- rescue OAuth::Unauthorized => e
67
- alert "A problem occurred while attempting to obtain an access token:"
68
- alert e
69
- alert e.request.body
70
- end
71
- end
72
- end
73
- end
@@ -1,214 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OAuth
4
- class CLI
5
- class BaseCommand
6
- def initialize(stdout, stdin, stderr, arguments)
7
- @stdout = stdout
8
- @stdin = stdin
9
- @stderr = stderr
10
-
11
- @options = {}
12
- option_parser.parse!(arguments)
13
- end
14
-
15
- def run
16
- missing = required_options - options.keys
17
- if missing.empty?
18
- _run
19
- else
20
- show_missing(missing)
21
- puts option_parser.help
22
- end
23
- end
24
-
25
- def required_options
26
- []
27
- end
28
-
29
- protected
30
-
31
- attr_reader :options
32
-
33
- def show_missing(array)
34
- array = array.map { |s| "--#{s}" }.join(" ")
35
- OAuth::CLI.puts_red "Options missing to OAuth CLI: #{array}"
36
- end
37
-
38
- def xmpp?
39
- options[:xmpp]
40
- end
41
-
42
- def verbose?
43
- options[:verbose]
44
- end
45
-
46
- def puts(string = nil)
47
- @stdout.puts(string)
48
- end
49
-
50
- def alert(string = nil)
51
- @stderr.puts(string)
52
- end
53
-
54
- def parameters
55
- @parameters ||= begin
56
- escaped_pairs = options[:params].collect do |pair|
57
- if /:/.match?(pair)
58
- Hash[*pair.split(":", 2)].collect do |k, v|
59
- [CGI.escape(k.strip), CGI.escape(v.strip)].join("=")
60
- end
61
- else
62
- pair
63
- end
64
- end
65
-
66
- querystring = escaped_pairs * "&"
67
- cli_params = CGI.parse(querystring)
68
-
69
- {
70
- "oauth_consumer_key" => options[:oauth_consumer_key],
71
- "oauth_nonce" => options[:oauth_nonce],
72
- "oauth_timestamp" => options[:oauth_timestamp],
73
- "oauth_token" => options[:oauth_token],
74
- "oauth_signature_method" => options[:oauth_signature_method],
75
- "oauth_version" => options[:oauth_version]
76
- }.reject { |_k, v| v.nil? || v == "" }.merge(cli_params)
77
- end
78
- end
79
-
80
- def option_parser
81
- @option_parser ||= OptionParser.new do |opts|
82
- opts.banner = "Usage: oauth <command> [ARGS]"
83
-
84
- _option_parser_defaults
85
- _option_parser_common(opts)
86
- _option_parser_sign_and_query(opts)
87
- _option_parser_authorization(opts)
88
- end
89
- end
90
-
91
- def _option_parser_defaults
92
- options[:oauth_nonce] = OAuth::Helper.generate_key
93
- options[:oauth_signature_method] = "HMAC-SHA1"
94
- options[:oauth_timestamp] = OAuth::Helper.generate_timestamp
95
- options[:oauth_version] = "1.0"
96
- options[:method] = :post
97
- options[:params] = []
98
- options[:scheme] = :header
99
- options[:version] = "1.0"
100
- end
101
-
102
- def _option_parser_common(opts)
103
- ## Common Options
104
-
105
- opts.on("-B", "--body", "Use the request body for OAuth parameters.") do
106
- options[:scheme] = :body
107
- end
108
-
109
- opts.on("--consumer-key KEY", "Specifies the consumer key to use.") do |v|
110
- options[:oauth_consumer_key] = v
111
- end
112
-
113
- opts.on("--consumer-secret SECRET", "Specifies the consumer secret to use.") do |v|
114
- options[:oauth_consumer_secret] = v
115
- end
116
-
117
- opts.on("-H", "--header", "Use the 'Authorization' header for OAuth parameters (default).") do
118
- options[:scheme] = :header
119
- end
120
-
121
- opts.on("-Q", "--query-string", "Use the query string for OAuth parameters.") do
122
- options[:scheme] = :query_string
123
- end
124
-
125
- opts.on("-O", "--options FILE", "Read options from a file") do |v|
126
- arguments = open(v).readlines.map { |l| l.chomp.split }.flatten
127
- options2 = parse_options(arguments)
128
- options.merge!(options2)
129
- end
130
- end
131
-
132
- def _option_parser_sign_and_query(opts)
133
- opts.separator("\n options for signing and querying")
134
-
135
- opts.on("--method METHOD", "Specifies the method (e.g. GET) to use when signing.") do |v|
136
- options[:method] = v
137
- end
138
-
139
- opts.on("--nonce NONCE", "Specifies the nonce to use.") do |v|
140
- options[:oauth_nonce] = v
141
- end
142
-
143
- opts.on("--parameters PARAMS", "Specifies the parameters to use when signing.") do |v|
144
- options[:params] << v
145
- end
146
-
147
- opts.on("--signature-method METHOD", "Specifies the signature method to use; defaults to HMAC-SHA1.") do |v|
148
- options[:oauth_signature_method] = v
149
- end
150
-
151
- opts.on("--token TOKEN", "Specifies the token to use.") do |v|
152
- options[:oauth_token] = v
153
- end
154
-
155
- opts.on("--secret SECRET", "Specifies the token secret to use.") do |v|
156
- options[:oauth_token_secret] = v
157
- end
158
-
159
- opts.on("--timestamp TIMESTAMP", "Specifies the timestamp to use.") do |v|
160
- options[:oauth_timestamp] = v
161
- end
162
-
163
- opts.on("--realm REALM", "Specifies the realm to use.") do |v|
164
- options[:realm] = v
165
- end
166
-
167
- opts.on("--uri URI", "Specifies the URI to use when signing.") do |v|
168
- options[:uri] = v
169
- end
170
-
171
- opts.on("--version [VERSION]", "Specifies the OAuth version to use.") do |v|
172
- options[:oauth_version] = v
173
- end
174
-
175
- opts.on("--no-version", "Omit oauth_version.") do
176
- options[:oauth_version] = nil
177
- end
178
-
179
- opts.on("--xmpp", "Generate XMPP stanzas.") do
180
- options[:xmpp] = true
181
- options[:method] ||= "iq"
182
- end
183
-
184
- opts.on("-v", "--verbose", "Be verbose.") do
185
- options[:verbose] = true
186
- end
187
- end
188
-
189
- def _option_parser_authorization(opts)
190
- opts.separator("\n options for authorization")
191
-
192
- opts.on("--access-token-url URL", "Specifies the access token URL.") do |v|
193
- options[:access_token_url] = v
194
- end
195
-
196
- opts.on("--authorize-url URL", "Specifies the authorization URL.") do |v|
197
- options[:authorize_url] = v
198
- end
199
-
200
- opts.on("--callback-url URL", "Specifies a callback URL.") do |v|
201
- options[:oauth_callback] = v
202
- end
203
-
204
- opts.on("--request-token-url URL", "Specifies the request token URL.") do |v|
205
- options[:request_token_url] = v
206
- end
207
-
208
- opts.on("--scope SCOPE", "Specifies the scope (Google-specific).") do |v|
209
- options[:scope] = v
210
- end
211
- end
212
- end
213
- end
214
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OAuth
4
- class CLI
5
- class HelpCommand < BaseCommand
6
- def run
7
- puts <<-EOT
8
- Usage: oauth COMMAND [ARGS]
9
-
10
- Available oauth commands are:
11
- a, authorize Obtain an access token and secret for a user
12
- q, query Query a protected resource
13
- s, sign Generate an OAuth signature
14
-
15
- In addition to those, there are:
16
- v, version Displays the current version of the library (or --version, -v)
17
- h, help Displays this help (or --help, -h)
18
-
19
- Tip: All commands can be run without args for specific help.
20
-
21
-
22
- EOT
23
- end
24
- end
25
- end
26
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OAuth
4
- class CLI
5
- class QueryCommand < BaseCommand
6
- extend OAuth::Helper
7
-
8
- def required_options
9
- %i[oauth_consumer_key oauth_consumer_secret oauth_token oauth_token_secret]
10
- end
11
-
12
- def _run
13
- consumer = OAuth::Consumer.new(options[:oauth_consumer_key], options[:oauth_consumer_secret],
14
- scheme: options[:scheme])
15
-
16
- access_token = OAuth::AccessToken.new(consumer, options[:oauth_token], options[:oauth_token_secret])
17
-
18
- # append params to the URL
19
- uri = URI.parse(options[:uri])
20
- params = parameters.map do |k, v|
21
- Array(v).map do |v2|
22
- "#{OAuth::Helper.escape(k)}=#{OAuth::Helper.escape(v2)}"
23
- end * "&"
24
- end
25
- uri.query = [uri.query, *params].compact * "&"
26
- puts uri.to_s
27
-
28
- response = access_token.request(options[:method].to_s.downcase.to_sym, uri.to_s)
29
- puts "#{response.code} #{response.message}"
30
- puts response.body
31
- end
32
- end
33
- end
34
- end
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OAuth
4
- class CLI
5
- class SignCommand < BaseCommand
6
- def required_options
7
- %i[oauth_consumer_key oauth_consumer_secret oauth_token oauth_token_secret]
8
- end
9
-
10
- def _run
11
- request = OAuth::RequestProxy.proxy \
12
- "method" => options[:method],
13
- "uri" => options[:uri],
14
- "parameters" => parameters
15
-
16
- puts_verbose_parameters(request) if verbose?
17
-
18
- request.sign! \
19
- consumer_secret: options[:oauth_consumer_secret],
20
- token_secret: options[:oauth_token_secret]
21
-
22
- if verbose?
23
- puts_verbose_request(request)
24
- else
25
- puts request.oauth_signature
26
- end
27
- end
28
-
29
- def puts_verbose_parameters(request)
30
- puts "OAuth parameters:"
31
- request.oauth_parameters.each do |k, v|
32
- puts " #{[k, v].join(": ")}"
33
- end
34
- puts
35
-
36
- if request.non_oauth_parameters.any?
37
- puts "Parameters:"
38
- request.non_oauth_parameters.each do |k, v|
39
- puts " #{[k, v].join(": ")}"
40
- end
41
- puts
42
- end
43
- end
44
-
45
- def puts_verbose_request(request)
46
- puts "Method: #{request.method}"
47
- puts "URI: #{request.uri}"
48
- unless options[:xmpp]
49
- puts "Normalized params: #{request.normalized_parameters}"
50
- end
51
- puts "Signature base string: #{request.signature_base_string}"
52
-
53
- if xmpp?
54
- puts
55
- puts "XMPP Stanza:"
56
- puts xmpp_output(request)
57
- puts
58
- puts "Note: You may want to use bare JIDs in your URI."
59
- puts
60
- else
61
- puts "OAuth Request URI: #{request.signed_uri}"
62
- puts "Request URI: #{request.signed_uri(with_oauth: false)}"
63
- puts "Authorization header: #{request.oauth_header(realm: options[:realm])}"
64
- end
65
- puts "Signature: #{request.oauth_signature}"
66
- puts "Escaped signature: #{OAuth::Helper.escape(request.oauth_signature)}"
67
- end
68
-
69
- def xmpp_output(request)
70
- <<-EOS
71
- <oauth xmlns='urn:xmpp:oauth:0'>
72
- <oauth_consumer_key>#{request.oauth_consumer_key}</oauth_consumer_key>
73
- <oauth_token>#{request.oauth_token}</oauth_token>
74
- <oauth_signature_method>#{request.oauth_signature_method}</oauth_signature_method>
75
- <oauth_signature>#{request.oauth_signature}</oauth_signature>
76
- <oauth_timestamp>#{request.oauth_timestamp}</oauth_timestamp>
77
- <oauth_nonce>#{request.oauth_nonce}</oauth_nonce>
78
- <oauth_version>#{request.oauth_version}</oauth_version>
79
- </oauth>
80
- EOS
81
- end
82
- end
83
- end
84
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OAuth
4
- class CLI
5
- class VersionCommand < BaseCommand
6
- def run
7
- puts "OAuth Gem #{OAuth::Version::VERSION}"
8
- end
9
- end
10
- end
11
- end
data/lib/oauth/cli.rb DELETED
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "optparse"
4
- require "oauth/cli/base_command"
5
- require "oauth/cli/help_command"
6
- require "oauth/cli/query_command"
7
- require "oauth/cli/authorize_command"
8
- require "oauth/cli/sign_command"
9
- require "oauth/cli/version_command"
10
- require "active_support/core_ext/string/inflections"
11
-
12
- module OAuth
13
- class CLI
14
- def self.puts_red(string)
15
- puts "\033[0;91m#{string}\033[0m"
16
- end
17
-
18
- ALIASES = {
19
- "h" => "help",
20
- "v" => "version",
21
- "q" => "query",
22
- "a" => "authorize",
23
- "s" => "sign"
24
- }.freeze
25
-
26
- def initialize(stdout, stdin, stderr, command, arguments)
27
- klass = get_command_class(parse_command(command))
28
- @command = klass.new(stdout, stdin, stderr, arguments)
29
- @help_command = HelpCommand.new(stdout, stdin, stderr, [])
30
- end
31
-
32
- def run
33
- @command.run
34
- end
35
-
36
- private
37
-
38
- def get_command_class(command)
39
- Object.const_get("OAuth::CLI::#{command.camelize}Command")
40
- end
41
-
42
- def parse_command(command)
43
- case command = command.to_s.downcase
44
- when "--version", "-v"
45
- "version"
46
- when "--help", "-h", nil, ""
47
- "help"
48
- when *ALIASES.keys
49
- ALIASES[command]
50
- when *ALIASES.values
51
- command
52
- else
53
- OAuth::CLI.puts_red "Command '#{command}' not found"
54
- "help"
55
- end
56
- end
57
- end
58
- end