oauth-plugin 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e00863337c0f6f630e99c036361c7590f35e7035
4
+ data.tar.gz: 58fff0f6ec7e59f35615c9b395736adc9fe0eb81
5
+ SHA512:
6
+ metadata.gz: 85b490f713c4e5223b55b8c5e2b8e276103177b97b7f8aeae8887d0b73587083dcda787d1d0401717348ac7e0ba8f6eb55d55fc6bd8e04a528db926f72ee34a1
7
+ data.tar.gz: d43ead865825626ffdb3fd5e62edce078973b70b794ec61d72852b5aabdbc1573f83ca861c6058534ca4b1118193072da908e4181509d53f62680f32a7efa279
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 0.5.0
2
+ - Make compatible with Rails 4 [tomhughes]
3
+ - Added support for RefreshTokens [RubenHoms]
4
+ - allow? should return false when token is not found [thetizzo]
5
+ - add license to gemspec [jordimassaguerpla]
6
+ - update documentation for Rails 2.x [yann]
1
7
  0.4.1
2
8
  - Security fix for OAuth1 provider. Please upgrade if you're using any 0.4 version. Thanks to [tomhughes]
3
9
  - Limit index size in ConsumerToken migration to deal with very large tokens [devainandor]
data/Gemfile CHANGED
@@ -6,21 +6,21 @@ gemspec
6
6
  require 'rbconfig'
7
7
 
8
8
  platforms :ruby do
9
- if Config::CONFIG['target_os'] =~ /darwin/i
9
+ if RbConfig::CONFIG['target_os'] =~ /darwin/i
10
10
  gem 'rb-fsevent'
11
11
  gem 'growl'
12
12
  end
13
- if Config::CONFIG['target_os'] =~ /linux/i
13
+ if RbConfig::CONFIG['target_os'] =~ /linux/i
14
14
  gem 'rb-inotify', '>= 0.5.1'
15
15
  gem 'libnotify', '~> 0.1.3'
16
16
  end
17
17
  end
18
18
 
19
19
  platforms :jruby do
20
- if Config::CONFIG['target_os'] =~ /darwin/i
20
+ if RbConfig::CONFIG['target_os'] =~ /darwin/i
21
21
  gem 'growl'
22
22
  end
23
- if Config::CONFIG['target_os'] =~ /linux/i
23
+ if RbConfig::CONFIG['target_os'] =~ /linux/i
24
24
  gem 'rb-inotify', '>= 0.5.1'
25
25
  gem 'libnotify', '~> 0.1.3'
26
26
  end
data/README.rdoc CHANGED
@@ -166,6 +166,13 @@ This generates OAuth and OAuth client controllers as well as the required models
166
166
 
167
167
  It requires an authentication framework such as acts_as_authenticated, restful_authentication or restful_open_id_authentication. It also requires Rails 2.0.
168
168
 
169
+ === INSTALL RACK FILTER (NEW)
170
+
171
+ A big change over previous versions is that we now use a rack filter. You have to install this in your config/environment.rb file:
172
+
173
+ require 'oauth/rack/oauth_filter'
174
+ config.middleware.use OAuth::Rack::OAuthFilter
175
+
169
176
  === Generator Options
170
177
 
171
178
  By default the generator generates RSpec and ERB templates. The generator can instead create Test::Unit and/or HAML templates. To do this use the following options:
@@ -357,6 +364,10 @@ If you have an action you only want used via oauth:
357
364
 
358
365
  before_filter :oauth_required
359
366
 
367
+ You can also use this method in your controller:
368
+
369
+ oauthenticate :strategies => :token , :interactive => false
370
+
360
371
  All of these places the tokens user in current_user as you would expect. It also exposes the following methods:
361
372
 
362
373
  * current_token - for accessing the token used to authorize the current request
@@ -5,6 +5,9 @@ class CreateOauthConsumerTokens < ActiveRecord::Migration
5
5
  t.integer :user_id
6
6
  t.string :type, :limit => 30
7
7
  t.string :token, :limit => 1024 # This has to be huge because of Yahoo's excessively large tokens
8
+ t.string :refresh_token
9
+ t.string :expires_in
10
+ t.string :expires_at
8
11
  t.string :secret
9
12
  t.timestamps
10
13
  end
data/lib/oauth-plugin.rb CHANGED
@@ -3,7 +3,7 @@ require 'oauth/signature/hmac/sha1'
3
3
  require 'oauth/request_proxy/rack_request'
4
4
  require 'oauth/server'
5
5
  require 'oauth/controllers/application_controller_methods'
6
- if Rails.version =~ /^3\./
6
+ if Rails::VERSION::MAJOR >= 3
7
7
  require 'oauth/request_proxy/rack_request'
8
8
  else
9
9
  require 'oauth/request_proxy/action_controller_request'
@@ -11,7 +11,7 @@ else
11
11
  end
12
12
 
13
13
 
14
- if Rails.version =~ /^3\./
14
+ if Rails::VERSION::MAJOR >= 3
15
15
  module OAuth
16
16
  module Plugin
17
17
  class OAuthRailtie < Rails::Railtie
@@ -1,5 +1,5 @@
1
1
  module Oauth
2
2
  module Plugin
3
- VERSION = "0.4.1"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  end
@@ -28,7 +28,7 @@ module OAuth
28
28
  @strategies << :interactive if @options[:interactive]
29
29
  end
30
30
 
31
- def filter(controller)
31
+ def before(controller)
32
32
  Authenticator.new(controller,@strategies).allow?
33
33
  end
34
34
  end
@@ -44,8 +44,12 @@ module OAuth
44
44
  if @strategies.include?(:interactive) && interactive
45
45
  true
46
46
  elsif !(@strategies & env["oauth.strategies"].to_a).empty?
47
- @controller.send :current_user=, token.user if token
48
- true
47
+ if token.present?
48
+ @controller.send :current_user=, token.user
49
+ true
50
+ else
51
+ false
52
+ end
49
53
  else
50
54
  if @strategies.include?(:interactive)
51
55
  controller.send :access_denied
@@ -133,4 +137,4 @@ module OAuth
133
137
 
134
138
  end
135
139
  end
136
- end
140
+ end
@@ -25,7 +25,7 @@ module Oauth
25
25
 
26
26
  unless @token
27
27
  if @consumer.ancestors.include?(Oauth2Token)
28
- request_url = callback2_oauth_consumer_url(params[:id]) + callback2_querystring
28
+ request_url = callback2_oauth_consumer_url + callback2_querystring
29
29
  redirect_to @consumer.authorize_url(request_url)
30
30
  else
31
31
  request_url = callback_oauth_consumer_url(params[:id]) + callback2_querystring
@@ -45,8 +45,7 @@ module Oauth
45
45
  end
46
46
 
47
47
  def callback2
48
- @token = @consumer.access_token(current_user,params[:code], callback2_oauth_consumer_url(params[:id]))
49
- logger.info @token.inspect
48
+ @token = @consumer.access_token(current_user,params[:code], callback2_oauth_consumer_url)
50
49
  if @token
51
50
  # Log user in
52
51
  if logged_in?
@@ -118,6 +117,10 @@ module Oauth
118
117
  end
119
118
  end
120
119
 
120
+ def callback2_oauth_consumer_url
121
+ @consumer.consumer.options[:redirect_uri]
122
+ end
123
+
121
124
  protected
122
125
 
123
126
  # Override this in your controller to decide where you want to redirect user to after callback is finished.
@@ -1,5 +1,6 @@
1
1
  require 'oauth2'
2
2
  class Oauth2Token < ConsumerToken
3
+ after_initialize :ensure_access, if: :expired_and_existing?
3
4
 
4
5
  def self.consumer
5
6
  @consumer||=create_consumer
@@ -21,7 +22,28 @@ class Oauth2Token < ConsumerToken
21
22
  end
22
23
 
23
24
  def client
24
- @client ||= OAuth2::AccessToken.new self.class.consumer, token
25
+ @client ||= OAuth2::AccessToken.new self.class.consumer, token, {refresh_token: refresh_token, expires_at: expires_at, expires_in: expires_in }
25
26
  end
26
27
 
28
+ # @return [Boolean] Is the access token expired and does the record exist in the datastore?
29
+ def expired_and_existing?
30
+ return true if !self.new_record? and Time.now.to_i >= self.expires_at.to_i
31
+ false
32
+ end
33
+
34
+ # Refreshes the access token to ensure access
35
+ def ensure_access
36
+ self.class.find_or_create_from_access_token user, self, client.refresh!
37
+ end
38
+
39
+ # Returns the expiration date (expires_in, expires_at)
40
+ #
41
+ # @return [String, String] Expires_in and expires_at, respectively
42
+ # @note It will return the default expiration time as defined in the OAuth 2.0 spec when no options are set
43
+ def expiration_date(token)
44
+ return token.expires_in, token.expires_at if !token.expires_in.nil? and !token.expires_at.nil?
45
+ return token.expires_in, (Time.now.to_i + token.expires_in.to_i) if token.expires_at.nil? and !token.expires_in.nil?
46
+ return (token.expires_at.to_i - Time.now.to_i), token.expires_at if token.expires_in.nil? and !token.expires_at.nil?
47
+ return "3600", (Time.now.to_i + 3600)
48
+ end
27
49
  end
@@ -38,21 +38,49 @@ module Oauth
38
38
  find_or_create_from_access_token user, access_token
39
39
  end
40
40
 
41
- def find_or_create_from_access_token(user,access_token)
42
- secret = access_token.respond_to?(:secret) ? access_token.secret : nil
43
- if user
44
- token = self.find_or_initialize_by_user_id_and_token(user.id, access_token.token)
41
+ # Finds, creates or updates a ConsumerToken by finding the token
42
+ # or taking it when it's given. It then updates the attributes and saves the changes/new record to a datastore.
43
+ # @param user [User] The user to which the access token should belong to
44
+ # @param access_token [AccessToken || Oauth2Token] Either a request token taken from the service or a ConsumerToken
45
+ # @param new_token [AccessToken] A new access token, used for refreshing the access token with OAuth 2.
46
+ #
47
+ # Usage example:
48
+ # find_or_create_from_access_token(current_user, access_token) <-- Find or create a new access token
49
+ # find_or_create_from_access-token(current_user, Oauth2Token.last, client.refresh!) <-- Edits existing record with new refreshed information
50
+ def find_or_create_from_access_token(user, access_token, new_token = nil)
51
+ if access_token.class.ancestors.include?(Oauth2Token)
52
+ token = access_token
45
53
  else
46
- token = self.find_or_initialize_by_token(access_token.token)
54
+ if user
55
+ token = self.find_or_initialize_by_user_id_and_token(user.id, access_token.token)
56
+ else
57
+ token = self.find_or_initialize_by_token(access_token.token)
58
+ end
47
59
  end
48
60
 
49
- # set or update the secret
50
- token.secret = secret
61
+ token = if new_token then set_details(new_token, access_token) else set_details(access_token, token) end
62
+
51
63
  token.save! if token.new_record? or token.changed?
52
64
 
53
65
  token
54
66
  end
55
67
 
68
+ # Set the details such as the secret, refresh token and expiration time to an instance of ConsumerToken
69
+ # @return [ConsumerToken] A ConsumerToken
70
+ def set_details(access_token, token)
71
+ secret = access_token.respond_to?(:secret) ? access_token.secret : nil
72
+ refresh_token = access_token.respond_to?(:refresh_token) ? access_token.refresh_token : nil
73
+ expires_in, expires_at = token.expiration_date(access_token) if token.class.ancestors.include?(Oauth2Token)
74
+
75
+ token.token = access_token.token
76
+ token.refresh_token = refresh_token
77
+ token.secret = secret
78
+ token.expires_at = expires_at
79
+ token.expires_in = expires_in
80
+
81
+ token
82
+ end
83
+
56
84
  def build_user_from_token
57
85
  end
58
86
 
@@ -24,7 +24,7 @@ module OAuth
24
24
  env["oauth_plugin"] = true
25
25
  strategies = []
26
26
  if token_string = oauth2_token(request)
27
- if token = Oauth2Token.first(:conditions => ['invalidated_at IS NULL AND authorized_at IS NOT NULL and token = ?', token_string])
27
+ if token = Oauth2Token.where('invalidated_at IS NULL and authorized_at IS NOT NULL and token = ?', token_string).first
28
28
  env["oauth.token"] = token
29
29
  env["oauth.version"] = 2
30
30
  strategies << :oauth20_token
@@ -32,22 +32,26 @@ module OAuth
32
32
  end
33
33
 
34
34
  elsif oauth1_verify(request) do |request_proxy|
35
- client_application = ClientApplication.find_by_key(request_proxy.consumer_key)
36
- env["oauth.client_application_candidate"] = client_application
35
+ client_application = ClientApplication.find_by_key(request_proxy.consumer_key)
36
+ env["oauth.client_application_candidate"] = client_application
37
37
 
38
+ oauth_token = nil
39
+
40
+ if client_application
38
41
  # Store this temporarily in client_application object for use in request token generation
39
42
  client_application.token_callback_url = request_proxy.oauth_callback if request_proxy.oauth_callback
40
- oauth_token = nil
41
43
 
42
44
  if request_proxy.token
43
- oauth_token = client_application.tokens.first(:conditions => ['invalidated_at IS NULL AND authorized_at IS NOT NULL and token = ?', request_proxy.token])
45
+ oauth_token = client_application.tokens.where('invalidated_at IS NULL AND authorized_at IS NOT NULL and token = ?', request_proxy.token).first
44
46
  if oauth_token.respond_to?(:provided_oauth_verifier=)
45
47
  oauth_token.provided_oauth_verifier = request_proxy.oauth_verifier
46
48
  end
47
49
  env["oauth.token_candidate"] = oauth_token
48
50
  end
49
- # return the token secret and the consumer secret
50
- [(oauth_token.nil? ? nil : oauth_token.secret), (client_application.nil? ? nil : client_application.secret)]
51
+ end
52
+
53
+ # return the token secret and the consumer secret
54
+ [(oauth_token.nil? ? nil : oauth_token.secret), (client_application.nil? ? nil : client_application.secret)]
51
55
  end
52
56
  if env["oauth.token_candidate"]
53
57
  env["oauth.token"] = env["oauth.token_candidate"]
@@ -84,9 +88,9 @@ module OAuth
84
88
 
85
89
  def oauth2_token(request)
86
90
  request.params['bearer_token'] || request.params['access_token'] || (request.params["oauth_token"] && !request.params["oauth_signature"] ? request.params["oauth_token"] : nil ) ||
87
- request.env["HTTP_AUTHORIZATION"] &&
88
- !request.env["HTTP_AUTHORIZATION"][/(oauth_version="1.0")/] &&
89
- request.env["HTTP_AUTHORIZATION"][/^(Bearer|OAuth|Token) (token=)?([^\s]*)$/, 3]
91
+ request.env["HTTP_AUTHORIZATION"] &&
92
+ !request.env["HTTP_AUTHORIZATION"][/(oauth_version="1.0")/] &&
93
+ request.env["HTTP_AUTHORIZATION"][/^(Bearer|OAuth|Token) (token=)?([^\s]*)$/, 3]
90
94
  end
91
95
  end
92
96
  end
data/oauth-plugin.gemspec CHANGED
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.authors = ["Pelle Braendgaard"]
11
11
  s.date = %q{2011-10-20}
12
12
  s.description = %q{Rails plugin for implementing an OAuth Provider or Consumer}
13
+ s.license = "MIT"
13
14
  s.email = %q{oauth-ruby@googlegroups.com}
14
15
  s.extra_rdoc_files = [
15
16
  "README.rdoc"
@@ -20,14 +20,14 @@ class ClientApplication
20
20
  end
21
21
 
22
22
  class OauthToken
23
- attr_accessor :token
23
+ attr_accessor :token, :refresh_token
24
24
 
25
- def self.first(conditions_hash)
26
- case conditions_hash[:conditions].last
25
+ def self.where(q, p)
26
+ case p
27
27
  when "not_authorized", "invalidated"
28
- nil
28
+ []
29
29
  else
30
- OauthToken.new(conditions_hash[:conditions].last)
30
+ [OauthToken.new(p)]
31
31
  end
32
32
  end
33
33
 
@@ -42,7 +42,7 @@ describe OAuth::Rack::OAuthFilter do
42
42
  it "should sign with oauth 1 access token" do
43
43
  client_application = ClientApplication.new "my_consumer"
44
44
  ClientApplication.stub!(:find_by_key).and_return(client_application)
45
- client_application.tokens.stub!(:first).and_return(AccessToken.new("my_token"))
45
+ client_application.tokens.stub!(:where).and_return([AccessToken.new("my_token")])
46
46
  get '/',{},{"HTTP_AUTHORIZATION"=>'OAuth oauth_consumer_key="my_consumer", oauth_nonce="oiFHXoN0172eigBBUfgaZLdQg7ycGekv8iTdfkCStY", oauth_signature="y35B2DqTWaNlzNX0p4wv%2FJAGzg8%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1295040394", oauth_token="my_token", oauth_version="1.0"'}
47
47
  last_response.should be_ok
48
48
  response = MultiJson.decode(last_response.body)
@@ -52,7 +52,7 @@ describe OAuth::Rack::OAuthFilter do
52
52
  it "should sign with oauth 1 request token" do
53
53
  client_application = ClientApplication.new "my_consumer"
54
54
  ClientApplication.stub!(:find_by_key).and_return(client_application)
55
- client_application.tokens.stub!(:first).and_return(RequestToken.new("my_token"))
55
+ client_application.tokens.stub!(:where).and_return([RequestToken.new("my_token")])
56
56
  get '/',{},{"HTTP_AUTHORIZATION"=>'OAuth oauth_consumer_key="my_consumer", oauth_nonce="oiFHXoN0172eigBBUfgaZLdQg7ycGekv8iTdfkCStY", oauth_signature="y35B2DqTWaNlzNX0p4wv%2FJAGzg8%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1295040394", oauth_token="my_token", oauth_version="1.0"'}
57
57
  last_response.should be_ok
58
58
  response = MultiJson.decode(last_response.body)
@@ -71,7 +71,7 @@ describe OAuth::Rack::OAuthFilter do
71
71
  it "should sign with oauth 1 access token" do
72
72
  client_application = ClientApplication.new "my_consumer"
73
73
  ClientApplication.stub!(:find_by_key).and_return(client_application)
74
- client_application.tokens.stub!(:first).and_return(AccessToken.new("my_token"))
74
+ client_application.tokens.stub!(:where).and_return([AccessToken.new("my_token")])
75
75
  get '/',{},{"HTTP_AUTHORIZATION"=>'OAuth oauth_consumer_key="my_consumer",oauth_nonce="oiFHXoN0172eigBBUfgaZLdQg7ycGekv8iTdfkCStY",oauth_signature="y35B2DqTWaNlzNX0p4wv%2FJAGzg8%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1295040394",oauth_token="my_token",oauth_version="1.0"'}
76
76
  last_response.should be_ok
77
77
  response = MultiJson.decode(last_response.body)
@@ -81,7 +81,7 @@ describe OAuth::Rack::OAuthFilter do
81
81
  it "should sign with oauth 1 request token" do
82
82
  client_application = ClientApplication.new "my_consumer"
83
83
  ClientApplication.stub!(:find_by_key).and_return(client_application)
84
- client_application.tokens.stub!(:first).and_return(RequestToken.new("my_token"))
84
+ client_application.tokens.stub!(:where).and_return([RequestToken.new("my_token")])
85
85
  get '/',{},{"HTTP_AUTHORIZATION"=>'OAuth oauth_consumer_key="my_consumer",oauth_nonce="oiFHXoN0172eigBBUfgaZLdQg7ycGekv8iTdfkCStY",oauth_signature="y35B2DqTWaNlzNX0p4wv%2FJAGzg8%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1295040394",oauth_token="my_token",oauth_version="1.0"'}
86
86
  last_response.should be_ok
87
87
  response = MultiJson.decode(last_response.body)
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth-plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
5
- prerelease:
4
+ version: 0.5.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Pelle Braendgaard
@@ -13,125 +12,158 @@ date: 2011-10-20 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: opentransact
16
- requirement: &70232006903220 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
- version_requirements: *70232006903220
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: rspec
27
- requirement: &70232006901300 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - ~>
31
32
  - !ruby/object:Gem::Version
32
33
  version: 2.4.0
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *70232006901300
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 2.4.0
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: fakeweb
38
- requirement: &70232006899200 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - '>='
42
46
  - !ruby/object:Gem::Version
43
47
  version: '0'
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *70232006899200
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: fuubar
49
- requirement: &70232006896860 !ruby/object:Gem::Requirement
50
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
- - - ! '>='
59
+ - - '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  type: :development
56
63
  prerelease: false
57
- version_requirements: *70232006896860
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: guard-rspec
60
- requirement: &70232006896440 !ruby/object:Gem::Requirement
61
- none: false
71
+ requirement: !ruby/object:Gem::Requirement
62
72
  requirements:
63
- - - ! '>='
73
+ - - '>='
64
74
  - !ruby/object:Gem::Version
65
75
  version: '0'
66
76
  type: :development
67
77
  prerelease: false
68
- version_requirements: *70232006896440
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: growl
71
- requirement: &70232006895980 !ruby/object:Gem::Requirement
72
- none: false
85
+ requirement: !ruby/object:Gem::Requirement
73
86
  requirements:
74
- - - ! '>='
87
+ - - '>='
75
88
  - !ruby/object:Gem::Version
76
89
  version: '0'
77
90
  type: :development
78
91
  prerelease: false
79
- version_requirements: *70232006895980
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
80
97
  - !ruby/object:Gem::Dependency
81
98
  name: rack-test
82
- requirement: &70232006895540 !ruby/object:Gem::Requirement
83
- none: false
99
+ requirement: !ruby/object:Gem::Requirement
84
100
  requirements:
85
- - - ! '>='
101
+ - - '>='
86
102
  - !ruby/object:Gem::Version
87
103
  version: '0'
88
104
  type: :development
89
105
  prerelease: false
90
- version_requirements: *70232006895540
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
91
111
  - !ruby/object:Gem::Dependency
92
112
  name: multi_json
93
- requirement: &70232006895080 !ruby/object:Gem::Requirement
94
- none: false
113
+ requirement: !ruby/object:Gem::Requirement
95
114
  requirements:
96
- - - ! '>='
115
+ - - '>='
97
116
  - !ruby/object:Gem::Version
98
117
  version: '0'
99
118
  type: :runtime
100
119
  prerelease: false
101
- version_requirements: *70232006895080
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
102
125
  - !ruby/object:Gem::Dependency
103
126
  name: oauth
104
- requirement: &70232006894540 !ruby/object:Gem::Requirement
105
- none: false
127
+ requirement: !ruby/object:Gem::Requirement
106
128
  requirements:
107
129
  - - ~>
108
130
  - !ruby/object:Gem::Version
109
131
  version: 0.4.4
110
132
  type: :runtime
111
133
  prerelease: false
112
- version_requirements: *70232006894540
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: 0.4.4
113
139
  - !ruby/object:Gem::Dependency
114
140
  name: rack
115
- requirement: &70232006894120 !ruby/object:Gem::Requirement
116
- none: false
141
+ requirement: !ruby/object:Gem::Requirement
117
142
  requirements:
118
- - - ! '>='
143
+ - - '>='
119
144
  - !ruby/object:Gem::Version
120
145
  version: '0'
121
146
  type: :runtime
122
147
  prerelease: false
123
- version_requirements: *70232006894120
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
124
153
  - !ruby/object:Gem::Dependency
125
154
  name: oauth2
126
- requirement: &70232006893580 !ruby/object:Gem::Requirement
127
- none: false
155
+ requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
- - - ! '>='
157
+ - - '>='
130
158
  - !ruby/object:Gem::Version
131
159
  version: 0.5.0
132
160
  type: :runtime
133
161
  prerelease: false
134
- version_requirements: *70232006893580
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: 0.5.0
135
167
  description: Rails plugin for implementing an OAuth Provider or Consumer
136
168
  email: oauth-ruby@googlegroups.com
137
169
  executables: []
@@ -305,28 +337,28 @@ files:
305
337
  - tasks/oauth_tasks.rake
306
338
  - uninstall.rb
307
339
  homepage: http://github.com/pelle/oauth-plugin
308
- licenses: []
340
+ licenses:
341
+ - MIT
342
+ metadata: {}
309
343
  post_install_message:
310
344
  rdoc_options: []
311
345
  require_paths:
312
346
  - lib
313
347
  required_ruby_version: !ruby/object:Gem::Requirement
314
- none: false
315
348
  requirements:
316
- - - ! '>='
349
+ - - '>='
317
350
  - !ruby/object:Gem::Version
318
351
  version: '0'
319
352
  required_rubygems_version: !ruby/object:Gem::Requirement
320
- none: false
321
353
  requirements:
322
- - - ! '>'
354
+ - - '>'
323
355
  - !ruby/object:Gem::Version
324
356
  version: 1.3.1
325
357
  requirements: []
326
358
  rubyforge_project: oauth
327
- rubygems_version: 1.8.11
359
+ rubygems_version: 2.0.0
328
360
  signing_key:
329
- specification_version: 3
361
+ specification_version: 4
330
362
  summary: Ruby on Rails Plugin for OAuth Provider and Consumer
331
363
  test_files:
332
364
  - spec/dummy_provider_models.rb