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.
@@ -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