oauth2-provider 0.0.18 → 0.0.19
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.
- data/examples/rails3-example/Gemfile.lock +3 -3
- data/examples/rails3-example/app/controllers/application_controller.rb +1 -1
- data/examples/rails3-example/app/controllers/authorization_controller.rb +7 -0
- data/examples/rails3-example/app/views/home/show.html.erb +1 -1
- data/examples/rails3-example/app/views/layouts/application.html.erb +1 -0
- data/examples/rails3-example/db/migrate/20110508151948_add_oauth2_tables.rb +1 -1
- data/examples/rails3-example/db/schema.rb +4 -3
- data/lib/oauth2/provider/models.rb +15 -0
- data/lib/oauth2/provider/models/access_token.rb +3 -3
- data/lib/oauth2/provider/models/authorization_code.rb +3 -3
- data/lib/oauth2/provider/models/client.rb +4 -3
- data/lib/oauth2/provider/rack/resource_request.rb +10 -25
- data/lib/oauth2/provider/rack/responses.rb +17 -0
- data/lib/oauth2/provider/random.rb +3 -2
- data/lib/oauth2/provider/version.rb +1 -1
- data/oauth2-provider.gemspec +2 -2
- data/spec/models/access_token_spec.rb +5 -10
- data/spec/models/authorization_code_spec.rb +3 -4
- data/spec/models/client_spec.rb +19 -10
- data/spec/models/random_token_spec.rb +27 -0
- data/spec/requests/authentication_spec.rb +1 -1
- metadata +125 -200
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../..
|
3
3
|
specs:
|
4
|
-
oauth2-provider (0.0.
|
5
|
-
activesupport (~> 3.0
|
4
|
+
oauth2-provider (0.0.18)
|
5
|
+
activesupport (~> 3.0)
|
6
6
|
addressable (~> 2.2)
|
7
7
|
|
8
8
|
GEM
|
@@ -35,7 +35,7 @@ GEM
|
|
35
35
|
activemodel (= 3.0.7)
|
36
36
|
activesupport (= 3.0.7)
|
37
37
|
activesupport (3.0.7)
|
38
|
-
addressable (2.2.
|
38
|
+
addressable (2.2.6)
|
39
39
|
arel (2.0.9)
|
40
40
|
builder (2.1.2)
|
41
41
|
erubis (2.6.6)
|
@@ -3,6 +3,7 @@ class AuthorizationController < ApplicationController
|
|
3
3
|
|
4
4
|
before_filter :authenticate_account
|
5
5
|
before_filter :block_invalid_authorization_code_requests
|
6
|
+
before_filter :regrant_existing_authorization
|
6
7
|
|
7
8
|
def new
|
8
9
|
@client = oauth2_authorization_request.client
|
@@ -15,4 +16,10 @@ class AuthorizationController < ApplicationController
|
|
15
16
|
deny_authorization_code
|
16
17
|
end
|
17
18
|
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def regrant_existing_authorization
|
23
|
+
oauth2_authorization_request.grant_existing! current_account
|
24
|
+
end
|
18
25
|
end
|
@@ -1 +1 @@
|
|
1
|
-
Hello <%= current_account.login
|
1
|
+
Hello <%= current_account ? current_account.login : "stranger" %>!
|
@@ -4,6 +4,7 @@ class AddOauth2Tables < ActiveRecord::Migration
|
|
4
4
|
t.string 'name'
|
5
5
|
t.string 'oauth_identifier', :null => false
|
6
6
|
t.string 'oauth_secret', :null => false
|
7
|
+
t.string 'oauth_redirect_uri'
|
7
8
|
end
|
8
9
|
|
9
10
|
create_table 'oauth_authorization_codes', :force => true do |t|
|
@@ -34,7 +35,6 @@ class AddOauth2Tables < ActiveRecord::Migration
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def self.down
|
37
|
-
drop_table 'example_resource_owners'
|
38
38
|
drop_table 'oauth_access_tokens'
|
39
39
|
drop_table 'oauth_authorizations'
|
40
40
|
drop_table 'oauth_authorization_codes'
|
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended to check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(:version =>
|
13
|
+
ActiveRecord::Schema.define(:version => 20110614224516) do
|
14
14
|
|
15
15
|
create_table "accounts", :force => true do |t|
|
16
16
|
t.string "login", :null => false
|
@@ -45,8 +45,9 @@ ActiveRecord::Schema.define(:version => 20110508151948) do
|
|
45
45
|
|
46
46
|
create_table "oauth_clients", :force => true do |t|
|
47
47
|
t.string "name"
|
48
|
-
t.string "oauth_identifier",
|
49
|
-
t.string "oauth_secret",
|
48
|
+
t.string "oauth_identifier", :null => false
|
49
|
+
t.string "oauth_secret", :null => false
|
50
|
+
t.string "oauth_redirect_uri"
|
50
51
|
end
|
51
52
|
|
52
53
|
end
|
@@ -37,4 +37,19 @@ module OAuth2::Provider::Models
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
module RandomToken
|
42
|
+
extend ActiveSupport::Concern
|
43
|
+
|
44
|
+
module ClassMethods
|
45
|
+
def random_token
|
46
|
+
OAuth2::Provider::Random.base62(48)
|
47
|
+
end
|
48
|
+
|
49
|
+
def unique_random_token(attribute)
|
50
|
+
key = random_token while (key.nil? || where(attribute => key).exists?)
|
51
|
+
key
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
40
55
|
end
|
@@ -2,7 +2,7 @@ module OAuth2::Provider::Models::AccessToken
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
included do
|
5
|
-
include OAuth2::Provider::Models::TokenExpiry
|
5
|
+
include OAuth2::Provider::Models::TokenExpiry, OAuth2::Provider::Models::RandomToken
|
6
6
|
self.default_token_lifespan = 1.month
|
7
7
|
|
8
8
|
validates_presence_of :authorization, :access_token, :expires_at
|
@@ -13,8 +13,8 @@ module OAuth2::Provider::Models::AccessToken
|
|
13
13
|
|
14
14
|
def initialize(*args, &block)
|
15
15
|
super
|
16
|
-
self.access_token ||=
|
17
|
-
self.refresh_token ||=
|
16
|
+
self.access_token ||= self.class.unique_random_token(:access_token)
|
17
|
+
self.refresh_token ||= self.class.unique_random_token(:refresh_token)
|
18
18
|
end
|
19
19
|
|
20
20
|
def as_json(options = {})
|
@@ -2,16 +2,16 @@ module OAuth2::Provider::Models::AuthorizationCode
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
included do
|
5
|
-
include OAuth2::Provider::Models::TokenExpiry
|
5
|
+
include OAuth2::Provider::Models::TokenExpiry, OAuth2::Provider::Models::RandomToken
|
6
6
|
self.default_token_lifespan = 1.minute
|
7
7
|
|
8
8
|
delegate :client, :resource_owner, :to => :authorization
|
9
9
|
validates_presence_of :authorization, :code, :expires_at, :redirect_uri
|
10
10
|
end
|
11
11
|
|
12
|
-
def initialize(
|
12
|
+
def initialize(*args)
|
13
13
|
super
|
14
|
-
self.code ||=
|
14
|
+
self.code ||= self.class.unique_random_token(:code)
|
15
15
|
end
|
16
16
|
|
17
17
|
module ClassMethods
|
@@ -4,14 +4,15 @@ module OAuth2::Provider::Models::Client
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
included do
|
7
|
+
include OAuth2::Provider::Models::RandomToken
|
7
8
|
validates_presence_of :oauth_identifier, :oauth_secret, :name
|
8
9
|
validates_uniqueness_of :oauth_identifier
|
9
10
|
end
|
10
11
|
|
11
12
|
def initialize(*args, &block)
|
12
13
|
super
|
13
|
-
self.oauth_identifier ||=
|
14
|
-
self.oauth_secret ||=
|
14
|
+
self.oauth_identifier ||= self.class.unique_random_token(:oauth_identifier)
|
15
|
+
self.oauth_secret ||= self.class.unique_random_token(:oauth_secret)
|
15
16
|
end
|
16
17
|
|
17
18
|
def to_param
|
@@ -24,7 +25,7 @@ module OAuth2::Provider::Models::Client
|
|
24
25
|
|
25
26
|
def allow_redirection?(uri)
|
26
27
|
uri_host = Addressable::URI.parse(uri).host
|
27
|
-
|
28
|
+
unless oauth_redirect_uri.nil? or oauth_redirect_uri.empty?
|
28
29
|
Addressable::URI.parse(oauth_redirect_uri).host == uri_host
|
29
30
|
else
|
30
31
|
!uri_host.nil? && true
|
@@ -2,7 +2,9 @@ require 'rack/auth/abstract/request'
|
|
2
2
|
|
3
3
|
module OAuth2::Provider::Rack
|
4
4
|
class ResourceRequest < Rack::Request
|
5
|
-
|
5
|
+
include Responses
|
6
|
+
|
7
|
+
delegate :has_scope?, :to => :authorization
|
6
8
|
|
7
9
|
def token
|
8
10
|
token_from_param || token_from_header
|
@@ -17,15 +19,13 @@ module OAuth2::Provider::Rack
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def token_from_header
|
20
|
-
if
|
21
|
-
|
22
|
+
if authorization_header.provided?
|
23
|
+
authorization_header.params
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
|
-
def
|
26
|
-
@
|
27
|
-
@env.has_key?(key)
|
28
|
-
end
|
27
|
+
def authorization_header
|
28
|
+
@authorization_header ||= Rack::Auth::AbstractRequest.new(env)
|
29
29
|
end
|
30
30
|
|
31
31
|
def authenticate_request!(options, &block)
|
@@ -53,26 +53,17 @@ module OAuth2::Provider::Rack
|
|
53
53
|
authorization && authorization.resource_owner
|
54
54
|
end
|
55
55
|
|
56
|
-
def authentication_required!(reason = nil)
|
57
|
-
env['warden'] && env['warden'].custom_failure!
|
58
|
-
throw_response Responses.unauthorized(reason)
|
59
|
-
end
|
60
|
-
|
61
|
-
def insufficient_scope!
|
62
|
-
throw_response Responses.json_error('insufficient_scope', :status => 403)
|
63
|
-
end
|
64
|
-
|
65
56
|
def validate_token!
|
66
57
|
if has_token? && @token_validated.nil?
|
67
58
|
@token_validated = true
|
68
|
-
|
59
|
+
block_invalid_request
|
69
60
|
block_invalid_token
|
70
61
|
end
|
71
62
|
end
|
72
63
|
|
73
|
-
def
|
64
|
+
def block_invalid_request
|
74
65
|
if token_from_param && token_from_header && (token_from_param != token_from_header)
|
75
|
-
|
66
|
+
invalid_request! 'both authorization header and oauth_token provided, with conflicting tokens'
|
76
67
|
end
|
77
68
|
end
|
78
69
|
|
@@ -81,11 +72,5 @@ module OAuth2::Provider::Rack
|
|
81
72
|
@authorization = access_token.authorization if access_token
|
82
73
|
authentication_required! 'invalid_token' if access_token.nil? || access_token.expired?
|
83
74
|
end
|
84
|
-
|
85
|
-
private
|
86
|
-
|
87
|
-
def throw_response(response)
|
88
|
-
throw :oauth2, response
|
89
|
-
end
|
90
75
|
end
|
91
76
|
end
|
@@ -24,6 +24,19 @@ module OAuth2::Provider::Rack::Responses
|
|
24
24
|
[302, {'Location' => append_to_uri(uri, :code => code)}, []]
|
25
25
|
end
|
26
26
|
|
27
|
+
def insufficient_scope!
|
28
|
+
throw_response OAuth2::Provider::Rack::Responses.json_error('insufficient_scope', :status => 403)
|
29
|
+
end
|
30
|
+
|
31
|
+
def invalid_request!(description)
|
32
|
+
throw_response OAuth2::Provider::Rack::Responses.json_error('invalid_request', :description => description, :status => 401)
|
33
|
+
end
|
34
|
+
|
35
|
+
def authentication_required!(reason = nil)
|
36
|
+
env['warden'] && env['warden'].custom_failure!
|
37
|
+
throw_response OAuth2::Provider::Rack::Responses.unauthorized(reason)
|
38
|
+
end
|
39
|
+
|
27
40
|
private
|
28
41
|
|
29
42
|
def self.append_to_uri(uri, parameters = {})
|
@@ -31,4 +44,8 @@ module OAuth2::Provider::Rack::Responses
|
|
31
44
|
u.query_values = (u.query_values || {}).merge(parameters)
|
32
45
|
u.to_s
|
33
46
|
end
|
47
|
+
|
48
|
+
def throw_response(response)
|
49
|
+
throw :oauth2, response
|
50
|
+
end
|
34
51
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'oauth2/provider'
|
2
|
+
require 'securerandom'
|
2
3
|
|
3
4
|
module OAuth2::Provider::Random
|
4
5
|
module Base62
|
@@ -18,12 +19,12 @@ module OAuth2::Provider::Random
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def base62(length = 8)
|
21
|
-
number =
|
22
|
+
number = SecureRandom.random_number(62 ** length)
|
22
23
|
Base62.encode(number).rjust(length, '0')
|
23
24
|
end
|
24
25
|
|
25
26
|
def base36(length = 8)
|
26
|
-
|
27
|
+
SecureRandom.random_number(36 ** length).to_s(36).rjust(length, '0')
|
27
28
|
end
|
28
29
|
|
29
30
|
module_function :base62, :base36
|
data/oauth2-provider.gemspec
CHANGED
@@ -22,10 +22,10 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_dependency 'addressable', '~>2.2'
|
23
23
|
|
24
24
|
s.add_development_dependency 'rack-test', '~>0.5.7'
|
25
|
-
s.add_development_dependency 'activerecord', '~>3.0
|
25
|
+
s.add_development_dependency 'activerecord', '~>3.0'
|
26
26
|
s.add_development_dependency 'rspec', '~>2.1.0'
|
27
27
|
s.add_development_dependency 'mocha', '~>0.9.12'
|
28
|
-
s.add_development_dependency 'rake', '~>0.
|
28
|
+
s.add_development_dependency 'rake', '~>0.9.2'
|
29
29
|
s.add_development_dependency 'sqlite3-ruby', '~>1.3.1'
|
30
30
|
s.add_development_dependency 'timecop', '~>0.3.4'
|
31
31
|
s.add_development_dependency 'yajl-ruby', '~>0.7.5'
|
@@ -76,16 +76,11 @@ describe OAuth2::Provider.access_token_class do
|
|
76
76
|
OAuth2::Provider.access_token_class.new
|
77
77
|
end
|
78
78
|
|
79
|
-
it "
|
80
|
-
|
81
|
-
OAuth2::Provider.access_token_class.
|
82
|
-
subject.access_token.
|
83
|
-
|
84
|
-
|
85
|
-
it "is assigned a randomly generated refresh token" do
|
86
|
-
subject.refresh_token.should_not be_nil
|
87
|
-
OAuth2::Provider.access_token_class.new.refresh_token.should_not be_nil
|
88
|
-
subject.access_token.should_not == OAuth2::Provider.access_token_class.new.refresh_token
|
79
|
+
it "uses .unique_random_token to assign random access and refresh tokens" do
|
80
|
+
OAuth2::Provider.access_token_class.stubs(:unique_random_token).with(:access_token).returns('random-access-token')
|
81
|
+
OAuth2::Provider.access_token_class.stubs(:unique_random_token).with(:refresh_token).returns('random-refresh-token')
|
82
|
+
subject.access_token.should eql('random-access-token')
|
83
|
+
subject.refresh_token.should eql('random-refresh-token')
|
89
84
|
end
|
90
85
|
|
91
86
|
it "expires in 1 month by default" do
|
@@ -49,10 +49,9 @@ describe OAuth2::Provider.authorization_code_class do
|
|
49
49
|
OAuth2::Provider.authorization_code_class.new
|
50
50
|
end
|
51
51
|
|
52
|
-
it "
|
53
|
-
|
54
|
-
OAuth2::Provider.authorization_code_class.new.code.
|
55
|
-
subject.code.should_not == OAuth2::Provider.authorization_code_class.new.code
|
52
|
+
it "uses .unique_random_token to assign a code" do
|
53
|
+
OAuth2::Provider.authorization_code_class.stubs(:unique_random_token).with(:code).returns('random-token')
|
54
|
+
OAuth2::Provider.authorization_code_class.new.code.should eql('random-token')
|
56
55
|
end
|
57
56
|
|
58
57
|
it "expires in 1 minute by default" do
|
data/spec/models/client_spec.rb
CHANGED
@@ -42,16 +42,11 @@ describe OAuth2::Provider.client_class do
|
|
42
42
|
OAuth2::Provider.client_class.new :name => 'client'
|
43
43
|
end
|
44
44
|
|
45
|
-
it "
|
46
|
-
|
47
|
-
OAuth2::Provider.client_class.
|
48
|
-
subject.oauth_identifier.
|
49
|
-
|
50
|
-
|
51
|
-
it "is assigned a randomly generated oauth secret" do
|
52
|
-
subject.oauth_secret.should_not be_nil
|
53
|
-
OAuth2::Provider.client_class.new.oauth_secret.should_not be_nil
|
54
|
-
subject.oauth_secret.should_not == OAuth2::Provider.client_class.new.oauth_secret
|
45
|
+
it "uses .unique_random_token to assign random oauth identifier and secret" do
|
46
|
+
OAuth2::Provider.client_class.stubs(:unique_random_token).with(:oauth_identifier).returns('random-identifier')
|
47
|
+
OAuth2::Provider.client_class.stubs(:unique_random_token).with(:oauth_secret).returns('random-secret')
|
48
|
+
subject.oauth_identifier.should eql('random-identifier')
|
49
|
+
subject.oauth_secret.should eql('random-secret')
|
55
50
|
end
|
56
51
|
|
57
52
|
it "returns nil when to_param called" do
|
@@ -91,6 +86,20 @@ describe OAuth2::Provider.client_class do
|
|
91
86
|
subject.allow_redirection?("a-load-of-rubbish").should be_false
|
92
87
|
end
|
93
88
|
end
|
89
|
+
|
90
|
+
describe "on a client with an empty oauth_redirect_uri" do
|
91
|
+
subject do
|
92
|
+
OAuth2::Provider.client_class.new :name => 'client', :oauth_redirect_uri => ""
|
93
|
+
end
|
94
|
+
|
95
|
+
it "always returns true" do
|
96
|
+
subject.allow_redirection?("http://anything.example.com/any/path").should be_true
|
97
|
+
end
|
98
|
+
|
99
|
+
it "returns false if the provided uri isn't a valid uri" do
|
100
|
+
subject.allow_redirection?("a-load-of-rubbish").should be_false
|
101
|
+
end
|
102
|
+
end
|
94
103
|
|
95
104
|
describe "on a client without an oauth_redirect_uri" do
|
96
105
|
subject do
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OAuth2::Provider::Models::RandomToken do
|
4
|
+
describe ".unique_random_token(attribute)" do
|
5
|
+
let :model do
|
6
|
+
OAuth2::Provider.client_class
|
7
|
+
end
|
8
|
+
|
9
|
+
it "uses .random_token to generate a random token" do
|
10
|
+
model.stubs(:random_token).returns('random-token')
|
11
|
+
model.unique_random_token(:oauth_identifier).should eql('random-token')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "calls .random_token repeatedly until unused token found" do
|
15
|
+
m1 = model.create! :name => 'anything'
|
16
|
+
m2 = model.create! :name => 'ignore'
|
17
|
+
model.stubs(:random_token).returns(m1.oauth_identifier).then.returns(m2.oauth_identifier).then.returns('3rd-random-token')
|
18
|
+
model.unique_random_token(:oauth_identifier).should eql('3rd-random-token')
|
19
|
+
end
|
20
|
+
|
21
|
+
it "only regards tokens used for same attribute as used" do
|
22
|
+
m1 = model.create! :name => 'anything'
|
23
|
+
model.stubs(:random_token).returns(m1.oauth_identifier).then.returns('2nd-random-token')
|
24
|
+
model.unique_random_token(:oauth_secret).should eql(m1.oauth_identifier)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -71,7 +71,7 @@ describe "A request for a protected resource" do
|
|
71
71
|
get "/protected", {:oauth_token => @token.access_token}, {"HTTP_AUTHORIZATION" => "OAuth DifferentToken"}
|
72
72
|
end
|
73
73
|
|
74
|
-
responds_with_json_error 'invalid_request', :description => 'both authorization header and oauth_token provided, with conflicting tokens', :status =>
|
74
|
+
responds_with_json_error 'invalid_request', :description => 'both authorization header and oauth_token provided, with conflicting tokens', :status => 401
|
75
75
|
end
|
76
76
|
|
77
77
|
describe "with an invalid token" do
|
metadata
CHANGED
@@ -1,240 +1,166 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: oauth2-provider
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.19
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 18
|
10
|
-
version: 0.0.18
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Tom Ward
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2011-09-05 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: &70115702966000 !ruby/object:Gem::Requirement
|
23
17
|
none: false
|
24
|
-
requirements:
|
18
|
+
requirements:
|
25
19
|
- - ~>
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
segments:
|
29
|
-
- 3
|
30
|
-
- 0
|
31
|
-
version: "3.0"
|
32
|
-
version_requirements: *id001
|
33
|
-
name: activesupport
|
34
|
-
prerelease: false
|
35
|
-
- !ruby/object:Gem::Dependency
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
36
22
|
type: :runtime
|
37
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70115702966000
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: addressable
|
27
|
+
requirement: &70115702965500 !ruby/object:Gem::Requirement
|
38
28
|
none: false
|
39
|
-
requirements:
|
29
|
+
requirements:
|
40
30
|
- - ~>
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
|
44
|
-
- 2
|
45
|
-
- 2
|
46
|
-
version: "2.2"
|
47
|
-
version_requirements: *id002
|
48
|
-
name: addressable
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.2'
|
33
|
+
type: :runtime
|
49
34
|
prerelease: false
|
50
|
-
|
51
|
-
|
52
|
-
|
35
|
+
version_requirements: *70115702965500
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rack-test
|
38
|
+
requirement: &70115702965020 !ruby/object:Gem::Requirement
|
53
39
|
none: false
|
54
|
-
requirements:
|
40
|
+
requirements:
|
55
41
|
- - ~>
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
hash: 5
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
- 5
|
61
|
-
- 7
|
42
|
+
- !ruby/object:Gem::Version
|
62
43
|
version: 0.5.7
|
63
|
-
version_requirements: *id003
|
64
|
-
name: rack-test
|
65
|
-
prerelease: false
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
44
|
type: :development
|
68
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70115702965020
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activerecord
|
49
|
+
requirement: &70115702964560 !ruby/object:Gem::Requirement
|
69
50
|
none: false
|
70
|
-
requirements:
|
51
|
+
requirements:
|
71
52
|
- - ~>
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
|
74
|
-
segments:
|
75
|
-
- 3
|
76
|
-
- 0
|
77
|
-
- 1
|
78
|
-
version: 3.0.1
|
79
|
-
version_requirements: *id004
|
80
|
-
name: activerecord
|
81
|
-
prerelease: false
|
82
|
-
- !ruby/object:Gem::Dependency
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
83
55
|
type: :development
|
84
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70115702964560
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rspec
|
60
|
+
requirement: &70115702964080 !ruby/object:Gem::Requirement
|
85
61
|
none: false
|
86
|
-
requirements:
|
62
|
+
requirements:
|
87
63
|
- - ~>
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
hash: 11
|
90
|
-
segments:
|
91
|
-
- 2
|
92
|
-
- 1
|
93
|
-
- 0
|
64
|
+
- !ruby/object:Gem::Version
|
94
65
|
version: 2.1.0
|
95
|
-
version_requirements: *id005
|
96
|
-
name: rspec
|
97
|
-
prerelease: false
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
66
|
type: :development
|
100
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70115702964080
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mocha
|
71
|
+
requirement: &70115702963620 !ruby/object:Gem::Requirement
|
101
72
|
none: false
|
102
|
-
requirements:
|
73
|
+
requirements:
|
103
74
|
- - ~>
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
hash: 35
|
106
|
-
segments:
|
107
|
-
- 0
|
108
|
-
- 9
|
109
|
-
- 12
|
75
|
+
- !ruby/object:Gem::Version
|
110
76
|
version: 0.9.12
|
111
|
-
version_requirements: *id006
|
112
|
-
name: mocha
|
113
|
-
prerelease: false
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
77
|
type: :development
|
116
|
-
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70115702963620
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rake
|
82
|
+
requirement: &70115702963160 !ruby/object:Gem::Requirement
|
117
83
|
none: false
|
118
|
-
requirements:
|
84
|
+
requirements:
|
119
85
|
- - ~>
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
|
122
|
-
segments:
|
123
|
-
- 0
|
124
|
-
- 8
|
125
|
-
- 7
|
126
|
-
version: 0.8.7
|
127
|
-
version_requirements: *id007
|
128
|
-
name: rake
|
129
|
-
prerelease: false
|
130
|
-
- !ruby/object:Gem::Dependency
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 0.9.2
|
131
88
|
type: :development
|
132
|
-
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70115702963160
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: sqlite3-ruby
|
93
|
+
requirement: &70115702962700 !ruby/object:Gem::Requirement
|
133
94
|
none: false
|
134
|
-
requirements:
|
95
|
+
requirements:
|
135
96
|
- - ~>
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
hash: 25
|
138
|
-
segments:
|
139
|
-
- 1
|
140
|
-
- 3
|
141
|
-
- 1
|
97
|
+
- !ruby/object:Gem::Version
|
142
98
|
version: 1.3.1
|
143
|
-
version_requirements: *id008
|
144
|
-
name: sqlite3-ruby
|
145
|
-
prerelease: false
|
146
|
-
- !ruby/object:Gem::Dependency
|
147
99
|
type: :development
|
148
|
-
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70115702962700
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: timecop
|
104
|
+
requirement: &70115702962240 !ruby/object:Gem::Requirement
|
149
105
|
none: false
|
150
|
-
requirements:
|
106
|
+
requirements:
|
151
107
|
- - ~>
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
hash: 27
|
154
|
-
segments:
|
155
|
-
- 0
|
156
|
-
- 3
|
157
|
-
- 4
|
108
|
+
- !ruby/object:Gem::Version
|
158
109
|
version: 0.3.4
|
159
|
-
version_requirements: *id009
|
160
|
-
name: timecop
|
161
|
-
prerelease: false
|
162
|
-
- !ruby/object:Gem::Dependency
|
163
110
|
type: :development
|
164
|
-
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70115702962240
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: yajl-ruby
|
115
|
+
requirement: &70115702961780 !ruby/object:Gem::Requirement
|
165
116
|
none: false
|
166
|
-
requirements:
|
117
|
+
requirements:
|
167
118
|
- - ~>
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
hash: 9
|
170
|
-
segments:
|
171
|
-
- 0
|
172
|
-
- 7
|
173
|
-
- 5
|
119
|
+
- !ruby/object:Gem::Version
|
174
120
|
version: 0.7.5
|
175
|
-
version_requirements: *id010
|
176
|
-
name: yajl-ruby
|
177
|
-
prerelease: false
|
178
|
-
- !ruby/object:Gem::Dependency
|
179
121
|
type: :development
|
180
|
-
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *70115702961780
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: mongoid
|
126
|
+
requirement: &70115702961320 !ruby/object:Gem::Requirement
|
181
127
|
none: false
|
182
|
-
requirements:
|
183
|
-
- -
|
184
|
-
- !ruby/object:Gem::Version
|
185
|
-
hash: 15424089
|
186
|
-
segments:
|
187
|
-
- 2
|
188
|
-
- 0
|
189
|
-
- 0
|
190
|
-
- rc
|
191
|
-
- 6
|
128
|
+
requirements:
|
129
|
+
- - =
|
130
|
+
- !ruby/object:Gem::Version
|
192
131
|
version: 2.0.0.rc.6
|
193
|
-
version_requirements: *id011
|
194
|
-
name: mongoid
|
195
|
-
prerelease: false
|
196
|
-
- !ruby/object:Gem::Dependency
|
197
132
|
type: :development
|
198
|
-
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *70115702961320
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: bson
|
137
|
+
requirement: &70115702960860 !ruby/object:Gem::Requirement
|
199
138
|
none: false
|
200
|
-
requirements:
|
201
|
-
- -
|
202
|
-
- !ruby/object:Gem::Version
|
203
|
-
hash: 31
|
204
|
-
segments:
|
205
|
-
- 1
|
206
|
-
- 2
|
207
|
-
- 0
|
139
|
+
requirements:
|
140
|
+
- - =
|
141
|
+
- !ruby/object:Gem::Version
|
208
142
|
version: 1.2.0
|
209
|
-
version_requirements: *id012
|
210
|
-
name: bson
|
211
|
-
prerelease: false
|
212
|
-
- !ruby/object:Gem::Dependency
|
213
143
|
type: :development
|
214
|
-
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: *70115702960860
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: bson_ext
|
148
|
+
requirement: &70115702960400 !ruby/object:Gem::Requirement
|
215
149
|
none: false
|
216
|
-
requirements:
|
217
|
-
- -
|
218
|
-
- !ruby/object:Gem::Version
|
219
|
-
hash: 31
|
220
|
-
segments:
|
221
|
-
- 1
|
222
|
-
- 2
|
223
|
-
- 0
|
150
|
+
requirements:
|
151
|
+
- - =
|
152
|
+
- !ruby/object:Gem::Version
|
224
153
|
version: 1.2.0
|
225
|
-
|
226
|
-
name: bson_ext
|
154
|
+
type: :development
|
227
155
|
prerelease: false
|
156
|
+
version_requirements: *70115702960400
|
228
157
|
description: OAuth2 Provider, extracted from api.hashblue.com
|
229
|
-
email:
|
158
|
+
email:
|
230
159
|
- tom@popdog.net
|
231
160
|
executables: []
|
232
|
-
|
233
161
|
extensions: []
|
234
|
-
|
235
162
|
extra_rdoc_files: []
|
236
|
-
|
237
|
-
files:
|
163
|
+
files:
|
238
164
|
- .gitignore
|
239
165
|
- Gemfile
|
240
166
|
- README.md
|
@@ -324,6 +250,7 @@ files:
|
|
324
250
|
- spec/models/authorization_code_spec.rb
|
325
251
|
- spec/models/authorization_spec.rb
|
326
252
|
- spec/models/client_spec.rb
|
253
|
+
- spec/models/random_token_spec.rb
|
327
254
|
- spec/requests/access_tokens_controller_spec.rb
|
328
255
|
- spec/requests/authentication_spec.rb
|
329
256
|
- spec/requests/authorization_code_request_spec.rb
|
@@ -338,42 +265,40 @@ files:
|
|
338
265
|
- spec/support/rack.rb
|
339
266
|
homepage: http://tomafro.net
|
340
267
|
licenses: []
|
341
|
-
|
342
268
|
post_install_message:
|
343
269
|
rdoc_options: []
|
344
|
-
|
345
|
-
require_paths:
|
270
|
+
require_paths:
|
346
271
|
- lib
|
347
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
272
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
348
273
|
none: false
|
349
|
-
requirements:
|
350
|
-
- -
|
351
|
-
- !ruby/object:Gem::Version
|
352
|
-
|
353
|
-
segments:
|
274
|
+
requirements:
|
275
|
+
- - ! '>='
|
276
|
+
- !ruby/object:Gem::Version
|
277
|
+
version: '0'
|
278
|
+
segments:
|
354
279
|
- 0
|
355
|
-
|
356
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
280
|
+
hash: -2102773934062215418
|
281
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
357
282
|
none: false
|
358
|
-
requirements:
|
359
|
-
- -
|
360
|
-
- !ruby/object:Gem::Version
|
361
|
-
|
362
|
-
segments:
|
283
|
+
requirements:
|
284
|
+
- - ! '>='
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
version: '0'
|
287
|
+
segments:
|
363
288
|
- 0
|
364
|
-
|
289
|
+
hash: -2102773934062215418
|
365
290
|
requirements: []
|
366
|
-
|
367
291
|
rubyforge_project:
|
368
|
-
rubygems_version: 1.8.
|
292
|
+
rubygems_version: 1.8.7
|
369
293
|
signing_key:
|
370
294
|
specification_version: 3
|
371
295
|
summary: OAuth2 Provider, extracted from api.hashblue.com
|
372
|
-
test_files:
|
296
|
+
test_files:
|
373
297
|
- spec/models/access_token_spec.rb
|
374
298
|
- spec/models/authorization_code_spec.rb
|
375
299
|
- spec/models/authorization_spec.rb
|
376
300
|
- spec/models/client_spec.rb
|
301
|
+
- spec/models/random_token_spec.rb
|
377
302
|
- spec/requests/access_tokens_controller_spec.rb
|
378
303
|
- spec/requests/authentication_spec.rb
|
379
304
|
- spec/requests/authorization_code_request_spec.rb
|