oauth2 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -7,10 +7,10 @@ the entire specification over time.
7
7
  [travis]: http://travis-ci.org/intridea/oauth2
8
8
  [gemnasium]: https://gemnasium.com/intridea/oauth2
9
9
 
10
- ## <a name="installation"></a>Installation
10
+ ## Installation
11
11
  gem install oauth2
12
12
 
13
- ## <a name="resources"></a>Resources
13
+ ## Resources
14
14
  * [View Source on GitHub][code]
15
15
  * [Report Issues on GitHub][issues]
16
16
  * [Read More at the Wiki][wiki]
@@ -19,7 +19,7 @@ the entire specification over time.
19
19
  [issues]: https://github.com/intridea/oauth2/issues
20
20
  [wiki]: https://wiki.github.com/intridea/oauth2
21
21
 
22
- ## <a name="examples"></a>Usage Examples
22
+ ## Usage Examples
23
23
  require 'oauth2'
24
24
  client = OAuth2::Client.new('client_id', 'client_secret', :site => 'https://example.org')
25
25
 
@@ -31,7 +31,7 @@ the entire specification over time.
31
31
  response.class.name
32
32
  # => OAuth2::Response
33
33
 
34
- ## <a name="response"></a>OAuth2::Response
34
+ ## OAuth2::Response
35
35
  The AccessToken methods #get, #post, #put and #delete and the generic #request
36
36
  will return an instance of the #OAuth2::Response class.
37
37
 
@@ -43,13 +43,13 @@ array. Otherwise, it will return the original body string.
43
43
  The original response body, headers, and status can be accessed via their
44
44
  respective methods.
45
45
 
46
- ## <a name="access_token"></a>OAuth2::AccessToken
46
+ ## OAuth2::AccessToken
47
47
  If you have an existing Access Token for a user, you can initialize an instance
48
48
  using various class methods including the standard new, from_hash (if you have
49
49
  a hash of the values), or from_kvform (if you have an
50
50
  application/x-www-form-urlencoded encoded string of the values).
51
51
 
52
- ## <a name="error"></a>OAuth2::Error
52
+ ## OAuth2::Error
53
53
  On 400+ status code responses, an OAuth2::Error will be raised. If it is a
54
54
  standard OAuth2 error response, the body will be parsed and #code and #description will contain the values provided from the error and
55
55
  error_description parameters. The #response property of OAuth2::Error will
@@ -60,18 +60,24 @@ option on initialization of the client. In this case the OAuth2::Response
60
60
  instance will be returned as usual and on 400+ status code responses, the
61
61
  Response instance will contain the OAuth2::Error instance.
62
62
 
63
- ## <a name="authorization_grants"></a>Authorization Grants
64
- Currently the Authorization Code, Resource Owner Password Credentials, and Client Credentials
63
+ ## Authorization Grants
64
+ Currently the Authorization Code, Implicit, Resource Owner Password Credentials, Client Credentials, and Assertion
65
65
  authentication grant types have helper strategy classes that simplify client
66
- use. They are available via the #auth_code, #password, and #client_credentials methods respectively.
66
+ use. They are available via the #auth_code, #implicit, #password, #client_credentials, and #assertion methods respectively.
67
67
 
68
68
  auth_url = client.auth_code.authorize_url(:redirect_uri => 'http://localhost:8080/oauth/callback')
69
69
  token = client.auth_code.get_token('code_value', :redirect_uri => 'http://localhost:8080/oauth/callback')
70
70
 
71
+ auth_url = client.implicit.authorize_url(:redirect_uri => 'http://localhost:8080/oauth/callback')
72
+ # get the token params in the callback and
73
+ token = OAuth2::AccessToken.from_kvform(client, query_string)
74
+
71
75
  token = client.password.get_token('username', 'password')
72
76
 
73
77
  token = client.client_credentials.get_token
74
78
 
79
+ token = client.assertion.get_token(assertion_params)
80
+
75
81
  If you want to specify additional headers to be sent out with the
76
82
  request, add a 'headers' hash under 'params':
77
83
 
@@ -80,24 +86,23 @@ request, add a 'headers' hash under 'params':
80
86
  You can always use the #request method on the OAuth2::Client instance to make
81
87
  requests for tokens for any Authentication grant type.
82
88
 
83
- ## <a name="pulls"></a>Submitting a Pull Request
84
- 1. Fork the project.
85
- 2. Create a topic branch.
86
- 3. Implement your feature or bug fix.
87
- 4. Add documentation for your feature or bug fix.
88
- 5. Add specs for your feature or bug fix.
89
- 6. Run `bundle exec rake spec`. If your changes are not 100% covered, go back
90
- to step 5.
91
- 7. Commit and push your changes.
92
- 8. Submit a pull request. Please do not include changes to the [gemspec][],
93
- [version][], or [changelog][]. (If you want to create your own version for
94
- some reason, please do so in a separate commit.)
95
-
96
- [gemspec]: https://github.com/intridea/oauth2/blob/master/oauth2.gemspec
97
- [version]: https://github.com/intridea/oauth2/blob/master/lib/oauth2/version.rb
98
- [changelog]: https://github.com/intridea/oauth2/wiki/Changelog
99
-
100
- ## <a name="versions"></a>Supported Ruby Versions
89
+ ## Submitting a Pull Request
90
+ 1. [Fork the repository.][fork]
91
+ 2. [Create a topic branch.][branch]
92
+ 3. Add specs for your unimplemented feature or bug fix.
93
+ 4. Run `bundle exec rake spec`. If your specs pass, return to step 3.
94
+ 5. Implement your feature or bug fix.
95
+ 6. Run `bundle exec rake spec`. If your specs fail, return to step 5.
96
+ 7. Run `open coverage/index.html`. If your changes are not completely covered
97
+ by your tests, return to step 3.
98
+ 8. Add, commit, and push your changes.
99
+ 9. [Submit a pull request.][pr]
100
+
101
+ [fork]: http://help.github.com/fork-a-repo/
102
+ [branch]: http://learn.github.com/p/branching.html
103
+ [pr]: http://help.github.com/send-pull-requests/
104
+
105
+ ## Supported Ruby Versions
101
106
  This library aims to support and is [tested against][travis] the following Ruby
102
107
  implementations:
103
108
 
@@ -124,7 +129,7 @@ implementation, you will be personally responsible for providing patches in a
124
129
  timely fashion. If critical issues for a particular implementation exist at the
125
130
  time of a major release, support for that Ruby version may be dropped.
126
131
 
127
- ## <a name="copyright"></a>Copyright
132
+ ## Copyright
128
133
  Copyright (c) 2011 Intridea, Inc. and Michael Bleigh.
129
134
  See [LICENSE][] for details.
130
135
  [license]: https://github.com/intridea/oauth2/blob/master/LICENSE.md
data/Rakefile CHANGED
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env rake
2
-
3
1
  require 'bundler'
4
2
  Bundler::GemHelper.install_tasks
5
3
 
@@ -14,7 +12,7 @@ namespace :doc do
14
12
  require File.expand_path('../lib/oauth2/version', __FILE__)
15
13
  RDoc::Task.new do |rdoc|
16
14
  rdoc.rdoc_dir = 'rdoc'
17
- rdoc.title = "oauth2 #{OAuth2::VERSION}"
15
+ rdoc.title = "oauth2 #{OAuth2::Version}"
18
16
  rdoc.main = 'README.md'
19
17
  rdoc.rdoc_files.include('README.md', 'LICENSE.md', 'lib/**/*.rb')
20
18
  end
data/lib/oauth2.rb CHANGED
@@ -2,7 +2,9 @@ require 'oauth2/error'
2
2
  require 'oauth2/client'
3
3
  require 'oauth2/strategy/base'
4
4
  require 'oauth2/strategy/auth_code'
5
+ require 'oauth2/strategy/implicit'
5
6
  require 'oauth2/strategy/password'
6
7
  require 'oauth2/strategy/client_credentials'
8
+ require 'oauth2/strategy/assertion'
7
9
  require 'oauth2/access_token'
8
10
  require 'oauth2/response'
@@ -126,12 +126,17 @@ module OAuth2
126
126
  request(:delete, path, opts, &block)
127
127
  end
128
128
 
129
+ # Get the headers hash (includes Authorization token)
130
+ def headers
131
+ { 'Authorization' => options[:header_format] % token }
132
+ end
133
+
129
134
  private
130
135
  def set_token(opts)
131
136
  case options[:mode]
132
137
  when :header
133
138
  opts[:headers] ||= {}
134
- opts[:headers]['Authorization'] = options[:header_format] % token
139
+ opts[:headers].merge!(headers)
135
140
  when :query
136
141
  opts[:params] ||= {}
137
142
  opts[:params][options[:param_name]] = token
data/lib/oauth2/client.rb CHANGED
@@ -140,6 +140,13 @@ module OAuth2
140
140
  @auth_code ||= OAuth2::Strategy::AuthCode.new(self)
141
141
  end
142
142
 
143
+ # The Implicit strategy
144
+ #
145
+ # @see http://tools.ietf.org/html/draft-ietf-oauth-v2-26#section-4.2
146
+ def implicit
147
+ @implicit ||= OAuth2::Strategy::Implicit.new(self)
148
+ end
149
+
143
150
  # The Resource Owner Password Credentials strategy
144
151
  #
145
152
  # @see http://tools.ietf.org/html/draft-ietf-oauth-v2-15#section-4.3
@@ -153,5 +160,9 @@ module OAuth2
153
160
  def client_credentials
154
161
  @client_credentials ||= OAuth2::Strategy::ClientCredentials.new(self)
155
162
  end
163
+
164
+ def assertion
165
+ @assertion ||= OAuth2::Strategy::Assertion.new(self)
166
+ end
156
167
  end
157
168
  end
@@ -41,7 +41,7 @@ module OAuth2
41
41
  response.status
42
42
  end
43
43
 
44
- # The HTTP resposne body
44
+ # The HTTP response body
45
45
  def body
46
46
  response.body || ''
47
47
  end
@@ -0,0 +1,75 @@
1
+ require 'httpauth'
2
+ require 'jwt'
3
+
4
+ module OAuth2
5
+ module Strategy
6
+ # The Client Assertion Strategy
7
+ #
8
+ # @see http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-4.1.3
9
+ #
10
+ # Sample usage:
11
+ # client = OAuth2::Client.new(client_id, client_secret,
12
+ # :site => 'http://localhost:8080')
13
+ #
14
+ # params = {:hmac_secret => "some secret",
15
+ # # or :private_key => "private key string",
16
+ # :iss => "http://localhost:3001",
17
+ # :prn => "me@here.com",
18
+ # :exp => Time.now.utc.to_i + 3600}
19
+ #
20
+ # access = client.assertion.get_token(params)
21
+ # access.token # actual access_token string
22
+ # access.get("/api/stuff") # making api calls with access token in header
23
+ #
24
+ class Assertion < Base
25
+ # Not used for this strategy
26
+ #
27
+ # @raise [NotImplementedError]
28
+ def authorize_url
29
+ raise NotImplementedError, "The authorization endpoint is not used in this strategy"
30
+ end
31
+
32
+ # Retrieve an access token given the specified client.
33
+ #
34
+ # @param [Hash] params assertion params
35
+ # pass either :hmac_secret or :private_key, but not both.
36
+ #
37
+ # params :hmac_secret, secret string.
38
+ # params :private_key, private key string.
39
+ #
40
+ # params :iss, issuer
41
+ # params :aud, audience, optional
42
+ # params :prn, principal, current user
43
+ # params :exp, expired at, in seconds, like Time.now.utc.to_i + 3600
44
+ #
45
+ # @param [Hash] opts options
46
+ def get_token(params={}, opts={})
47
+ hash = build_request(params)
48
+ @client.get_token(hash, opts.merge('refresh_token' => nil))
49
+ end
50
+
51
+ def build_request(params)
52
+ assertion = build_assertion(params)
53
+ {:grant_type => "assertion",
54
+ :assertion_type => "urn:ietf:params:oauth:grant-type:jwt-bearer",
55
+ :assertion => assertion,
56
+ :scope => params[:scope]
57
+ }.merge(client_params)
58
+ end
59
+
60
+ def build_assertion(params)
61
+ claims = {:iss => params[:iss],
62
+ :aud => params[:aud],
63
+ :prn => params[:prn],
64
+ :exp => params[:exp]
65
+ }
66
+ if params[:hmac_secret]
67
+ jwt_assertion = JWT.encode(claims, params[:hmac_secret], "HS256")
68
+ elsif params[:private_key]
69
+ jwt_assertion = JWT.encode(claims, params[:private_key], "RS256")
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+
@@ -0,0 +1,29 @@
1
+ module OAuth2
2
+ module Strategy
3
+ # The Implicit Strategy
4
+ #
5
+ # @see http://tools.ietf.org/html/draft-ietf-oauth-v2-26#section-4.2
6
+ class Implicit < Base
7
+ # The required query parameters for the authorize URL
8
+ #
9
+ # @param [Hash] params additional query parameters
10
+ def authorize_params(params={})
11
+ params.merge('response_type' => 'token', 'client_id' => @client.id)
12
+ end
13
+
14
+ # The authorization URL endpoint of the provider
15
+ #
16
+ # @param [Hash] params additional query parameters for the URL
17
+ def authorize_url(params={})
18
+ @client.authorize_url(authorize_params.merge(params))
19
+ end
20
+
21
+ # Not used for this strategy
22
+ #
23
+ # @raise [NotImplementedError]
24
+ def get_token(*)
25
+ raise NotImplementedError, "The token is accessed differently in this strategy"
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,18 @@
1
1
  module OAuth2
2
- VERSION = "0.7.1"
2
+ class Version
3
+ MAJOR = 0 unless defined? MAJOR
4
+ MINOR = 8 unless defined? MINOR
5
+ PATCH = 0 unless defined? PATCH
6
+ PRE = nil unless defined? PRE
7
+
8
+ class << self
9
+
10
+ # @return [String]
11
+ def to_s
12
+ [MAJOR, MINOR, PATCH, PRE].compact.join('.')
13
+ end
14
+
15
+ end
16
+
17
+ end
3
18
  end
data/oauth2.gemspec CHANGED
@@ -5,7 +5,8 @@ Gem::Specification.new do |gem|
5
5
  gem.add_dependency 'faraday', '~> 0.8'
6
6
  gem.add_dependency 'httpauth', '~> 0.1'
7
7
  gem.add_dependency 'multi_json', '~> 1.0'
8
- gem.add_dependency 'rack', '~> 1.4'
8
+ gem.add_dependency 'rack', '~> 1.2'
9
+ gem.add_dependency 'jwt', '~> 0.1.4'
9
10
  gem.add_development_dependency 'addressable'
10
11
  gem.add_development_dependency 'multi_xml'
11
12
  gem.add_development_dependency 'rake'
@@ -22,5 +23,5 @@ Gem::Specification.new do |gem|
22
23
  gem.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
23
24
  gem.summary = %q{A Ruby wrapper for the OAuth 2.0 protocol.}
24
25
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
- gem.version = OAuth2::VERSION
26
+ gem.version = OAuth2::Version
26
27
  end
@@ -167,6 +167,10 @@ describe OAuth2::Client do
167
167
  subject.auth_code.should be_kind_of(OAuth2::Strategy::AuthCode)
168
168
  end
169
169
 
170
+ it '#implicit should instantiate a Implicit strategy with this client' do
171
+ subject.implicit.should be_kind_of(OAuth2::Strategy::Implicit)
172
+ end
173
+
170
174
  context 'with SSL options' do
171
175
  subject do
172
176
  cli = OAuth2::Client.new('abc', 'def', :site => 'https://api.example.com', :ssl => {:ca_file => 'foo.pem'})
@@ -0,0 +1,57 @@
1
+ require 'helper'
2
+
3
+ describe OAuth2::Strategy::Assertion do
4
+ let(:client) do
5
+ cli = OAuth2::Client.new('abc', 'def', :site => 'http://api.example.com')
6
+ cli.connection.build do |b|
7
+ b.adapter :test do |stub|
8
+ stub.post('/oauth/token') do |env|
9
+ case @mode
10
+ when "formencoded"
11
+ [200, {'Content-Type' => 'application/x-www-form-urlencoded'}, 'expires_in=600&access_token=salmon&refresh_token=trout']
12
+ when "json"
13
+ [200, {'Content-Type' => 'application/json'}, '{"expires_in":600,"access_token":"salmon","refresh_token":"trout"}']
14
+ end
15
+ end
16
+ end
17
+ end
18
+ cli
19
+ end
20
+
21
+ let(:params) { {:hmac_secret => 'foo'}}
22
+
23
+ subject {client.assertion}
24
+
25
+ describe "#authorize_url" do
26
+ it "should raise NotImplementedError" do
27
+ lambda {subject.authorize_url}.should raise_error(NotImplementedError)
28
+ end
29
+ end
30
+
31
+ %w(json formencoded).each do |mode|
32
+ describe "#get_token (#{mode})" do
33
+ before do
34
+ @mode = mode
35
+ @access = subject.get_token(params)
36
+ end
37
+
38
+ it 'returns AccessToken with same Client' do
39
+ @access.client.should == client
40
+ end
41
+
42
+ it 'returns AccessToken with #token' do
43
+ @access.token.should == 'salmon'
44
+ end
45
+
46
+ it 'returns AccessToken with #expires_in' do
47
+ @access.expires_in.should == 600
48
+ end
49
+
50
+ it 'returns AccessToken with #expires_at' do
51
+ @access.expires_at.should_not be_nil
52
+ end
53
+ end
54
+ end
55
+
56
+ end
57
+
@@ -0,0 +1,28 @@
1
+ require 'helper'
2
+
3
+ describe OAuth2::Strategy::Implicit do
4
+ let(:client) { OAuth2::Client.new('abc', 'def', :site => 'http://api.example.com') }
5
+
6
+ subject {client.implicit}
7
+
8
+ describe '#authorize_url' do
9
+ it 'should include the client_id' do
10
+ subject.authorize_url.should be_include('client_id=abc')
11
+ end
12
+
13
+ it 'should include the type' do
14
+ subject.authorize_url.should be_include('response_type=token')
15
+ end
16
+
17
+ it 'should include passed in options' do
18
+ cb = 'http://myserver.local/oauth/callback'
19
+ subject.authorize_url(:redirect_uri => cb).should be_include("redirect_uri=#{Rack::Utils.escape(cb)}")
20
+ end
21
+ end
22
+
23
+ describe "#get_token" do
24
+ it "should raise NotImplementedError" do
25
+ lambda {subject.get_token}.should raise_error(NotImplementedError)
26
+ end
27
+ end
28
+ end
metadata CHANGED
@@ -1,178 +1,202 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: oauth2
3
- version: !ruby/object:Gem::Version
4
- hash: 1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 7
9
- - 1
10
- version: 0.7.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Michael Bleigh
14
9
  - Erik Michaels-Ober
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2012-04-27 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2012-07-01 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: faraday
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
19
+ requirements:
27
20
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 27
30
- segments:
31
- - 0
32
- - 8
33
- version: "0.8"
21
+ - !ruby/object:Gem::Version
22
+ version: '0.8'
34
23
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: httpauth
38
24
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '0.8'
31
+ - !ruby/object:Gem::Dependency
32
+ name: httpauth
33
+ requirement: !ruby/object:Gem::Requirement
40
34
  none: false
41
- requirements:
35
+ requirements:
42
36
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 9
45
- segments:
46
- - 0
47
- - 1
48
- version: "0.1"
37
+ - !ruby/object:Gem::Version
38
+ version: '0.1'
49
39
  type: :runtime
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: multi_json
53
40
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
55
42
  none: false
56
- requirements:
43
+ requirements:
57
44
  - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 15
60
- segments:
61
- - 1
62
- - 0
63
- version: "1.0"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: multi_json
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
64
55
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '1.0'
63
+ - !ruby/object:Gem::Dependency
67
64
  name: rack
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: '1.2'
71
+ type: :runtime
68
72
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: '1.2'
79
+ - !ruby/object:Gem::Dependency
80
+ name: jwt
81
+ requirement: !ruby/object:Gem::Requirement
70
82
  none: false
71
- requirements:
83
+ requirements:
72
84
  - - ~>
73
- - !ruby/object:Gem::Version
74
- hash: 7
75
- segments:
76
- - 1
77
- - 4
78
- version: "1.4"
85
+ - !ruby/object:Gem::Version
86
+ version: 0.1.4
79
87
  type: :runtime
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- name: addressable
83
88
  prerelease: false
84
- requirement: &id005 !ruby/object:Gem::Requirement
85
- none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- hash: 3
90
- segments:
91
- - 0
92
- version: "0"
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 0.1.4
95
+ - !ruby/object:Gem::Dependency
96
+ name: addressable
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
93
103
  type: :development
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- name: multi_xml
97
104
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
99
- none: false
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- hash: 3
104
- segments:
105
- - 0
106
- version: "0"
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: multi_xml
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
107
119
  type: :development
108
- version_requirements: *id006
109
- - !ruby/object:Gem::Dependency
110
- name: rake
111
120
  prerelease: false
112
- requirement: &id007 !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- hash: 3
118
- segments:
119
- - 0
120
- version: "0"
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: rake
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
121
135
  type: :development
122
- version_requirements: *id007
123
- - !ruby/object:Gem::Dependency
124
- name: rdoc
125
136
  prerelease: false
126
- requirement: &id008 !ruby/object:Gem::Requirement
127
- none: false
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- hash: 3
132
- segments:
133
- - 0
134
- version: "0"
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: rdoc
145
+ requirement: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
135
151
  type: :development
136
- version_requirements: *id008
137
- - !ruby/object:Gem::Dependency
138
- name: rspec
139
152
  prerelease: false
140
- requirement: &id009 !ruby/object:Gem::Requirement
141
- none: false
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- hash: 3
146
- segments:
147
- - 0
148
- version: "0"
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rspec
161
+ requirement: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
149
167
  type: :development
150
- version_requirements: *id009
151
- - !ruby/object:Gem::Dependency
152
- name: simplecov
153
168
  prerelease: false
154
- requirement: &id010 !ruby/object:Gem::Requirement
155
- none: false
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- hash: 3
160
- segments:
161
- - 0
162
- version: "0"
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: simplecov
177
+ requirement: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
163
183
  type: :development
164
- version_requirements: *id010
165
- description: A Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth gem.
166
- email:
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ description: A Ruby wrapper for the OAuth 2.0 protocol built with a similar style
192
+ to the original OAuth gem.
193
+ email:
167
194
  - michael@intridea.com
168
195
  - sferik@gmail.com
169
196
  executables: []
170
-
171
197
  extensions: []
172
-
173
198
  extra_rdoc_files: []
174
-
175
- files:
199
+ files:
176
200
  - .document
177
201
  - .gemtest
178
202
  - .gitignore
@@ -187,9 +211,11 @@ files:
187
211
  - lib/oauth2/client.rb
188
212
  - lib/oauth2/error.rb
189
213
  - lib/oauth2/response.rb
214
+ - lib/oauth2/strategy/assertion.rb
190
215
  - lib/oauth2/strategy/auth_code.rb
191
216
  - lib/oauth2/strategy/base.rb
192
217
  - lib/oauth2/strategy/client_credentials.rb
218
+ - lib/oauth2/strategy/implicit.rb
193
219
  - lib/oauth2/strategy/password.rb
194
220
  - lib/oauth2/version.rb
195
221
  - oauth2.gemspec
@@ -197,52 +223,45 @@ files:
197
223
  - spec/oauth2/access_token_spec.rb
198
224
  - spec/oauth2/client_spec.rb
199
225
  - spec/oauth2/response_spec.rb
226
+ - spec/oauth2/strategy/assertion_spec.rb
200
227
  - spec/oauth2/strategy/auth_code_spec.rb
201
228
  - spec/oauth2/strategy/base_spec.rb
202
229
  - spec/oauth2/strategy/client_credentials_spec.rb
230
+ - spec/oauth2/strategy/implicit_spec.rb
203
231
  - spec/oauth2/strategy/password_spec.rb
204
232
  homepage: http://github.com/intridea/oauth2
205
233
  licenses: []
206
-
207
234
  post_install_message:
208
235
  rdoc_options: []
209
-
210
- require_paths:
236
+ require_paths:
211
237
  - lib
212
- required_ruby_version: !ruby/object:Gem::Requirement
238
+ required_ruby_version: !ruby/object:Gem::Requirement
213
239
  none: false
214
- requirements:
215
- - - ">="
216
- - !ruby/object:Gem::Version
217
- hash: 3
218
- segments:
219
- - 0
220
- version: "0"
221
- required_rubygems_version: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ! '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ required_rubygems_version: !ruby/object:Gem::Requirement
222
245
  none: false
223
- requirements:
224
- - - ">="
225
- - !ruby/object:Gem::Version
226
- hash: 23
227
- segments:
228
- - 1
229
- - 3
230
- - 6
246
+ requirements:
247
+ - - ! '>='
248
+ - !ruby/object:Gem::Version
231
249
  version: 1.3.6
232
250
  requirements: []
233
-
234
251
  rubyforge_project:
235
252
  rubygems_version: 1.8.23
236
253
  signing_key:
237
254
  specification_version: 3
238
255
  summary: A Ruby wrapper for the OAuth 2.0 protocol.
239
- test_files:
256
+ test_files:
240
257
  - spec/helper.rb
241
258
  - spec/oauth2/access_token_spec.rb
242
259
  - spec/oauth2/client_spec.rb
243
260
  - spec/oauth2/response_spec.rb
261
+ - spec/oauth2/strategy/assertion_spec.rb
244
262
  - spec/oauth2/strategy/auth_code_spec.rb
245
263
  - spec/oauth2/strategy/base_spec.rb
246
264
  - spec/oauth2/strategy/client_credentials_spec.rb
265
+ - spec/oauth2/strategy/implicit_spec.rb
247
266
  - spec/oauth2/strategy/password_spec.rb
248
267
  has_rdoc: