oauth 0.5.6 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +483 -0
  3. data/CODE_OF_CONDUCT.md +84 -0
  4. data/CONTRIBUTING.md +23 -0
  5. data/LICENSE +18 -17
  6. data/README.md +190 -0
  7. data/SECURITY.md +16 -0
  8. data/TODO +0 -0
  9. data/bin/oauth +2 -2
  10. data/lib/oauth/cli/authorize_command.rb +0 -0
  11. data/lib/oauth/cli/base_command.rb +1 -1
  12. data/lib/oauth/cli/help_command.rb +0 -0
  13. data/lib/oauth/cli/query_command.rb +0 -0
  14. data/lib/oauth/cli/sign_command.rb +0 -0
  15. data/lib/oauth/cli/version_command.rb +0 -0
  16. data/lib/oauth/cli.rb +18 -18
  17. data/lib/oauth/client/action_controller_request.rb +7 -7
  18. data/lib/oauth/client/em_http.rb +99 -99
  19. data/lib/oauth/client/helper.rb +22 -22
  20. data/lib/oauth/client/net_http.rb +5 -5
  21. data/lib/oauth/client.rb +0 -0
  22. data/lib/oauth/consumer.rb +49 -38
  23. data/lib/oauth/errors/error.rb +0 -0
  24. data/lib/oauth/errors/problem.rb +0 -0
  25. data/lib/oauth/errors/unauthorized.rb +3 -1
  26. data/lib/oauth/errors.rb +3 -3
  27. data/lib/oauth/helper.rb +11 -7
  28. data/lib/oauth/oauth.rb +0 -0
  29. data/lib/oauth/oauth_test_helper.rb +4 -4
  30. data/lib/oauth/request_proxy/action_controller_request.rb +56 -57
  31. data/lib/oauth/request_proxy/action_dispatch_request.rb +8 -4
  32. data/lib/oauth/request_proxy/base.rb +136 -132
  33. data/lib/oauth/request_proxy/curb_request.rb +49 -43
  34. data/lib/oauth/request_proxy/em_http_request.rb +59 -49
  35. data/lib/oauth/request_proxy/jabber_request.rb +12 -9
  36. data/lib/oauth/request_proxy/mock_request.rb +4 -2
  37. data/lib/oauth/request_proxy/net_http.rb +63 -54
  38. data/lib/oauth/request_proxy/rack_request.rb +35 -31
  39. data/lib/oauth/request_proxy/rest_client_request.rb +53 -50
  40. data/lib/oauth/request_proxy/typhoeus_request.rb +51 -45
  41. data/lib/oauth/request_proxy.rb +0 -0
  42. data/lib/oauth/server.rb +2 -2
  43. data/lib/oauth/signature/base.rb +8 -6
  44. data/lib/oauth/signature/hmac/sha1.rb +4 -4
  45. data/lib/oauth/signature/hmac/sha256.rb +4 -4
  46. data/lib/oauth/signature/plaintext.rb +2 -2
  47. data/lib/oauth/signature/rsa/sha1.rb +3 -3
  48. data/lib/oauth/signature.rb +0 -0
  49. data/lib/oauth/token.rb +5 -5
  50. data/lib/oauth/tokens/access_token.rb +3 -3
  51. data/lib/oauth/tokens/consumer_token.rb +0 -0
  52. data/lib/oauth/tokens/request_token.rb +0 -0
  53. data/lib/oauth/tokens/server_token.rb +0 -0
  54. data/lib/oauth/tokens/token.rb +0 -0
  55. data/lib/oauth/version.rb +1 -1
  56. data/lib/oauth.rb +8 -7
  57. metadata +47 -92
  58. data/README.rdoc +0 -88
data/README.md ADDED
@@ -0,0 +1,190 @@
1
+ # Ruby OAuth
2
+
3
+ **NOTE**
4
+
5
+ This README, on branch `v0.5-maintenance`, targets 0.5.x series releases. For later releases please see the `msater` branch README.
6
+
7
+ ## Status
8
+
9
+ | Project | Ruby Oauth |
10
+ |--------------------------- |--------------------------- |
11
+ | name, license, docs | [![RubyGems.org](https://img.shields.io/badge/name-oauth-brightgreen.svg?style=flat)][rubygems] [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)][license-ref] [![RubyDoc.info](https://img.shields.io/badge/documentation-rubydoc-brightgreen.svg?style=flat)][documentation] |
12
+ | version & downloads | [![Version](https://img.shields.io/gem/v/oauth.svg)][rubygems] [![Total Downloads](https://img.shields.io/gem/dt/oauth.svg)][rubygems] [![Downloads Today](https://img.shields.io/gem/rd/oauth.svg)][rubygems] [![Homepage](https://img.shields.io/badge/source-github-brightgreen.svg?style=flat)][source] |
13
+ | dependencies & linting | [![Depfu](https://badges.depfu.com/badges/d570491bac0ad3b0b65deb3c82028327/count.svg)][depfu] [![lint status](https://github.com/oauth-xx/oauth-ruby/actions/workflows/style.yml/badge.svg)][actions] |
14
+ | unit tests | [![supported rubies](https://github.com/oauth-xx/oauth-ruby/actions/workflows/supported.yml/badge.svg)][actions] [![unsupported status](https://github.com/oauth-xx/oauth-ruby/actions/workflows/unsupported.yml/badge.svg)][actions] |
15
+ | coverage & maintainability | [![Test Coverage](https://api.codeclimate.com/v1/badges/3cf23270c21e8791d788/test_coverage)][climate_coverage] [![codecov](https://codecov.io/gh/oauth-xx/oauth-ruby/branch/master/graph/badge.svg?token=4ZNAWNxrf9)][codecov_coverage] [![Maintainability](https://api.codeclimate.com/v1/badges/3cf23270c21e8791d788/maintainability)][climate_maintainability] [![Maintenance Policy](https://img.shields.io/badge/maintenance-policy-brightgreen.svg?style=flat)][security] |
16
+ | resources | [![Discussion](https://img.shields.io/badge/discussions-github-brightgreen.svg?style=flat)][gh_discussions] [![Mailing List](https://img.shields.io/badge/group-mailinglist.svg?style=social&logo=google)][mailinglist] [![Join the chat at https://gitter.im/oauth-xx/oauth-ruby](https://badges.gitter.im/Join%20Chat.svg)][chat] [![Blog](https://img.shields.io/badge/blog-railsbling-brightgreen.svg?style=flat)][blogpage] |
17
+ | Spread ~♡ⓛⓞⓥⓔ♡~ | [![Open Source Helpers](https://www.codetriage.com/oauth-xx/oauth-ruby/badges/users.svg)][code_triage] [![Liberapay Patrons](https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay)][liberapay_donate] [![Sponsor Me](https://img.shields.io/badge/sponsor-pboling.svg?style=social&logo=github)][gh_sponsors] [🌏][aboutme] [👼][angelme] [💻][coderme] [🌹][politicme] [![Tweet @ Peter][followme-img]][tweetme] |
18
+
19
+ ## What
20
+
21
+ This is a RubyGem for implementing both OAuth 1.0 clients and servers in Ruby
22
+ applications.
23
+
24
+ See the OAuth 1.0 spec http://oauth.net/core/1.0/
25
+
26
+ See the sibling gem [oauth2](https://github.com/oauth-xx/oauth2) for OAuth 2.0 implementations in Ruby.
27
+
28
+ ## Installation
29
+
30
+ Add this line to your application's Gemfile:
31
+
32
+ ```ruby
33
+ gem "oauth"
34
+ ```
35
+
36
+ And then execute:
37
+
38
+ $ bundle install
39
+
40
+ Or install it yourself as:
41
+
42
+ $ gem install oauth
43
+
44
+ ## Compatibility
45
+
46
+ Targeted ruby compatibility is non-EOL versions of Ruby, currently 2.6, 2.7, and
47
+ 3.0. Ruby is limited to 2.0+ in the gemspec, and this may change while the gem is
48
+ still at version 0.x. The `master` branch currently targets 0.6.x releases.
49
+
50
+ | Ruby OAuth Version | Maintenance Branch | Officially Supported Rubies | Unofficially Supported Rubies |
51
+ |--------------------- | ------------------ | ------------------------------------------- | ----------------------------- |
52
+ | 0.7.x (hypothetical) | N/A | 2.7, 3.0, 3.1 | 2.6 |
53
+ | 0.6.x | `master` | 2.6, 2.7, 3.0 | 2.3, 2.4, 2.5 |
54
+ | 0.5.x | `v0.5-maintenance` | 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0 | |
55
+
56
+ NOTE: 0.5.7 is anticipated as last release of the 0.5.x series.
57
+
58
+ ## Basics
59
+
60
+ This is a ruby library which is intended to be used in creating Ruby Consumer
61
+ and Service Provider applications. It is NOT a Rails plugin, but could easily
62
+ be used for the foundation for such a Rails plugin.
63
+
64
+ As a matter of fact it has been pulled out from an OAuth Rails GEM
65
+ (https://rubygems.org/gems/oauth-plugin https://github.com/pelle/oauth-plugin)
66
+ which now uses this gem as a dependency.
67
+
68
+ ## Usage
69
+
70
+ We need to specify the oauth_callback url explicitly, otherwise it defaults to
71
+ "oob" (Out of Band)
72
+
73
+ callback_url = "http://127.0.0.1:3000/oauth/callback"
74
+
75
+ Create a new `OAuth::Consumer` instance by passing it a configuration hash:
76
+
77
+ oauth_consumer = OAuth::Consumer.new("key", "secret", :site => "https://agree2")
78
+
79
+ Start the process by requesting a token
80
+
81
+ request_token = oauth_consumer.get_request_token(:oauth_callback => callback_url)
82
+
83
+ session[:token] = request_token.token
84
+ session[:token_secret] = request_token.secret
85
+ redirect_to request_token.authorize_url(:oauth_callback => callback_url)
86
+
87
+ When user returns create an access_token
88
+
89
+ hash = { oauth_token: session[:token], oauth_token_secret: session[:token_secret]}
90
+ request_token = OAuth::RequestToken.from_hash(oauth_consumer, hash)
91
+ access_token = request_token.get_access_token
92
+ # For 3-legged authorization, flow oauth_verifier is passed as param in callback
93
+ # access_token = request_token.get_access_token(oauth_verifier: params[:oauth_verifier])
94
+ @photos = access_token.get('/photos.xml')
95
+
96
+ Now that you have an access token, you can use Typhoeus to interact with the
97
+ OAuth provider if you choose.
98
+
99
+ require 'typhoeus'
100
+ require 'oauth/request_proxy/typhoeus_request'
101
+ oauth_params = {:consumer => oauth_consumer, :token => access_token}
102
+ hydra = Typhoeus::Hydra.new
103
+ req = Typhoeus::Request.new(uri, options) # :method needs to be specified in options
104
+ oauth_helper = OAuth::Client::Helper.new(req, oauth_params.merge(:request_uri => uri))
105
+ req.options[:headers].merge!({"Authorization" => oauth_helper.header}) # Signs the request
106
+ hydra.queue(req)
107
+ hydra.run
108
+ @response = req.response
109
+
110
+ ## More Information
111
+
112
+ * RubyDoc Documentation: [![RubyDoc.info](https://img.shields.io/badge/documentation-rubydoc-brightgreen.svg?style=flat)][documentation]
113
+ * Mailing List/Google Group: [![Mailing List](https://img.shields.io/badge/group-mailinglist-violet.svg?style=social&logo=google)][mailinglist]
114
+ * GitHub Discussions: [![Discussion](https://img.shields.io/badge/discussions-github-brightgreen.svg?style=flat)][gh_discussions]
115
+ * Live Chat on Gitter: [![Join the chat at https://gitter.im/oauth-xx/oauth-ruby](https://badges.gitter.im/Join%20Chat.svg)][chat]
116
+ * Maintainer's Blog: [![Blog](https://img.shields.io/badge/blog-railsbling-brightgreen.svg?style=flat)][blogpage]
117
+
118
+ ## Contributing
119
+
120
+ See [CONTRIBUTING.md][contributing]
121
+
122
+ ## Contributors
123
+
124
+ [![Contributors](https://contrib.rocks/image?repo=oauth-xx/oauth-ruby)][contributors]
125
+
126
+ Made with [contributors-img][contrib-rocks].
127
+
128
+ ## Versioning
129
+
130
+ This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations of this scheme should be reported as
131
+ bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be
132
+ immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new
133
+ major versions.
134
+
135
+ As a result of this policy, you can (and should) specify a dependency on this gem using
136
+ the [Pessimistic Version Constraint][pvc] with two digits of precision.
137
+
138
+ For example:
139
+
140
+ ```ruby
141
+ spec.add_dependency "oauth", "~> 0.5"
142
+ ```
143
+
144
+ ## License
145
+
146
+ The gem is available as open source under the terms of
147
+ the [MIT License][license] [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)][license-ref].
148
+ See [LICENSE][license] for the [Copyright Notice][copyright-notice-explainer].
149
+
150
+ ## Contact
151
+
152
+ OAuth Ruby has been created and maintained by a large number of talented
153
+ individuals. The current maintainer is Peter Boling ([@pboling][gh_sponsors]).
154
+
155
+ Comments are welcome. Contact the [OAuth Ruby mailing list (Google Group)][mailinglist] or [GitHub Discussions][gh_discussions].
156
+
157
+ [comment]: <> (Following links are used by README, CONTRIBUTING, Homepage)
158
+
159
+ [conduct]: https://github.com/oauth-xx/oauth-ruby/blob/master/CODE_OF_CONDUCT.md
160
+ [contributing]: https://github.com/oauth-xx/oauth-ruby/blob/master/CONTRIBUTING.md
161
+ [contributors]: https://github.com/oauth-xx/oauth-ruby/graphs/contributors
162
+ [mailinglist]: http://groups.google.com/group/oauth-ruby
163
+ [source]: https://github.com/oauth-xx/oauth-ruby/
164
+
165
+ [comment]: <> (Following links are used by README, Homepage)
166
+
167
+ [aboutme]: https://about.me/peter.boling
168
+ [actions]: https://github.com/oauth-xx/oauth-ruby/actions
169
+ [angelme]: https://angel.co/peter-boling
170
+ [blogpage]: http://www.railsbling.com/tags/oauth/
171
+ [chat]: https://gitter.im/oauth-xx/oauth-ruby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
172
+ [climate_coverage]: https://codeclimate.com/github/oauth-xx/oauth-ruby/test_coverage
173
+ [climate_maintainability]: https://codeclimate.com/github/oauth-xx/oauth-ruby/maintainability
174
+ [code_triage]: https://www.codetriage.com/oauth-xx/oauth-ruby
175
+ [codecov_coverage]: https://codecov.io/gh/oauth-xx/oauth-ruby
176
+ [coderme]:http://coderwall.com/pboling
177
+ [depfu]: https://depfu.com/github/oauth-xx/oauth-ruby?project_id=22868
178
+ [documentation]: https://rubydoc.info/github/oauth-xx/oauth-ruby
179
+ [followme-img]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
180
+ [gh_discussions]: https://github.com/oauth-xx/oauth-ruby/discussions
181
+ [gh_sponsors]: https://github.com/sponsors/pboling
182
+ [license]: https://github.com/oauth-xx/oauth-ruby/blob/master/LICENSE
183
+ [license-ref]: https://opensource.org/licenses/MIT
184
+ [liberapay_donate]: https://liberapay.com/pboling/donate
185
+ [politicme]: https://nationalprogressiveparty.org
186
+ [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
187
+ [rubygems]: https://rubygems.org/gems/oauth
188
+ [security]: https://github.com/oauth-xx/oauth-ruby/blob/master/SECURITY.md
189
+ [semver]: http://semver.org/
190
+ [tweetme]: http://twitter.com/galtzo
data/SECURITY.md ADDED
@@ -0,0 +1,16 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ | Version | Supported |
6
+ | ------- | ------------------ |
7
+ | 0.7.x | :white_check_mark: |
8
+ | 0.6.x | :white_check_mark: |
9
+ | 0.5.x | :white_check_mark: |
10
+ | <= 0.5 | :x: |
11
+
12
+ ## Reporting a Vulnerability
13
+
14
+ Peter Boling is the primary maintainer of the this gem. Please find a way to [contact him directly][contact] to report the issue. Include as much relevant information as possible.
15
+
16
+ [contact]: https://railsbling.com/contact
data/TODO CHANGED
File without changes
data/bin/oauth CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative "../lib/oauth"
4
- require 'oauth/cli'
4
+ require "oauth/cli"
5
5
 
6
6
  Signal.trap("INT") { puts; exit(1) } # don't dump a backtrace on a ^C
7
7
 
8
- ARGV << 'help' if ARGV.empty?
8
+ ARGV << "help" if ARGV.empty?
9
9
  command = ARGV.shift
10
10
 
11
11
  OAuth::CLI.new(STDOUT, STDIN, STDERR, command, ARGV).run
File without changes
@@ -26,7 +26,7 @@ class OAuth::CLI
26
26
  attr_reader :options
27
27
 
28
28
  def show_missing(array)
29
- array = array.map { |s| "--#{s}" }.join(' ')
29
+ array = array.map { |s| "--#{s}" }.join(" ")
30
30
  OAuth::CLI.puts_red "Options missing to OAuth CLI: #{array}"
31
31
  end
32
32
 
File without changes
File without changes
File without changes
File without changes
data/lib/oauth/cli.rb CHANGED
@@ -1,11 +1,11 @@
1
- require 'optparse'
2
- require 'oauth/cli/base_command'
3
- require 'oauth/cli/help_command'
4
- require 'oauth/cli/query_command'
5
- require 'oauth/cli/authorize_command'
6
- require 'oauth/cli/sign_command'
7
- require 'oauth/cli/version_command'
8
- require 'active_support/core_ext/string/inflections'
1
+ require "optparse"
2
+ require "oauth/cli/base_command"
3
+ require "oauth/cli/help_command"
4
+ require "oauth/cli/query_command"
5
+ require "oauth/cli/authorize_command"
6
+ require "oauth/cli/sign_command"
7
+ require "oauth/cli/version_command"
8
+ require "active_support/core_ext/string/inflections"
9
9
 
10
10
  module OAuth
11
11
  class CLI
@@ -14,11 +14,11 @@ module OAuth
14
14
  end
15
15
 
16
16
  ALIASES = {
17
- 'h' => 'help',
18
- 'v' => 'version',
19
- 'q' => 'query',
20
- 'a' => 'authorize',
21
- 's' => 'sign',
17
+ "h" => "help",
18
+ "v" => "version",
19
+ "q" => "query",
20
+ "a" => "authorize",
21
+ "s" => "sign",
22
22
  }
23
23
 
24
24
  def initialize(stdout, stdin, stderr, command, arguments)
@@ -39,17 +39,17 @@ module OAuth
39
39
 
40
40
  def parse_command(command)
41
41
  case command = command.to_s.downcase
42
- when '--version', '-v'
43
- 'version'
44
- when '--help', '-h', nil, ''
45
- 'help'
42
+ when "--version", "-v"
43
+ "version"
44
+ when "--help", "-h", nil, ""
45
+ "help"
46
46
  when *ALIASES.keys
47
47
  ALIASES[command]
48
48
  when *ALIASES.values
49
49
  command
50
50
  else
51
51
  OAuth::CLI.puts_red "Command '#{command}' not found"
52
- 'help'
52
+ "help"
53
53
  end
54
54
  end
55
55
  end
@@ -1,10 +1,10 @@
1
1
  if defined? ActionDispatch
2
- require 'oauth/request_proxy/rack_request'
3
- require 'oauth/request_proxy/action_dispatch_request'
4
- require 'action_dispatch/testing/test_process'
2
+ require "oauth/request_proxy/rack_request"
3
+ require "oauth/request_proxy/action_dispatch_request"
4
+ require "action_dispatch/testing/test_process"
5
5
  else
6
- require 'oauth/request_proxy/action_controller_request'
7
- require 'action_controller/test_process'
6
+ require "oauth/request_proxy/action_controller_request"
7
+ require "action_controller/test_process"
8
8
  end
9
9
 
10
10
  module ActionController
@@ -35,7 +35,7 @@ module ActionController
35
35
  def configure_oauth(consumer = nil, token = nil, options = {})
36
36
  @oauth_options = { :consumer => consumer,
37
37
  :token => token,
38
- :scheme => 'header',
38
+ :scheme => "header",
39
39
  :signature_method => nil,
40
40
  :nonce => nil,
41
41
  :timestamp => nil }.merge(options)
@@ -51,7 +51,7 @@ module ActionController
51
51
  end
52
52
 
53
53
  def set_oauth_header
54
- env['Authorization'] = @oauth_helper.header
54
+ env["Authorization"] = @oauth_helper.header
55
55
  end
56
56
 
57
57
  def set_oauth_parameters
@@ -1,119 +1,119 @@
1
- require 'em-http'
2
- require 'oauth/helper'
3
- require 'oauth/request_proxy/em_http_request'
1
+ require "em-http"
2
+ require "oauth/helper"
3
+ require "oauth/request_proxy/em_http_request"
4
4
 
5
5
  # Extensions for em-http so that we can use consumer.sign! with an EventMachine::HttpClient
6
6
  # instance. This is purely syntactic sugar.
7
- class EventMachine::HttpClient
7
+ module EventMachine
8
+ class HttpClient
9
+ attr_reader :oauth_helper
8
10
 
9
- attr_reader :oauth_helper
11
+ # Add the OAuth information to an HTTP request. Depending on the <tt>options[:scheme]</tt> setting
12
+ # this may add a header, additional query string parameters, or additional POST body parameters.
13
+ # The default scheme is +header+, in which the OAuth parameters as put into the +Authorization+
14
+ # header.
15
+ #
16
+ # * http - Configured Net::HTTP instance, ignored in this scenario except for getting host.
17
+ # * consumer - OAuth::Consumer instance
18
+ # * token - OAuth::Token instance
19
+ # * options - Request-specific options (e.g. +request_uri+, +consumer+, +token+, +scheme+,
20
+ # +signature_method+, +nonce+, +timestamp+)
21
+ #
22
+ # This method also modifies the <tt>User-Agent</tt> header to add the OAuth gem version.
23
+ #
24
+ # See Also: {OAuth core spec version 1.0, section 5.4.1}[http://oauth.net/core/1.0#rfc.section.5.4.1]
25
+ def oauth!(http, consumer = nil, token = nil, options = {})
26
+ options = { :request_uri => normalized_oauth_uri(http),
27
+ :consumer => consumer,
28
+ :token => token,
29
+ :scheme => "header",
30
+ :signature_method => nil,
31
+ :nonce => nil,
32
+ :timestamp => nil }.merge(options)
10
33
 
11
- # Add the OAuth information to an HTTP request. Depending on the <tt>options[:scheme]</tt> setting
12
- # this may add a header, additional query string parameters, or additional POST body parameters.
13
- # The default scheme is +header+, in which the OAuth parameters as put into the +Authorization+
14
- # header.
15
- #
16
- # * http - Configured Net::HTTP instance, ignored in this scenario except for getting host.
17
- # * consumer - OAuth::Consumer instance
18
- # * token - OAuth::Token instance
19
- # * options - Request-specific options (e.g. +request_uri+, +consumer+, +token+, +scheme+,
20
- # +signature_method+, +nonce+, +timestamp+)
21
- #
22
- # This method also modifies the <tt>User-Agent</tt> header to add the OAuth gem version.
23
- #
24
- # See Also: {OAuth core spec version 1.0, section 5.4.1}[http://oauth.net/core/1.0#rfc.section.5.4.1]
25
- def oauth!(http, consumer = nil, token = nil, options = {})
26
- options = { :request_uri => normalized_oauth_uri(http),
27
- :consumer => consumer,
28
- :token => token,
29
- :scheme => 'header',
30
- :signature_method => nil,
31
- :nonce => nil,
32
- :timestamp => nil }.merge(options)
33
-
34
- @oauth_helper = OAuth::Client::Helper.new(self, options)
35
- self.__send__(:"set_oauth_#{options[:scheme]}")
36
- end
34
+ @oauth_helper = OAuth::Client::Helper.new(self, options)
35
+ self.__send__(:"set_oauth_#{options[:scheme]}")
36
+ end
37
37
 
38
- # Create a string suitable for signing for an HTTP request. This process involves parameter
39
- # normalization as specified in the OAuth specification. The exact normalization also depends
40
- # on the <tt>options[:scheme]</tt> being used so this must match what will be used for the request
41
- # itself. The default scheme is +header+, in which the OAuth parameters as put into the +Authorization+
42
- # header.
43
- #
44
- # * http - Configured Net::HTTP instance
45
- # * consumer - OAuth::Consumer instance
46
- # * token - OAuth::Token instance
47
- # * options - Request-specific options (e.g. +request_uri+, +consumer+, +token+, +scheme+,
48
- # +signature_method+, +nonce+, +timestamp+)
49
- #
50
- # See Also: {OAuth core spec version 1.0, section 9.1.1}[http://oauth.net/core/1.0#rfc.section.9.1.1]
51
- def signature_base_string(http, consumer = nil, token = nil, options = {})
52
- options = { :request_uri => normalized_oauth_uri(http),
53
- :consumer => consumer,
54
- :token => token,
55
- :scheme => 'header',
56
- :signature_method => nil,
57
- :nonce => nil,
58
- :timestamp => nil }.merge(options)
38
+ # Create a string suitable for signing for an HTTP request. This process involves parameter
39
+ # normalization as specified in the OAuth specification. The exact normalization also depends
40
+ # on the <tt>options[:scheme]</tt> being used so this must match what will be used for the request
41
+ # itself. The default scheme is +header+, in which the OAuth parameters as put into the +Authorization+
42
+ # header.
43
+ #
44
+ # * http - Configured Net::HTTP instance
45
+ # * consumer - OAuth::Consumer instance
46
+ # * token - OAuth::Token instance
47
+ # * options - Request-specific options (e.g. +request_uri+, +consumer+, +token+, +scheme+,
48
+ # +signature_method+, +nonce+, +timestamp+)
49
+ #
50
+ # See Also: {OAuth core spec version 1.0, section 9.1.1}[http://oauth.net/core/1.0#rfc.section.9.1.1]
51
+ def signature_base_string(http, consumer = nil, token = nil, options = {})
52
+ options = { :request_uri => normalized_oauth_uri(http),
53
+ :consumer => consumer,
54
+ :token => token,
55
+ :scheme => "header",
56
+ :signature_method => nil,
57
+ :nonce => nil,
58
+ :timestamp => nil }.merge(options)
59
59
 
60
- OAuth::Client::Helper.new(self, options).signature_base_string
61
- end
60
+ OAuth::Client::Helper.new(self, options).signature_base_string
61
+ end
62
62
 
63
- # This code was lifted from the em-http-request because it was removed from
64
- # the gem June 19, 2010
65
- # see: http://github.com/igrigorik/em-http-request/commit/d536fc17d56dbe55c487eab01e2ff9382a62598b
66
- def normalize_uri
67
- @normalized_uri ||= begin
68
- uri = @uri.dup
69
- encoded_query = encode_query(@uri, @options[:query])
70
- path, query = encoded_query.split("?", 2)
71
- uri.query = query unless encoded_query.empty?
72
- uri.path = path
73
- uri
63
+ # This code was lifted from the em-http-request because it was removed from
64
+ # the gem June 19, 2010
65
+ # see: http://github.com/igrigorik/em-http-request/commit/d536fc17d56dbe55c487eab01e2ff9382a62598b
66
+ def normalize_uri
67
+ @normalized_uri ||= begin
68
+ uri = @conn.dup
69
+ encoded_query = encode_query(@conn, @req[:query])
70
+ path, query = encoded_query.split("?", 2)
71
+ uri.query = query unless encoded_query.empty?
72
+ uri.path = path
73
+ uri
74
+ end
74
75
  end
75
- end
76
76
 
77
- protected
77
+ protected
78
78
 
79
- def combine_query(path, query, uri_query)
80
- combined_query = if query.kind_of?(Hash)
81
- query.map { |k, v| encode_param(k, v) }.join('&')
82
- else
83
- query.to_s
79
+ def combine_query(path, query, uri_query)
80
+ combined_query = if query.kind_of?(Hash)
81
+ query.map { |k, v| encode_param(k, v) }.join("&")
82
+ else
83
+ query.to_s
84
+ end
85
+ if !uri_query.to_s.empty?
86
+ combined_query = [combined_query, uri_query].reject {|part| part.empty?}.join("&")
87
+ end
88
+ combined_query.to_s.empty? ? path : "#{path}?#{combined_query}"
84
89
  end
85
- if !uri_query.to_s.empty?
86
- combined_query = [combined_query, uri_query].reject {|part| part.empty?}.join("&")
87
- end
88
- combined_query.to_s.empty? ? path : "#{path}?#{combined_query}"
89
- end
90
90
 
91
- # Since we expect to get the host etc details from the http instance (...),
92
- # we create a fake url here. Surely this is a horrible, horrible idea?
93
- def normalized_oauth_uri(http)
94
- uri = URI.parse(normalize_uri.path)
95
- uri.host = http.address
96
- uri.port = http.port
91
+ # Since we expect to get the host etc details from the http instance (...),
92
+ # we create a fake url here. Surely this is a horrible, horrible idea?
93
+ def normalized_oauth_uri(http)
94
+ uri = URI.parse(normalize_uri.path)
95
+ uri.host = http.address
96
+ uri.port = http.port
97
97
 
98
- if http.respond_to?(:use_ssl?) && http.use_ssl?
99
- uri.scheme = "https"
100
- else
101
- uri.scheme = "http"
98
+ if http.respond_to?(:use_ssl?) && http.use_ssl?
99
+ uri.scheme = "https"
100
+ else
101
+ uri.scheme = "http"
102
+ end
103
+ uri.to_s
102
104
  end
103
- uri.to_s
104
- end
105
105
 
106
- def set_oauth_header
107
- headers = (self.options[:head] ||= {})
108
- headers['Authorization'] = @oauth_helper.header
109
- end
106
+ def set_oauth_header
107
+ self.req[:head] ||= {}
108
+ self.req[:head].merge!("Authorization" => @oauth_helper.header)
109
+ end
110
110
 
111
- def set_oauth_body
112
- raise NotImplementedError, 'please use the set_oauth_header method instead'
113
- end
111
+ def set_oauth_body
112
+ raise NotImplementedError, "please use the set_oauth_header method instead"
113
+ end
114
114
 
115
- def set_oauth_query_string
116
- raise NotImplementedError, 'please use the set_oauth_header method instead'
115
+ def set_oauth_query_string
116
+ raise NotImplementedError, "please use the set_oauth_header method instead"
117
+ end
117
118
  end
118
-
119
119
  end
@@ -1,8 +1,8 @@
1
- require 'oauth/client'
2
- require 'oauth/consumer'
3
- require 'oauth/helper'
4
- require 'oauth/token'
5
- require 'oauth/signature/hmac/sha1'
1
+ require "oauth/client"
2
+ require "oauth/consumer"
3
+ require "oauth/helper"
4
+ require "oauth/token"
5
+ require "oauth/signature/hmac/sha1"
6
6
 
7
7
  module OAuth::Client
8
8
  class Helper
@@ -11,7 +11,7 @@ module OAuth::Client
11
11
  def initialize(request, options = {})
12
12
  @request = request
13
13
  @options = options
14
- @options[:signature_method] ||= 'HMAC-SHA1'
14
+ @options[:signature_method] ||= "HMAC-SHA1"
15
15
  end
16
16
 
17
17
  def options
@@ -28,22 +28,22 @@ module OAuth::Client
28
28
 
29
29
  def oauth_parameters
30
30
  out = {
31
- 'oauth_body_hash' => options[:body_hash],
32
- 'oauth_callback' => options[:oauth_callback],
33
- 'oauth_consumer_key' => options[:consumer].key,
34
- 'oauth_token' => options[:token] ? options[:token].token : '',
35
- 'oauth_signature_method' => options[:signature_method],
36
- 'oauth_timestamp' => timestamp,
37
- 'oauth_nonce' => nonce,
38
- 'oauth_verifier' => options[:oauth_verifier],
39
- 'oauth_version' => (options[:oauth_version] || '1.0'),
40
- 'oauth_session_handle' => options[:oauth_session_handle]
31
+ "oauth_body_hash" => options[:body_hash],
32
+ "oauth_callback" => options[:oauth_callback],
33
+ "oauth_consumer_key" => options[:consumer].key,
34
+ "oauth_token" => options[:token] ? options[:token].token : "",
35
+ "oauth_signature_method" => options[:signature_method],
36
+ "oauth_timestamp" => timestamp,
37
+ "oauth_nonce" => nonce,
38
+ "oauth_verifier" => options[:oauth_verifier],
39
+ "oauth_version" => (options[:oauth_version] || "1.0"),
40
+ "oauth_session_handle" => options[:oauth_session_handle]
41
41
  }
42
42
  allowed_empty_params = options[:allow_empty_params]
43
43
  if allowed_empty_params != true && !allowed_empty_params.kind_of?(Array)
44
44
  allowed_empty_params = allowed_empty_params == false ? [] : [allowed_empty_params]
45
45
  end
46
- out.select! { |k,v| v.to_s != '' || allowed_empty_params == true || allowed_empty_params.include?(k) }
46
+ out.select! { |k,v| v.to_s != "" || allowed_empty_params == true || allowed_empty_params.include?(k) }
47
47
  out
48
48
  end
49
49
 
@@ -73,18 +73,18 @@ module OAuth::Client
73
73
  def amend_user_agent_header(headers)
74
74
  @oauth_ua_string ||= "OAuth gem v#{OAuth::VERSION}"
75
75
  # Net::HTTP in 1.9 appends Ruby
76
- if headers['User-Agent'] && headers['User-Agent'] != 'Ruby'
77
- headers['User-Agent'] += " (#{@oauth_ua_string})"
76
+ if headers["User-Agent"] && headers["User-Agent"] != "Ruby"
77
+ headers["User-Agent"] += " (#{@oauth_ua_string})"
78
78
  else
79
- headers['User-Agent'] = @oauth_ua_string
79
+ headers["User-Agent"] = @oauth_ua_string
80
80
  end
81
81
  end
82
82
 
83
83
  def header
84
84
  parameters = oauth_parameters
85
- parameters.merge!('oauth_signature' => signature(options.merge(:parameters => parameters)))
85
+ parameters.merge!("oauth_signature" => signature(options.merge(:parameters => parameters)))
86
86
 
87
- header_params_str = parameters.sort.map { |k,v| "#{k}=\"#{escape(v)}\"" }.join(', ')
87
+ header_params_str = parameters.sort.map { |k,v| "#{k}=\"#{escape(v)}\"" }.join(", ")
88
88
 
89
89
  realm = "realm=\"#{options[:realm]}\", " if options[:realm]
90
90
  "OAuth #{realm}#{header_params_str}"