oauth2-provider 0.0.18 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- oauth2-provider (0.0.15)
5
- activesupport (~> 3.0.1)
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.5)
38
+ addressable (2.2.6)
39
39
  arel (2.0.9)
40
40
  builder (2.1.2)
41
41
  erubis (2.6.6)
@@ -11,7 +11,7 @@ class ApplicationController < ActionController::Base
11
11
 
12
12
  def authenticate_account
13
13
  unless current_account
14
- session[:return_url] = request.request_uri
14
+ session[:return_url] = request.fullpath
15
15
  redirect_to new_session_url
16
16
  end
17
17
  end
@@ -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" %>!
@@ -5,6 +5,7 @@
5
5
  body {
6
6
  background: #ddd;
7
7
  }
8
+ </style>
8
9
  <title>Rails3Example</title>
9
10
  <%= csrf_meta_tag %>
10
11
  </head>
@@ -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 => 20110508151948) do
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", :null => false
49
- t.string "oauth_secret", :null => false
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 ||= OAuth2::Provider::Random.base62(32)
17
- self.refresh_token ||= OAuth2::Provider::Random.base62(32)
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(attributes = {})
12
+ def initialize(*args)
13
13
  super
14
- self.code ||= OAuth2::Provider::Random.base62(32)
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 ||= OAuth2::Provider::Random.base62(16)
14
- self.oauth_secret ||= OAuth2::Provider::Random.base62(32)
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
- if oauth_redirect_uri
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
- delegate :has_scope?, :to => :authorization
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 @env[authorization_key] =~ /OAuth (.*)/
21
- $1
22
+ if authorization_header.provided?
23
+ authorization_header.params
22
24
  end
23
25
  end
24
26
 
25
- def authorization_key
26
- @authorization_key ||= Rack::Auth::AbstractRequest::AUTHORIZATION_KEYS.detect do |key|
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
- block_bad_request
59
+ block_invalid_request
69
60
  block_invalid_token
70
61
  end
71
62
  end
72
63
 
73
- def block_bad_request
64
+ def block_invalid_request
74
65
  if token_from_param && token_from_header && (token_from_param != token_from_header)
75
- throw_response Responses.json_error('invalid_request', :description => 'both authorization header and oauth_token provided, with conflicting tokens')
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 = ActiveSupport::SecureRandom.random_number(62 ** length)
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
- ActiveSupport::SecureRandom.random_number(36 ** length).to_s(36).rjust(length, '0')
27
+ SecureRandom.random_number(36 ** length).to_s(36).rjust(length, '0')
27
28
  end
28
29
 
29
30
  module_function :base62, :base36
@@ -1,5 +1,5 @@
1
1
  module OAuth2
2
2
  module Provider
3
- VERSION = "0.0.18"
3
+ VERSION = "0.0.19"
4
4
  end
5
5
  end
@@ -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.1'
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.8.7'
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 "is assigned a randomly generated access token" do
80
- subject.access_token.should_not be_nil
81
- OAuth2::Provider.access_token_class.new.access_token.should_not be_nil
82
- subject.access_token.should_not == OAuth2::Provider.access_token_class.new.access_token
83
- end
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 "is assigned a randomly generated code" do
53
- subject.code.should_not be_nil
54
- OAuth2::Provider.authorization_code_class.new.code.should_not be_nil
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
@@ -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 "is assigned a randomly generated oauth identifier" do
46
- subject.oauth_identifier.should_not be_nil
47
- OAuth2::Provider.client_class.new.oauth_identifier.should_not be_nil
48
- subject.oauth_identifier.should_not == OAuth2::Provider.client_class.new.oauth_identifier
49
- end
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 => 400
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
- hash: 59
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
- date: 2011-06-11 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- type: :runtime
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
- hash: 7
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- hash: 7
43
- segments:
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
- - !ruby/object:Gem::Dependency
51
- type: :development
52
- requirement: &id003 !ruby/object:Gem::Requirement
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- hash: 5
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
- requirement: &id005 !ruby/object:Gem::Requirement
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
- requirement: &id006 !ruby/object:Gem::Requirement
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
- requirement: &id007 !ruby/object:Gem::Requirement
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
- hash: 49
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
- requirement: &id008 !ruby/object:Gem::Requirement
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
- requirement: &id009 !ruby/object:Gem::Requirement
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
- requirement: &id010 !ruby/object:Gem::Requirement
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
- requirement: &id011 !ruby/object:Gem::Requirement
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
- requirement: &id012 !ruby/object:Gem::Requirement
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
- requirement: &id013 !ruby/object:Gem::Requirement
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
- version_requirements: *id013
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
- hash: 3
353
- segments:
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ segments:
354
279
  - 0
355
- version: "0"
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
- hash: 3
362
- segments:
283
+ requirements:
284
+ - - ! '>='
285
+ - !ruby/object:Gem::Version
286
+ version: '0'
287
+ segments:
363
288
  - 0
364
- version: "0"
289
+ hash: -2102773934062215418
365
290
  requirements: []
366
-
367
291
  rubyforge_project:
368
- rubygems_version: 1.8.5
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