oauth-plugin 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG +6 -0
- data/Gemfile +4 -4
- data/README.rdoc +11 -0
- data/generators/oauth_consumer/templates/migration.rb +3 -0
- data/lib/oauth-plugin.rb +2 -2
- data/lib/oauth-plugin/version.rb +1 -1
- data/lib/oauth/controllers/application_controller_methods.rb +8 -4
- data/lib/oauth/controllers/consumer_controller.rb +6 -3
- data/lib/oauth/models/consumers/services/oauth2_token.rb +23 -1
- data/lib/oauth/models/consumers/token.rb +35 -7
- data/lib/oauth/rack/oauth_filter.rb +14 -10
- data/oauth-plugin.gemspec +1 -0
- data/spec/dummy_provider_models.rb +5 -5
- data/spec/rack/oauth_filter_spec.rb +4 -4
- metadata +83 -51
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
|
9
|
+
if RbConfig::CONFIG['target_os'] =~ /darwin/i
|
10
10
|
gem 'rb-fsevent'
|
11
11
|
gem 'growl'
|
12
12
|
end
|
13
|
-
if
|
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
|
20
|
+
if RbConfig::CONFIG['target_os'] =~ /darwin/i
|
21
21
|
gem 'growl'
|
22
22
|
end
|
23
|
-
if
|
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
|
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
|
14
|
+
if Rails::VERSION::MAJOR >= 3
|
15
15
|
module OAuth
|
16
16
|
module Plugin
|
17
17
|
class OAuthRailtie < Rails::Railtie
|
data/lib/oauth-plugin/version.rb
CHANGED
@@ -28,7 +28,7 @@ module OAuth
|
|
28
28
|
@strategies << :interactive if @options[:interactive]
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
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
|
-
|
48
|
-
|
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
|
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
|
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
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
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
|
-
|
50
|
-
|
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.
|
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
|
-
|
36
|
-
|
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.
|
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
|
-
|
50
|
-
|
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
|
-
|
88
|
-
|
89
|
-
|
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.
|
26
|
-
case
|
25
|
+
def self.where(q, p)
|
26
|
+
case p
|
27
27
|
when "not_authorized", "invalidated"
|
28
|
-
|
28
|
+
[]
|
29
29
|
else
|
30
|
-
OauthToken.new(
|
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!(:
|
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!(:
|
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!(:
|
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!(:
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
359
|
+
rubygems_version: 2.0.0
|
328
360
|
signing_key:
|
329
|
-
specification_version:
|
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
|