oauth2-provider 0.0.16

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.
Files changed (101) hide show
  1. data/.gitignore +8 -0
  2. data/Gemfile +3 -0
  3. data/README.md +49 -0
  4. data/Rakefile +24 -0
  5. data/examples/client/Gemfile +6 -0
  6. data/examples/client/Gemfile.lock +20 -0
  7. data/examples/client/README +8 -0
  8. data/examples/client/app.rb +59 -0
  9. data/examples/client/config.ru +3 -0
  10. data/examples/client/views/home.haml +3 -0
  11. data/examples/client/views/response.haml +11 -0
  12. data/examples/rails3-example/.gitignore +4 -0
  13. data/examples/rails3-example/Gemfile +10 -0
  14. data/examples/rails3-example/Gemfile.lock +82 -0
  15. data/examples/rails3-example/README +9 -0
  16. data/examples/rails3-example/Rakefile +7 -0
  17. data/examples/rails3-example/app/controllers/account_controller.rb +14 -0
  18. data/examples/rails3-example/app/controllers/application_controller.rb +18 -0
  19. data/examples/rails3-example/app/controllers/authorization_controller.rb +18 -0
  20. data/examples/rails3-example/app/controllers/home_controller.rb +4 -0
  21. data/examples/rails3-example/app/controllers/session_controller.rb +24 -0
  22. data/examples/rails3-example/app/helpers/application_helper.rb +2 -0
  23. data/examples/rails3-example/app/models/account.rb +6 -0
  24. data/examples/rails3-example/app/views/authorization/new.html.erb +5 -0
  25. data/examples/rails3-example/app/views/home/show.html.erb +1 -0
  26. data/examples/rails3-example/app/views/layouts/application.html.erb +16 -0
  27. data/examples/rails3-example/app/views/session/new.html.erb +7 -0
  28. data/examples/rails3-example/config.ru +4 -0
  29. data/examples/rails3-example/config/application.rb +42 -0
  30. data/examples/rails3-example/config/boot.rb +6 -0
  31. data/examples/rails3-example/config/database.yml +22 -0
  32. data/examples/rails3-example/config/environment.rb +5 -0
  33. data/examples/rails3-example/config/environments/development.rb +26 -0
  34. data/examples/rails3-example/config/environments/production.rb +49 -0
  35. data/examples/rails3-example/config/environments/test.rb +35 -0
  36. data/examples/rails3-example/config/initializers/backtrace_silencers.rb +7 -0
  37. data/examples/rails3-example/config/initializers/inflections.rb +10 -0
  38. data/examples/rails3-example/config/initializers/mime_types.rb +5 -0
  39. data/examples/rails3-example/config/initializers/secret_token.rb +7 -0
  40. data/examples/rails3-example/config/initializers/session_store.rb +8 -0
  41. data/examples/rails3-example/config/locales/en.yml +5 -0
  42. data/examples/rails3-example/config/routes.rb +9 -0
  43. data/examples/rails3-example/db/migrate/20110508151935_add_account_table.rb +12 -0
  44. data/examples/rails3-example/db/migrate/20110508151948_add_oauth2_tables.rb +43 -0
  45. data/examples/rails3-example/db/schema.rb +52 -0
  46. data/examples/rails3-example/db/seeds.rb +11 -0
  47. data/examples/rails3-example/doc/README_FOR_APP +2 -0
  48. data/examples/rails3-example/lib/tasks/.gitkeep +0 -0
  49. data/examples/rails3-example/public/404.html +26 -0
  50. data/examples/rails3-example/public/422.html +26 -0
  51. data/examples/rails3-example/public/500.html +26 -0
  52. data/examples/rails3-example/public/favicon.ico +0 -0
  53. data/examples/rails3-example/public/images/rails.png +0 -0
  54. data/examples/rails3-example/public/robots.txt +5 -0
  55. data/examples/rails3-example/public/stylesheets/.gitkeep +0 -0
  56. data/examples/rails3-example/script/rails +6 -0
  57. data/lib/oauth2-provider.rb +3 -0
  58. data/lib/oauth2/provider.rb +39 -0
  59. data/lib/oauth2/provider/models.rb +40 -0
  60. data/lib/oauth2/provider/models/access_token.rb +54 -0
  61. data/lib/oauth2/provider/models/active_record.rb +30 -0
  62. data/lib/oauth2/provider/models/active_record/access_token.rb +13 -0
  63. data/lib/oauth2/provider/models/active_record/authorization.rb +16 -0
  64. data/lib/oauth2/provider/models/active_record/authorization_code.rb +13 -0
  65. data/lib/oauth2/provider/models/active_record/client.rb +15 -0
  66. data/lib/oauth2/provider/models/authorization.rb +40 -0
  67. data/lib/oauth2/provider/models/authorization_code.rb +27 -0
  68. data/lib/oauth2/provider/models/client.rb +28 -0
  69. data/lib/oauth2/provider/models/mongoid.rb +30 -0
  70. data/lib/oauth2/provider/models/mongoid/access_token.rb +40 -0
  71. data/lib/oauth2/provider/models/mongoid/authorization.rb +32 -0
  72. data/lib/oauth2/provider/models/mongoid/authorization_code.rb +43 -0
  73. data/lib/oauth2/provider/models/mongoid/client.rb +40 -0
  74. data/lib/oauth2/provider/rack.rb +11 -0
  75. data/lib/oauth2/provider/rack/access_token_handler.rb +103 -0
  76. data/lib/oauth2/provider/rack/authorization_code_request.rb +74 -0
  77. data/lib/oauth2/provider/rack/authorization_codes_support.rb +25 -0
  78. data/lib/oauth2/provider/rack/middleware.rb +28 -0
  79. data/lib/oauth2/provider/rack/resource_request.rb +91 -0
  80. data/lib/oauth2/provider/rack/responses.rb +34 -0
  81. data/lib/oauth2/provider/rails.rb +37 -0
  82. data/lib/oauth2/provider/rails/controller_authentication.rb +21 -0
  83. data/lib/oauth2/provider/random.rb +30 -0
  84. data/lib/oauth2/provider/version.rb +5 -0
  85. data/oauth2-provider.gemspec +35 -0
  86. data/spec/models/access_token_spec.rb +123 -0
  87. data/spec/models/authorization_code_spec.rb +115 -0
  88. data/spec/models/authorization_spec.rb +110 -0
  89. data/spec/models/client_spec.rb +75 -0
  90. data/spec/requests/access_tokens_controller_spec.rb +360 -0
  91. data/spec/requests/authentication_spec.rb +150 -0
  92. data/spec/requests/authorization_codes_support_spec.rb +157 -0
  93. data/spec/schema.rb +38 -0
  94. data/spec/set_backend_env_to_mongoid.rb +1 -0
  95. data/spec/spec_helper.rb +27 -0
  96. data/spec/support/activerecord_backend.rb +18 -0
  97. data/spec/support/factories.rb +56 -0
  98. data/spec/support/macros.rb +46 -0
  99. data/spec/support/mongoid_backend.rb +34 -0
  100. data/spec/support/rack.rb +32 -0
  101. metadata +373 -0
@@ -0,0 +1,157 @@
1
+ require 'spec_helper'
2
+
3
+ describe OAuth2::Provider::Rack::AuthorizationCodesSupport do
4
+ before :each do
5
+ ExampleResourceOwner.destroy_all
6
+ @client = OAuth2::Provider.client_class.create! :name => 'client'
7
+ @valid_params = {
8
+ :client_id => @client.oauth_identifier,
9
+ :redirect_uri => "https://redirect.example.com/callback"
10
+ }
11
+ @owner = create_resource_owner
12
+ end
13
+
14
+ describe "Validating requests" do
15
+ action do |env|
16
+ request = Rack::Request.new(env)
17
+ env['oauth2.authorization_request'] ||= OAuth2::Provider::Rack::AuthorizationCodeRequest.new(env, request.params)
18
+ env['oauth2.authorization_request'].validate!
19
+ successful_response
20
+ end
21
+
22
+ describe "Any request with a client_id and redirect_uri" do
23
+ before :each do
24
+ get '/oauth/authorize', @valid_params
25
+ end
26
+
27
+ it "is successful" do
28
+ response.status.should == 200
29
+ end
30
+ end
31
+
32
+ describe "Any request without a client_id" do
33
+ before :each do
34
+ get '/oauth/authorize', @valid_params.except(:client_id)
35
+ end
36
+
37
+ redirects_back_with_error 'invalid_request'
38
+ end
39
+
40
+ describe "Any request without a redirect_uri" do
41
+ before :each do
42
+ get '/oauth/authorize', @valid_params.except(:redirect_uri)
43
+ end
44
+
45
+ it "returns 400" do
46
+ response.status.should == 400
47
+ end
48
+ end
49
+
50
+ describe "Any request with an invalid redirect_uri" do
51
+ before :each do
52
+ get '/oauth/authorize', @valid_params.merge(:redirect_uri => "http://")
53
+ end
54
+
55
+ it "returns 400" do
56
+ response.status.should == 400
57
+ end
58
+ end
59
+
60
+ describe "Any request with an unknown client id" do
61
+ before :each do
62
+ get '/oauth/authorize', @valid_params.merge(:client_id => 'unknown')
63
+ end
64
+
65
+ redirects_back_with_error 'invalid_client'
66
+ end
67
+
68
+ describe "A request where the scope is declared invalid" do
69
+ action do |env|
70
+ request = Rack::Request.new(env)
71
+ env['oauth2.authorization_request'] ||= OAuth2::Provider::Rack::AuthorizationCodeRequest.new(env, request.params)
72
+ env['oauth2.authorization_request'].validate!
73
+ env['oauth2.authorization_request'].invalid_scope!
74
+ successful_response
75
+ end
76
+
77
+ before :each do
78
+ get '/oauth/authorize', @valid_params
79
+ end
80
+
81
+ redirects_back_with_error 'invalid_scope'
82
+ end
83
+ end
84
+
85
+ describe "Granting a code" do
86
+ action do |env|
87
+ request = Rack::Request.new(env)
88
+ env['oauth2.authorization_request'] ||= OAuth2::Provider::Rack::AuthorizationCodeRequest.new(env, request.params)
89
+ env['oauth2.authorization_request'].grant! ExampleResourceOwner.first
90
+ end
91
+
92
+ before :each do
93
+ post '/oauth/authorize', @valid_params.merge(:submit => 'Yes')
94
+ end
95
+
96
+ it "redirects back to the redirect_uri with a valid authorization code for the client" do
97
+ response.status.should == 302
98
+ code = Addressable::URI.parse(response.location).query_values["code"]
99
+ code.should_not be_nil
100
+ found = OAuth2::Provider.authorization_code_class.find_by_code(code)
101
+ found.should_not be_nil
102
+ found.authorization.client.should == @client
103
+ found.authorization.resource_owner.should == @owner
104
+ found.should_not be_expired
105
+ end
106
+ end
107
+
108
+ describe "Granting a code with a scope" do
109
+ action do |env|
110
+ request = Rack::Request.new(env)
111
+ env['oauth2.authorization_request'] ||= OAuth2::Provider::Rack::AuthorizationCodeRequest.new(env, request.params)
112
+ env['oauth2.authorization_request'].grant! ExampleResourceOwner.first
113
+ end
114
+
115
+ before :each do
116
+ post '/oauth/authorize', @valid_params.merge(:submit => 'Yes', :scope => 'periscope')
117
+ end
118
+
119
+ it "includes the scope in the granted authorization" do
120
+ code = Addressable::URI.parse(response.location).query_values["code"]
121
+ found = OAuth2::Provider.authorization_code_class.find_by_code(code)
122
+ found.authorization.scope.should == 'periscope'
123
+ end
124
+ end
125
+
126
+ describe "Granting a code with custom authorization length" do
127
+ action do |env|
128
+ request = Rack::Request.new(env)
129
+ env['oauth2.authorization_request'] ||= OAuth2::Provider::Rack::AuthorizationCodeRequest.new(env, request.params)
130
+ env['oauth2.authorization_request'].grant! ExampleResourceOwner.first, 5.years.from_now
131
+ end
132
+
133
+ before :each do
134
+ post '/oauth/authorize', @valid_params.merge(:submit => 'Yes', :five_years => 'true')
135
+ end
136
+
137
+ it "redirects with an authorization code linked to the extended authorization" do
138
+ code = Addressable::URI.parse(response.location).query_values["code"]
139
+ found = OAuth2::Provider.authorization_code_class.find_by_code(code)
140
+ found.authorization.expires_at.should eql(5.years.from_now)
141
+ end
142
+ end
143
+
144
+ describe "Denying a code" do
145
+ action do |env|
146
+ request = Rack::Request.new(env)
147
+ env['oauth2.authorization_request'] ||= OAuth2::Provider::Rack::AuthorizationCodeRequest.new(env, request.params)
148
+ env['oauth2.authorization_request'].deny!
149
+ end
150
+
151
+ before :each do
152
+ post '/oauth/authorize', @valid_params.merge(:submit => 'No')
153
+ end
154
+
155
+ redirects_back_with_error 'access_denied'
156
+ end
157
+ end
data/spec/schema.rb ADDED
@@ -0,0 +1,38 @@
1
+ ActiveRecord::Schema.define(:version => 20110323171649) do
2
+ create_table 'example_resource_owners', :force => true do |t|
3
+ t.string 'username'
4
+ t.string 'password'
5
+ end
6
+
7
+ create_table 'oauth_clients', :force => true do |t|
8
+ t.string 'name'
9
+ t.string 'oauth_identifier', :null => false
10
+ t.string 'oauth_secret', :null => false
11
+ end
12
+
13
+ create_table 'oauth_authorization_codes', :force => true do |t|
14
+ t.integer 'authorization_id', :null => false
15
+ t.string 'code', :null => false
16
+ t.datetime 'expires_at'
17
+ t.datetime 'created_at'
18
+ t.datetime 'updated_at'
19
+ t.string 'redirect_uri'
20
+ end
21
+
22
+ create_table 'oauth_authorizations', :force => true do |t|
23
+ t.integer 'client_id', :null => false
24
+ t.integer 'resource_owner_id'
25
+ t.string 'resource_owner_type'
26
+ t.string 'scope'
27
+ t.datetime 'expires_at'
28
+ end
29
+
30
+ create_table 'oauth_access_tokens', :force => true do |t|
31
+ t.integer 'authorization_id', :null => false
32
+ t.string 'access_token', :null => false
33
+ t.string 'refresh_token'
34
+ t.datetime 'expires_at'
35
+ t.datetime 'created_at'
36
+ t.datetime 'updated_at'
37
+ end
38
+ end
@@ -0,0 +1 @@
1
+ ENV['BACKEND']='mongoid'
@@ -0,0 +1,27 @@
1
+ require 'bundler/setup'
2
+ require 'rack'
3
+ require 'rack/test'
4
+ require 'oauth2-provider'
5
+
6
+ require 'timecop'
7
+ require 'yajl'
8
+
9
+ require "support/#{ENV["BACKEND"] || 'activerecord'}_backend"
10
+
11
+ require 'support/macros'
12
+ require 'support/factories'
13
+ require 'support/rack'
14
+
15
+ RSpec.configure do |config|
16
+ config.before :each do
17
+ Timecop.freeze
18
+ end
19
+
20
+ config.after :each do
21
+ Timecop.return
22
+ end
23
+
24
+ config.include OAuth2::Provider::RSpec::Macros
25
+ config.include OAuth2::Provider::RSpec::Factories
26
+ config.include OAuth2::Provider::RSpec::Rack
27
+ end
@@ -0,0 +1,18 @@
1
+ require 'active_record'
2
+
3
+ ActiveRecord::Base.establish_connection(
4
+ :adapter => "sqlite3",
5
+ :database => "test.db"
6
+ )
7
+
8
+ require "schema.rb"
9
+
10
+ class ExampleResourceOwner < ActiveRecord::Base
11
+ def self.authenticate_with_username_and_password(*args)
12
+ find_by_username_and_password(*args)
13
+ end
14
+ end
15
+
16
+ OAuth2::Provider.configure do |config|
17
+ config.resource_owner_class_name = 'ExampleResourceOwner'
18
+ end
@@ -0,0 +1,56 @@
1
+ module OAuth2::Provider
2
+ module RSpec
3
+ module Factories
4
+ def build_client(attributes = {})
5
+ OAuth2::Provider.client_class.new({:name => 'client'}.merge(attributes))
6
+ end
7
+
8
+ def create_client(attributes = {})
9
+ build_client(attributes).tap do |c|
10
+ c.save!
11
+ end
12
+ end
13
+
14
+ def build_authorization(attributes = {})
15
+ OAuth2::Provider.authorization_class.new({
16
+ :client => build_client
17
+ }.merge(attributes))
18
+ end
19
+
20
+ def create_authorization(attributes = {})
21
+ build_authorization({:client => create_client}.merge(attributes)).tap do |ag|
22
+ ag.save!
23
+ end
24
+ end
25
+
26
+ def build_authorization_code(attributes = {})
27
+ OAuth2::Provider.authorization_code_class.new({
28
+ :redirect_uri => "https://client.example.com/callback",
29
+ :authorization => build_authorization
30
+ }.merge(attributes))
31
+ end
32
+
33
+ def create_authorization_code(attributes = {})
34
+ build_authorization_code({:authorization => create_authorization}.merge(attributes)).tap do |ac|
35
+ ac.save!
36
+ end
37
+ end
38
+
39
+ def build_access_token(attributes = {})
40
+ OAuth2::Provider.access_token_class.new({
41
+ :authorization => build_authorization
42
+ }.merge(attributes))
43
+ end
44
+
45
+ def create_access_token(attributes = {})
46
+ build_access_token({:authorization => create_authorization}.merge(attributes)).tap do |ac|
47
+ ac.save!
48
+ end
49
+ end
50
+
51
+ def create_resource_owner(attributes = {})
52
+ ExampleResourceOwner.create!
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,46 @@
1
+ module OAuth2::Provider
2
+ module RSpec
3
+ module Macros
4
+ extend ActiveSupport::Concern
5
+
6
+ def json_from_response
7
+ @json_from_response ||= begin
8
+ response.content_type.should == "application/json"
9
+ Yajl::Parser.new.parse(response.body)
10
+ end
11
+ end
12
+
13
+ module ClassMethods
14
+ def responds_with_header(name, value)
15
+ it %{responds with header #{name}: #{value}} do
16
+ response.headers[name].should == value
17
+ end
18
+ end
19
+
20
+ def responds_with_status(status)
21
+ it %{responds with status #{status}} do
22
+ response.status.should == status
23
+ end
24
+ end
25
+
26
+ def responds_with_json_error(name, options = {})
27
+ error_description = %{, "error_description": "#{options[:description]}"} if options[:description]
28
+ it %{responds with json: {"error": "#{name}"#{error_description}}, status: #{options[:status]}} do
29
+ response.status.should == options[:status]
30
+ json = json_from_response
31
+ json["error"].should == name
32
+ json["error_description"].should == options[:description] if options[:description]
33
+ end
34
+ end
35
+
36
+ def redirects_back_with_error(name)
37
+ it %{redirects back with error '#{name}'} do
38
+ response.status.should == 302
39
+ error = Addressable::URI.parse(response.location).query_values["error"]
40
+ error.should == name
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,34 @@
1
+ require 'mongoid'
2
+
3
+ class ExampleResourceOwner
4
+ include Mongoid::Document
5
+
6
+ field :username
7
+ field :password
8
+
9
+ references_many :authorizations, :class_name => "OAuth2::Provider::Models::Mongoid::Authorization"
10
+
11
+ def self.authenticate_with_username_and_password(username, password)
12
+ where(:username => username, :password => password).first
13
+ end
14
+ end
15
+
16
+ OAuth2::Provider.configure do |config|
17
+ config.backend = :mongoid
18
+ config.resource_owner_class_name = 'ExampleResourceOwner'
19
+ end
20
+
21
+ Mongoid.configure do |config|
22
+ config.from_hash(
23
+ "host" => "127.0.0.1",
24
+ "autocreate_indexes" => false,
25
+ "allow_dynamic_fields" => true,
26
+ "include_root_in_json" => false,
27
+ "parameterize_keys" => true,
28
+ "persist_in_safe_mode" => true,
29
+ "raise_not_found_error" => true,
30
+ "reconnect_time" => 3,
31
+ "use_activesupport_time_zone" => true,
32
+ "database" => "oauth2_test"
33
+ )
34
+ end
@@ -0,0 +1,32 @@
1
+ module OAuth2::Provider
2
+ module RSpec
3
+ module Rack
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ class_attribute :action_block
8
+ include ::Rack::Test::Methods
9
+ end
10
+
11
+ def app
12
+ ::OAuth2::Provider::Rack::Middleware.new(
13
+ action_block
14
+ )
15
+ end
16
+
17
+ def response
18
+ last_response
19
+ end
20
+
21
+ module ClassMethods
22
+ def action(&block)
23
+ self.action_block = block
24
+ end
25
+
26
+ def successful_response
27
+ [200, {'Content-Type' => 'text/plain'}, 'Success']
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,373 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oauth2-provider
3
+ version: !ruby/object:Gem::Version
4
+ hash: 63
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 16
10
+ version: 0.0.16
11
+ platform: ruby
12
+ authors:
13
+ - Tom Ward
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-17 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: activesupport
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 5
30
+ segments:
31
+ - 3
32
+ - 0
33
+ - 1
34
+ version: 3.0.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: addressable
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 7
46
+ segments:
47
+ - 2
48
+ - 2
49
+ version: "2.2"
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: rails
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 5
61
+ segments:
62
+ - 3
63
+ - 0
64
+ - 1
65
+ version: 3.0.1
66
+ type: :development
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec-rails
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 11
77
+ segments:
78
+ - 2
79
+ - 1
80
+ - 0
81
+ version: 2.1.0
82
+ type: :development
83
+ version_requirements: *id004
84
+ - !ruby/object:Gem::Dependency
85
+ name: rake
86
+ prerelease: false
87
+ requirement: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ hash: 49
93
+ segments:
94
+ - 0
95
+ - 8
96
+ - 7
97
+ version: 0.8.7
98
+ type: :development
99
+ version_requirements: *id005
100
+ - !ruby/object:Gem::Dependency
101
+ name: sqlite3-ruby
102
+ prerelease: false
103
+ requirement: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ~>
107
+ - !ruby/object:Gem::Version
108
+ hash: 25
109
+ segments:
110
+ - 1
111
+ - 3
112
+ - 1
113
+ version: 1.3.1
114
+ type: :development
115
+ version_requirements: *id006
116
+ - !ruby/object:Gem::Dependency
117
+ name: timecop
118
+ prerelease: false
119
+ requirement: &id007 !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ hash: 27
125
+ segments:
126
+ - 0
127
+ - 3
128
+ - 4
129
+ version: 0.3.4
130
+ type: :development
131
+ version_requirements: *id007
132
+ - !ruby/object:Gem::Dependency
133
+ name: yajl-ruby
134
+ prerelease: false
135
+ requirement: &id008 !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ~>
139
+ - !ruby/object:Gem::Version
140
+ hash: 9
141
+ segments:
142
+ - 0
143
+ - 7
144
+ - 5
145
+ version: 0.7.5
146
+ type: :development
147
+ version_requirements: *id008
148
+ - !ruby/object:Gem::Dependency
149
+ name: mongoid
150
+ prerelease: false
151
+ requirement: &id009 !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - "="
155
+ - !ruby/object:Gem::Version
156
+ hash: 15424089
157
+ segments:
158
+ - 2
159
+ - 0
160
+ - 0
161
+ - rc
162
+ - 6
163
+ version: 2.0.0.rc.6
164
+ type: :development
165
+ version_requirements: *id009
166
+ - !ruby/object:Gem::Dependency
167
+ name: bson
168
+ prerelease: false
169
+ requirement: &id010 !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - "="
173
+ - !ruby/object:Gem::Version
174
+ hash: 31
175
+ segments:
176
+ - 1
177
+ - 2
178
+ - 0
179
+ version: 1.2.0
180
+ type: :development
181
+ version_requirements: *id010
182
+ - !ruby/object:Gem::Dependency
183
+ name: bson_ext
184
+ prerelease: false
185
+ requirement: &id011 !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - "="
189
+ - !ruby/object:Gem::Version
190
+ hash: 31
191
+ segments:
192
+ - 1
193
+ - 2
194
+ - 0
195
+ version: 1.2.0
196
+ type: :development
197
+ version_requirements: *id011
198
+ - !ruby/object:Gem::Dependency
199
+ name: sdoc
200
+ prerelease: false
201
+ requirement: &id012 !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ~>
205
+ - !ruby/object:Gem::Version
206
+ hash: 63
207
+ segments:
208
+ - 0
209
+ - 2
210
+ - 20
211
+ version: 0.2.20
212
+ type: :development
213
+ version_requirements: *id012
214
+ description: OAuth2 Provider, extracted from api.hashblue.com
215
+ email:
216
+ - tom@popdog.net
217
+ executables: []
218
+
219
+ extensions: []
220
+
221
+ extra_rdoc_files: []
222
+
223
+ files:
224
+ - .gitignore
225
+ - Gemfile
226
+ - README.md
227
+ - Rakefile
228
+ - examples/client/Gemfile
229
+ - examples/client/Gemfile.lock
230
+ - examples/client/README
231
+ - examples/client/app.rb
232
+ - examples/client/config.ru
233
+ - examples/client/views/home.haml
234
+ - examples/client/views/response.haml
235
+ - examples/rails3-example/.gitignore
236
+ - examples/rails3-example/Gemfile
237
+ - examples/rails3-example/Gemfile.lock
238
+ - examples/rails3-example/README
239
+ - examples/rails3-example/Rakefile
240
+ - examples/rails3-example/app/controllers/account_controller.rb
241
+ - examples/rails3-example/app/controllers/application_controller.rb
242
+ - examples/rails3-example/app/controllers/authorization_controller.rb
243
+ - examples/rails3-example/app/controllers/home_controller.rb
244
+ - examples/rails3-example/app/controllers/session_controller.rb
245
+ - examples/rails3-example/app/helpers/application_helper.rb
246
+ - examples/rails3-example/app/models/account.rb
247
+ - examples/rails3-example/app/views/authorization/new.html.erb
248
+ - examples/rails3-example/app/views/home/show.html.erb
249
+ - examples/rails3-example/app/views/layouts/application.html.erb
250
+ - examples/rails3-example/app/views/session/new.html.erb
251
+ - examples/rails3-example/config.ru
252
+ - examples/rails3-example/config/application.rb
253
+ - examples/rails3-example/config/boot.rb
254
+ - examples/rails3-example/config/database.yml
255
+ - examples/rails3-example/config/environment.rb
256
+ - examples/rails3-example/config/environments/development.rb
257
+ - examples/rails3-example/config/environments/production.rb
258
+ - examples/rails3-example/config/environments/test.rb
259
+ - examples/rails3-example/config/initializers/backtrace_silencers.rb
260
+ - examples/rails3-example/config/initializers/inflections.rb
261
+ - examples/rails3-example/config/initializers/mime_types.rb
262
+ - examples/rails3-example/config/initializers/secret_token.rb
263
+ - examples/rails3-example/config/initializers/session_store.rb
264
+ - examples/rails3-example/config/locales/en.yml
265
+ - examples/rails3-example/config/routes.rb
266
+ - examples/rails3-example/db/migrate/20110508151935_add_account_table.rb
267
+ - examples/rails3-example/db/migrate/20110508151948_add_oauth2_tables.rb
268
+ - examples/rails3-example/db/schema.rb
269
+ - examples/rails3-example/db/seeds.rb
270
+ - examples/rails3-example/doc/README_FOR_APP
271
+ - examples/rails3-example/lib/tasks/.gitkeep
272
+ - examples/rails3-example/public/404.html
273
+ - examples/rails3-example/public/422.html
274
+ - examples/rails3-example/public/500.html
275
+ - examples/rails3-example/public/favicon.ico
276
+ - examples/rails3-example/public/images/rails.png
277
+ - examples/rails3-example/public/robots.txt
278
+ - examples/rails3-example/public/stylesheets/.gitkeep
279
+ - examples/rails3-example/script/rails
280
+ - lib/oauth2-provider.rb
281
+ - lib/oauth2/provider.rb
282
+ - lib/oauth2/provider/models.rb
283
+ - lib/oauth2/provider/models/access_token.rb
284
+ - lib/oauth2/provider/models/active_record.rb
285
+ - lib/oauth2/provider/models/active_record/access_token.rb
286
+ - lib/oauth2/provider/models/active_record/authorization.rb
287
+ - lib/oauth2/provider/models/active_record/authorization_code.rb
288
+ - lib/oauth2/provider/models/active_record/client.rb
289
+ - lib/oauth2/provider/models/authorization.rb
290
+ - lib/oauth2/provider/models/authorization_code.rb
291
+ - lib/oauth2/provider/models/client.rb
292
+ - lib/oauth2/provider/models/mongoid.rb
293
+ - lib/oauth2/provider/models/mongoid/access_token.rb
294
+ - lib/oauth2/provider/models/mongoid/authorization.rb
295
+ - lib/oauth2/provider/models/mongoid/authorization_code.rb
296
+ - lib/oauth2/provider/models/mongoid/client.rb
297
+ - lib/oauth2/provider/rack.rb
298
+ - lib/oauth2/provider/rack/access_token_handler.rb
299
+ - lib/oauth2/provider/rack/authorization_code_request.rb
300
+ - lib/oauth2/provider/rack/authorization_codes_support.rb
301
+ - lib/oauth2/provider/rack/middleware.rb
302
+ - lib/oauth2/provider/rack/resource_request.rb
303
+ - lib/oauth2/provider/rack/responses.rb
304
+ - lib/oauth2/provider/rails.rb
305
+ - lib/oauth2/provider/rails/controller_authentication.rb
306
+ - lib/oauth2/provider/random.rb
307
+ - lib/oauth2/provider/version.rb
308
+ - oauth2-provider.gemspec
309
+ - spec/models/access_token_spec.rb
310
+ - spec/models/authorization_code_spec.rb
311
+ - spec/models/authorization_spec.rb
312
+ - spec/models/client_spec.rb
313
+ - spec/requests/access_tokens_controller_spec.rb
314
+ - spec/requests/authentication_spec.rb
315
+ - spec/requests/authorization_codes_support_spec.rb
316
+ - spec/schema.rb
317
+ - spec/set_backend_env_to_mongoid.rb
318
+ - spec/spec_helper.rb
319
+ - spec/support/activerecord_backend.rb
320
+ - spec/support/factories.rb
321
+ - spec/support/macros.rb
322
+ - spec/support/mongoid_backend.rb
323
+ - spec/support/rack.rb
324
+ has_rdoc: true
325
+ homepage: http://tomafro.net
326
+ licenses: []
327
+
328
+ post_install_message:
329
+ rdoc_options: []
330
+
331
+ require_paths:
332
+ - lib
333
+ required_ruby_version: !ruby/object:Gem::Requirement
334
+ none: false
335
+ requirements:
336
+ - - ">="
337
+ - !ruby/object:Gem::Version
338
+ hash: 3
339
+ segments:
340
+ - 0
341
+ version: "0"
342
+ required_rubygems_version: !ruby/object:Gem::Requirement
343
+ none: false
344
+ requirements:
345
+ - - ">="
346
+ - !ruby/object:Gem::Version
347
+ hash: 3
348
+ segments:
349
+ - 0
350
+ version: "0"
351
+ requirements: []
352
+
353
+ rubyforge_project:
354
+ rubygems_version: 1.6.2
355
+ signing_key:
356
+ specification_version: 3
357
+ summary: OAuth2 Provider, extracted from api.hashblue.com
358
+ test_files:
359
+ - spec/models/access_token_spec.rb
360
+ - spec/models/authorization_code_spec.rb
361
+ - spec/models/authorization_spec.rb
362
+ - spec/models/client_spec.rb
363
+ - spec/requests/access_tokens_controller_spec.rb
364
+ - spec/requests/authentication_spec.rb
365
+ - spec/requests/authorization_codes_support_spec.rb
366
+ - spec/schema.rb
367
+ - spec/set_backend_env_to_mongoid.rb
368
+ - spec/spec_helper.rb
369
+ - spec/support/activerecord_backend.rb
370
+ - spec/support/factories.rb
371
+ - spec/support/macros.rb
372
+ - spec/support/mongoid_backend.rb
373
+ - spec/support/rack.rb