couchkeeper 0.6.7

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 (240) hide show
  1. data/.gitignore +14 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +28 -0
  4. data/CHANGELOG.md +198 -0
  5. data/Gemfile +32 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +290 -0
  8. data/Rakefile +18 -0
  9. data/app/assets/javascripts/doorkeeper/application.js +2 -0
  10. data/app/assets/stylesheets/doorkeeper/application.css +18 -0
  11. data/app/assets/stylesheets/doorkeeper/form.css +13 -0
  12. data/app/controllers/doorkeeper/application_controller.rb +7 -0
  13. data/app/controllers/doorkeeper/applications_controller.rb +60 -0
  14. data/app/controllers/doorkeeper/authorizations_controller.rb +57 -0
  15. data/app/controllers/doorkeeper/authorized_applications_controller.rb +12 -0
  16. data/app/controllers/doorkeeper/token_info_controller.rb +12 -0
  17. data/app/controllers/doorkeeper/tokens_controller.rb +20 -0
  18. data/app/helpers/doorkeeper/form_errors_helper.rb +9 -0
  19. data/app/validators/redirect_uri_validator.rb +23 -0
  20. data/app/views/doorkeeper/applications/_form.html.erb +34 -0
  21. data/app/views/doorkeeper/applications/edit.html.erb +13 -0
  22. data/app/views/doorkeeper/applications/index.html.erb +29 -0
  23. data/app/views/doorkeeper/applications/new.html.erb +13 -0
  24. data/app/views/doorkeeper/applications/show.html.erb +26 -0
  25. data/app/views/doorkeeper/authorizations/error.html.erb +6 -0
  26. data/app/views/doorkeeper/authorizations/new.html.erb +37 -0
  27. data/app/views/doorkeeper/authorizations/show.html.erb +4 -0
  28. data/app/views/doorkeeper/authorized_applications/index.html.erb +25 -0
  29. data/app/views/layouts/doorkeeper/application.html.erb +33 -0
  30. data/config/locales/en.yml +68 -0
  31. data/doorkeeper.gemspec +28 -0
  32. data/lib/doorkeeper.rb +64 -0
  33. data/lib/doorkeeper/config.rb +194 -0
  34. data/lib/doorkeeper/doorkeeper_for.rb +76 -0
  35. data/lib/doorkeeper/engine.rb +19 -0
  36. data/lib/doorkeeper/errors.rb +15 -0
  37. data/lib/doorkeeper/helpers/controller.rb +58 -0
  38. data/lib/doorkeeper/helpers/filter.rb +38 -0
  39. data/lib/doorkeeper/models/access_grant.rb +24 -0
  40. data/lib/doorkeeper/models/access_token.rb +95 -0
  41. data/lib/doorkeeper/models/accessible.rb +9 -0
  42. data/lib/doorkeeper/models/active_record/access_grant.rb +5 -0
  43. data/lib/doorkeeper/models/active_record/access_token.rb +21 -0
  44. data/lib/doorkeeper/models/active_record/application.rb +20 -0
  45. data/lib/doorkeeper/models/application.rb +33 -0
  46. data/lib/doorkeeper/models/couchbase/access_grant.rb +10 -0
  47. data/lib/doorkeeper/models/couchbase/access_token.rb +7 -0
  48. data/lib/doorkeeper/models/couchbase/application.rb +35 -0
  49. data/lib/doorkeeper/models/doorkeeper_access_grant/by_token/map.js +5 -0
  50. data/lib/doorkeeper/models/doorkeeper_access_token/by_application_id/map.js +5 -0
  51. data/lib/doorkeeper/models/doorkeeper_access_token/by_application_id_and_resource_owner_id/map.js +5 -0
  52. data/lib/doorkeeper/models/doorkeeper_access_token/by_refresh_token/map.js +5 -0
  53. data/lib/doorkeeper/models/doorkeeper_access_token/by_resource_owner_id/map.js +5 -0
  54. data/lib/doorkeeper/models/doorkeeper_access_token/by_token/map.js +5 -0
  55. data/lib/doorkeeper/models/doorkeeper_application/by_uid/map.js +5 -0
  56. data/lib/doorkeeper/models/doorkeeper_application/by_uid_and_secret/map.js +5 -0
  57. data/lib/doorkeeper/models/doorkeeper_application/show_all/map.js +6 -0
  58. data/lib/doorkeeper/models/expirable.rb +21 -0
  59. data/lib/doorkeeper/models/mongo_mapper/access_grant.rb +28 -0
  60. data/lib/doorkeeper/models/mongo_mapper/access_token.rb +51 -0
  61. data/lib/doorkeeper/models/mongo_mapper/application.rb +30 -0
  62. data/lib/doorkeeper/models/mongo_mapper/revocable.rb +15 -0
  63. data/lib/doorkeeper/models/mongoid/revocable.rb +15 -0
  64. data/lib/doorkeeper/models/mongoid/scopes.rb +15 -0
  65. data/lib/doorkeeper/models/mongoid2/access_grant.rb +22 -0
  66. data/lib/doorkeeper/models/mongoid2/access_token.rb +41 -0
  67. data/lib/doorkeeper/models/mongoid2/application.rb +22 -0
  68. data/lib/doorkeeper/models/mongoid3/access_grant.rb +22 -0
  69. data/lib/doorkeeper/models/mongoid3/access_token.rb +41 -0
  70. data/lib/doorkeeper/models/mongoid3/application.rb +22 -0
  71. data/lib/doorkeeper/models/ownership.rb +16 -0
  72. data/lib/doorkeeper/models/scopes.rb +17 -0
  73. data/lib/doorkeeper/oauth/authorization.rb +10 -0
  74. data/lib/doorkeeper/oauth/authorization/code.rb +32 -0
  75. data/lib/doorkeeper/oauth/authorization/token.rb +28 -0
  76. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +29 -0
  77. data/lib/doorkeeper/oauth/authorization_code_request.rb +82 -0
  78. data/lib/doorkeeper/oauth/client.rb +29 -0
  79. data/lib/doorkeeper/oauth/client/credentials.rb +21 -0
  80. data/lib/doorkeeper/oauth/client/methods.rb +18 -0
  81. data/lib/doorkeeper/oauth/client_credentials/creator.rb +29 -0
  82. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +35 -0
  83. data/lib/doorkeeper/oauth/client_credentials/validation.rb +33 -0
  84. data/lib/doorkeeper/oauth/client_credentials_request.rb +47 -0
  85. data/lib/doorkeeper/oauth/code_request.rb +28 -0
  86. data/lib/doorkeeper/oauth/code_response.rb +37 -0
  87. data/lib/doorkeeper/oauth/error.rb +9 -0
  88. data/lib/doorkeeper/oauth/error_response.rb +44 -0
  89. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +18 -0
  90. data/lib/doorkeeper/oauth/helpers/unique_token.rb +13 -0
  91. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +32 -0
  92. data/lib/doorkeeper/oauth/password_access_token_request.rb +84 -0
  93. data/lib/doorkeeper/oauth/pre_authorization.rb +62 -0
  94. data/lib/doorkeeper/oauth/refresh_token_request.rb +58 -0
  95. data/lib/doorkeeper/oauth/scopes.rb +60 -0
  96. data/lib/doorkeeper/oauth/token.rb +36 -0
  97. data/lib/doorkeeper/oauth/token_request.rb +28 -0
  98. data/lib/doorkeeper/oauth/token_response.rb +29 -0
  99. data/lib/doorkeeper/rails/routes.rb +90 -0
  100. data/lib/doorkeeper/rails/routes/mapper.rb +28 -0
  101. data/lib/doorkeeper/rails/routes/mapping.rb +39 -0
  102. data/lib/doorkeeper/request.rb +33 -0
  103. data/lib/doorkeeper/request/authorization_code.rb +23 -0
  104. data/lib/doorkeeper/request/client_credentials.rb +23 -0
  105. data/lib/doorkeeper/request/code.rb +24 -0
  106. data/lib/doorkeeper/request/password.rb +23 -0
  107. data/lib/doorkeeper/request/refresh_token.rb +23 -0
  108. data/lib/doorkeeper/request/token.rb +24 -0
  109. data/lib/doorkeeper/server.rb +54 -0
  110. data/lib/doorkeeper/validations.rb +30 -0
  111. data/lib/doorkeeper/version.rb +3 -0
  112. data/lib/generators/doorkeeper/application_owner_generator.rb +15 -0
  113. data/lib/generators/doorkeeper/install_generator.rb +12 -0
  114. data/lib/generators/doorkeeper/migration_generator.rb +15 -0
  115. data/lib/generators/doorkeeper/mongo_mapper/indexes_generator.rb +12 -0
  116. data/lib/generators/doorkeeper/templates/README +44 -0
  117. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +7 -0
  118. data/lib/generators/doorkeeper/templates/indexes.rb +3 -0
  119. data/lib/generators/doorkeeper/templates/initializer.rb +67 -0
  120. data/lib/generators/doorkeeper/templates/migration.rb +42 -0
  121. data/lib/generators/doorkeeper/views_generator.rb +15 -0
  122. data/script/rails +6 -0
  123. data/script/run_all +14 -0
  124. data/spec/controllers/applications_controller_spec.rb +18 -0
  125. data/spec/controllers/authorizations_controller_spec.rb +154 -0
  126. data/spec/controllers/protected_resources_controller_spec.rb +304 -0
  127. data/spec/controllers/token_info_controller_spec.rb +54 -0
  128. data/spec/controllers/tokens_controller_spec.rb +36 -0
  129. data/spec/dummy/Rakefile +7 -0
  130. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  131. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  132. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  133. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +7 -0
  134. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +12 -0
  135. data/spec/dummy/app/controllers/home_controller.rb +17 -0
  136. data/spec/dummy/app/controllers/metal_controller.rb +11 -0
  137. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +11 -0
  138. data/spec/dummy/app/helpers/application_helper.rb +5 -0
  139. data/spec/dummy/app/models/user.rb +27 -0
  140. data/spec/dummy/app/views/home/index.html.erb +0 -0
  141. data/spec/dummy/app/views/layouts/application.html.erb +16 -0
  142. data/spec/dummy/config.ru +4 -0
  143. data/spec/dummy/config/application.rb +54 -0
  144. data/spec/dummy/config/boot.rb +6 -0
  145. data/spec/dummy/config/database.yml +15 -0
  146. data/spec/dummy/config/environment.rb +5 -0
  147. data/spec/dummy/config/environments/development.rb +30 -0
  148. data/spec/dummy/config/environments/production.rb +60 -0
  149. data/spec/dummy/config/environments/test.rb +39 -0
  150. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  151. data/spec/dummy/config/initializers/doorkeeper.rb +56 -0
  152. data/spec/dummy/config/initializers/secret_token.rb +9 -0
  153. data/spec/dummy/config/initializers/session_store.rb +8 -0
  154. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  155. data/spec/dummy/config/locales/doorkeeper.en.yml +5 -0
  156. data/spec/dummy/config/mongo.yml +11 -0
  157. data/spec/dummy/config/mongoid2.yml +9 -0
  158. data/spec/dummy/config/mongoid3.yml +18 -0
  159. data/spec/dummy/config/routes.rb +38 -0
  160. data/spec/dummy/db/migrate/20111122132257_create_users.rb +9 -0
  161. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +5 -0
  162. data/spec/dummy/db/migrate/20120524202412_create_doorkeeper_tables.rb +44 -0
  163. data/spec/dummy/db/schema.rb +64 -0
  164. data/spec/dummy/public/404.html +26 -0
  165. data/spec/dummy/public/422.html +26 -0
  166. data/spec/dummy/public/500.html +26 -0
  167. data/spec/dummy/public/favicon.ico +0 -0
  168. data/spec/dummy/script/rails +6 -0
  169. data/spec/factories/access_grant.rb +9 -0
  170. data/spec/factories/access_token.rb +7 -0
  171. data/spec/factories/application.rb +6 -0
  172. data/spec/generators/application_owner_generator_spec.rb +23 -0
  173. data/spec/generators/install_generator_spec.rb +31 -0
  174. data/spec/generators/migration_generator_spec.rb +20 -0
  175. data/spec/generators/templates/routes.rb +3 -0
  176. data/spec/generators/views_generator_spec.rb +27 -0
  177. data/spec/lib/config_spec.rb +170 -0
  178. data/spec/lib/models/expirable_spec.rb +51 -0
  179. data/spec/lib/models/revocable_spec.rb +31 -0
  180. data/spec/lib/models/scopes_spec.rb +32 -0
  181. data/spec/lib/oauth/authorization/uri_builder_spec.rb +37 -0
  182. data/spec/lib/oauth/authorization_code_request_spec.rb +80 -0
  183. data/spec/lib/oauth/client/credentials_spec.rb +47 -0
  184. data/spec/lib/oauth/client/methods_spec.rb +54 -0
  185. data/spec/lib/oauth/client_credentials/creator_spec.rb +47 -0
  186. data/spec/lib/oauth/client_credentials/issuer_spec.rb +57 -0
  187. data/spec/lib/oauth/client_credentials/validation_spec.rb +29 -0
  188. data/spec/lib/oauth/client_credentials_integration_spec.rb +27 -0
  189. data/spec/lib/oauth/client_credentials_request_spec.rb +64 -0
  190. data/spec/lib/oauth/client_spec.rb +39 -0
  191. data/spec/lib/oauth/code_request_spec.rb +44 -0
  192. data/spec/lib/oauth/error_response_spec.rb +40 -0
  193. data/spec/lib/oauth/error_spec.rb +19 -0
  194. data/spec/lib/oauth/helpers/scope_checker_spec.rb +74 -0
  195. data/spec/lib/oauth/helpers/unique_token_spec.rb +20 -0
  196. data/spec/lib/oauth/helpers/uri_checker_spec.rb +64 -0
  197. data/spec/lib/oauth/password_access_token_request_spec.rb +65 -0
  198. data/spec/lib/oauth/pre_authorization_spec.rb +80 -0
  199. data/spec/lib/oauth/refresh_token_request_spec.rb +56 -0
  200. data/spec/lib/oauth/scopes_spec.rb +115 -0
  201. data/spec/lib/oauth/token_request_spec.rb +46 -0
  202. data/spec/lib/oauth/token_response_spec.rb +52 -0
  203. data/spec/lib/oauth/token_spec.rb +83 -0
  204. data/spec/lib/server_spec.rb +24 -0
  205. data/spec/models/doorkeeper/access_grant_spec.rb +36 -0
  206. data/spec/models/doorkeeper/access_token_spec.rb +153 -0
  207. data/spec/models/doorkeeper/application_spec.rb +162 -0
  208. data/spec/requests/applications/applications_request_spec.rb +92 -0
  209. data/spec/requests/applications/authorized_applications_spec.rb +30 -0
  210. data/spec/requests/endpoints/authorization_spec.rb +47 -0
  211. data/spec/requests/endpoints/token_spec.rb +46 -0
  212. data/spec/requests/flows/authorization_code_errors_spec.rb +66 -0
  213. data/spec/requests/flows/authorization_code_spec.rb +135 -0
  214. data/spec/requests/flows/client_credentials_spec.rb +58 -0
  215. data/spec/requests/flows/implicit_grant_errors_spec.rb +31 -0
  216. data/spec/requests/flows/implicit_grant_spec.rb +19 -0
  217. data/spec/requests/flows/password_spec.rb +78 -0
  218. data/spec/requests/flows/refresh_token_spec.rb +71 -0
  219. data/spec/requests/flows/skip_authorization_spec.rb +40 -0
  220. data/spec/requests/protected_resources/metal_spec.rb +14 -0
  221. data/spec/requests/protected_resources/private_api_spec.rb +50 -0
  222. data/spec/routing/custom_controller_routes_spec.rb +44 -0
  223. data/spec/routing/default_routes_spec.rb +32 -0
  224. data/spec/spec_helper.rb +2 -0
  225. data/spec/spec_helper_integration.rb +40 -0
  226. data/spec/support/dependencies/factory_girl.rb +2 -0
  227. data/spec/support/helpers/access_token_request_helper.rb +11 -0
  228. data/spec/support/helpers/authorization_request_helper.rb +32 -0
  229. data/spec/support/helpers/config_helper.rb +9 -0
  230. data/spec/support/helpers/model_helper.rb +45 -0
  231. data/spec/support/helpers/request_spec_helper.rb +72 -0
  232. data/spec/support/helpers/url_helper.rb +51 -0
  233. data/spec/support/orm/active_record.rb +11 -0
  234. data/spec/support/orm/mongo_mapper.rb +26 -0
  235. data/spec/support/orm/mongoid.rb +31 -0
  236. data/spec/support/shared/controllers_shared_context.rb +60 -0
  237. data/spec/support/shared/models_shared_examples.rb +60 -0
  238. data/spec/validators/redirect_uri_validator_spec.rb +47 -0
  239. data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +356 -0
  240. metadata +430 -0
@@ -0,0 +1,5 @@
1
+ function(doc) {
2
+ if(doc.type == "doorkeeper_application") {
3
+ emit([doc.id]);
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ function(doc) {
2
+ if(doc.type == "doorkeeper_application") {
3
+ emit([doc.id, doc.secret]);
4
+ }
5
+ }
@@ -0,0 +1,6 @@
1
+ function (doc, meta)
2
+ {
3
+ if(doc.type == "doorkeeper_application") {
4
+ emit(null, [doc.name, doc.secret, doc.redirect_uri]);
5
+ }
6
+ }
@@ -0,0 +1,21 @@
1
+ module Doorkeeper
2
+ module Models
3
+ module Expirable
4
+ def expired?
5
+ expires_in && Time.now > expired_time
6
+ end
7
+
8
+ def expired_time
9
+ created_at + expires_in.seconds
10
+ end
11
+
12
+ def expires_in_seconds
13
+ return nil if expires_in.nil?
14
+ expires = (created_at + expires_in.seconds) - Time.now
15
+ expires_sec = expires.seconds.round(0)
16
+ expires_sec > 0 ? expires_sec : 0
17
+ end
18
+ private :expired_time
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ require 'doorkeeper/models/mongo_mapper/revocable'
2
+
3
+ module Doorkeeper
4
+ class AccessGrant
5
+ include MongoMapper::Document
6
+ include Doorkeeper::Models::MongoMapper::Revocable
7
+ safe
8
+ timestamps!
9
+
10
+ set_collection_name "oauth_access_grants"
11
+
12
+ key :resource_owner_id, ObjectId
13
+ key :application_id, ObjectId
14
+ key :token, String
15
+ key :expires_in, Integer
16
+ key :redirect_uri, String
17
+ key :revoked_at, DateTime
18
+ key :scopes, String
19
+
20
+ def scopes=(value)
21
+ write_attribute :scopes, value if value.present?
22
+ end
23
+
24
+ def self.create_indexes
25
+ ensure_index :token, :unique => true
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ require 'doorkeeper/models/mongo_mapper/revocable'
2
+
3
+ module Doorkeeper
4
+ class AccessToken
5
+ include MongoMapper::Document
6
+ include Doorkeeper::Models::MongoMapper::Revocable
7
+ safe
8
+ timestamps!
9
+
10
+ set_collection_name "oauth_access_tokens"
11
+
12
+ key :resource_owner_id, ObjectId
13
+ key :token, String
14
+ key :expires_in, Integer
15
+ key :revoked_at, DateTime
16
+ key :scopes, String
17
+
18
+ def scopes=(value)
19
+ write_attribute :scopes, value if value.present?
20
+ end
21
+
22
+ def self.last
23
+ self.sort(:created_at).last
24
+ end
25
+
26
+ def self.delete_all_for(application_id, resource_owner)
27
+ delete_all(:application_id => application_id,
28
+ :resource_owner_id => resource_owner.id)
29
+ end
30
+ private_class_method :delete_all_for
31
+
32
+ def self.last_authorized_token_for(application, resource_owner_id)
33
+ where(:application_id => application.id,
34
+ :resource_owner_id => resource_owner_id,
35
+ :revoked_at => nil).
36
+ sort(:created_at.desc).
37
+ limit(1).
38
+ first
39
+ end
40
+ private_class_method :last_authorized_token_for
41
+
42
+ def refresh_token
43
+ self[:refresh_token]
44
+ end
45
+
46
+ def self.create_indexes
47
+ ensure_index :token, :unique => true
48
+ ensure_index [[:refresh_token, 1]], :unique => true, :sparse => true
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,30 @@
1
+ module Doorkeeper
2
+ class Application
3
+ include MongoMapper::Document
4
+ safe
5
+ timestamps!
6
+
7
+ set_collection_name "oauth_applications"
8
+
9
+ many :authorized_tokens, :class_name => "Doorkeeper::AccessToken"
10
+
11
+ key :name, String
12
+ key :uid, String
13
+ key :secret, String
14
+ key :redirect_uri, String
15
+ key :scopes, String
16
+
17
+ def scopes=(value)
18
+ write_attribute :scopes, value if value.present?
19
+ end
20
+
21
+ def self.authorized_for(resource_owner)
22
+ ids = AccessToken.where(:resource_owner_id => resource_owner.id, :revoked_at => nil).map(&:application_id)
23
+ find(ids)
24
+ end
25
+
26
+ def self.create_indexes
27
+ ensure_index :uid, :unique => true
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ module Doorkeeper
2
+ module Models
3
+ module MongoMapper
4
+ module Revocable
5
+ def self.included(base)
6
+ base.class_eval do
7
+ def update_column(attr, val)
8
+ update_attribute attr, val
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Doorkeeper
2
+ module Models
3
+ module Mongoid
4
+ module Revocable
5
+ def self.included(base)
6
+ base.class_eval do
7
+ def update_column(attr, val)
8
+ update_attribute attr, val
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Doorkeeper
2
+ module Models
3
+ module Mongoid
4
+ module Scopes
5
+ def self.included(base)
6
+ base.class_eval do
7
+ def scopes=(value)
8
+ write_attribute :scopes, value if value.present?
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ require 'doorkeeper/models/mongoid/revocable'
2
+ require 'doorkeeper/models/mongoid/scopes'
3
+
4
+ module Doorkeeper
5
+ class AccessGrant
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+ include Doorkeeper::Models::Mongoid::Revocable
9
+ include Doorkeeper::Models::Mongoid::Scopes
10
+
11
+ self.store_in :oauth_access_grants
12
+
13
+ field :resource_owner_id, :type => Integer
14
+ field :application_id, :type => Hash
15
+ field :token, :type => String
16
+ field :expires_in, :type => Integer
17
+ field :redirect_uri, :type => String
18
+ field :revoked_at, :type => DateTime
19
+
20
+ index :token, :unique => true
21
+ end
22
+ end
@@ -0,0 +1,41 @@
1
+ require 'doorkeeper/models/mongoid/revocable'
2
+ require 'doorkeeper/models/mongoid/scopes'
3
+
4
+ module Doorkeeper
5
+ class AccessToken
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+ include Doorkeeper::Models::Mongoid::Revocable
9
+ include Doorkeeper::Models::Mongoid::Scopes
10
+
11
+ self.store_in :oauth_access_tokens
12
+
13
+ field :resource_owner_id, :type => Integer
14
+ field :token, :type => String
15
+ field :expires_in, :type => Integer
16
+ field :revoked_at, :type => DateTime
17
+
18
+ index :token, :unique => true
19
+ index :refresh_token, :unique => true, :sparse => true
20
+
21
+ def self.delete_all_for(application_id, resource_owner)
22
+ where(:application_id => application_id,
23
+ :resource_owner_id => resource_owner.id).delete_all
24
+ end
25
+ private_class_method :delete_all_for
26
+
27
+ def self.last_authorized_token_for(application, resource_owner_id)
28
+ where(:application_id => application.id,
29
+ :resource_owner_id => resource_owner_id,
30
+ :revoked_at => nil).
31
+ order_by([:created_at, :desc]).
32
+ limit(1).
33
+ first
34
+ end
35
+ private_class_method :last_authorized_token_for
36
+
37
+ def refresh_token
38
+ self[:refresh_token]
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,22 @@
1
+ module Doorkeeper
2
+ class Application
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+
6
+ self.store_in :oauth_applications
7
+
8
+ field :name, :type => String
9
+ field :uid, :type => String
10
+ field :secret, :type => String
11
+ field :redirect_uri, :type => String
12
+
13
+ index :uid, :unique => true
14
+
15
+ has_many :authorized_tokens, :class_name => "Doorkeeper::AccessToken"
16
+
17
+ def self.authorized_for(resource_owner)
18
+ ids = AccessToken.where(:resource_owner_id => resource_owner.id, :revoked_at => nil).map(&:application_id)
19
+ find(ids)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ require 'doorkeeper/models/mongoid/revocable'
2
+ require 'doorkeeper/models/mongoid/scopes'
3
+
4
+ module Doorkeeper
5
+ class AccessGrant
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+ include Doorkeeper::Models::Mongoid::Revocable
9
+ include Doorkeeper::Models::Mongoid::Scopes
10
+
11
+ self.store_in collection: :oauth_access_grants
12
+
13
+ field :resource_owner_id, :type => Moped::BSON::ObjectId
14
+ field :application_id, :type => Hash
15
+ field :token, :type => String
16
+ field :expires_in, :type => Integer
17
+ field :redirect_uri, :type => String
18
+ field :revoked_at, :type => DateTime
19
+
20
+ index({ token: 1 }, { unique: true })
21
+ end
22
+ end
@@ -0,0 +1,41 @@
1
+ require 'doorkeeper/models/mongoid/revocable'
2
+ require 'doorkeeper/models/mongoid/scopes'
3
+
4
+ module Doorkeeper
5
+ class AccessToken
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+ include Doorkeeper::Models::Mongoid::Revocable
9
+ include Doorkeeper::Models::Mongoid::Scopes
10
+
11
+ self.store_in collection: :oauth_access_tokens
12
+
13
+ field :resource_owner_id, :type => Moped::BSON::ObjectId
14
+ field :token, :type => String
15
+ field :expires_in, :type => Integer
16
+ field :revoked_at, :type => DateTime
17
+
18
+ index({ token: 1 }, { unique: true })
19
+ index({ refresh_token: 1 }, { unique: true, sparse: true })
20
+
21
+ def self.delete_all_for(application_id, resource_owner)
22
+ where(:application_id => application_id,
23
+ :resource_owner_id => resource_owner.id).delete_all
24
+ end
25
+ private_class_method :delete_all_for
26
+
27
+ def self.last_authorized_token_for(application, resource_owner_id)
28
+ where(:application_id => application.id,
29
+ :resource_owner_id => resource_owner_id,
30
+ :revoked_at => nil).
31
+ order_by([:created_at, :desc]).
32
+ limit(1).
33
+ first
34
+ end
35
+ private_class_method :last_authorized_token_for
36
+
37
+ def refresh_token
38
+ self[:refresh_token]
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,22 @@
1
+ module Doorkeeper
2
+ class Application
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+
6
+ self.store_in collection: :oauth_applications
7
+
8
+ field :name, :type => String
9
+ field :uid, :type => String
10
+ field :secret, :type => String
11
+ field :redirect_uri, :type => String
12
+
13
+ index({ uid: 1 }, { unique: true })
14
+
15
+ has_many :authorized_tokens, :class_name => "Doorkeeper::AccessToken"
16
+
17
+ def self.authorized_for(resource_owner)
18
+ ids = AccessToken.where(:resource_owner_id => resource_owner.id, :revoked_at => nil).map(&:application_id)
19
+ find(ids)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module Doorkeeper
2
+ module Models
3
+ module Ownership
4
+ def validate_owner?
5
+ Doorkeeper.configuration.confirm_application_owner?
6
+ end
7
+
8
+ def self.included(base)
9
+ base.class_eval do
10
+ belongs_to :owner, :polymorphic => true
11
+ validates :owner, :presence => true, :if => :validate_owner?
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module Doorkeeper
2
+ module Models
3
+ module Scopes
4
+ def self.included(base)
5
+ base.class_eval do
6
+ define_method :scopes do
7
+ Doorkeeper::OAuth::Scopes.from_string(self[:scopes])
8
+ end
9
+
10
+ define_method :scopes_string do
11
+ Doorkeeper::OAuth::Scopes.from_string(self[:scopes]).to_s
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ module Doorkeeper
2
+ module OAuth
3
+ # TODO: move this to doorkeeper.rb
4
+ module Authorization
5
+ autoload :Code, "doorkeeper/oauth/authorization/code"
6
+ autoload :Token, "doorkeeper/oauth/authorization/token"
7
+ autoload :URIBuilder, "doorkeeper/oauth/authorization/uri_builder"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,32 @@
1
+ module Doorkeeper
2
+ module OAuth
3
+ module Authorization
4
+ class Code
5
+ attr_accessor :pre_auth, :resource_owner, :token
6
+
7
+ def initialize(pre_auth, resource_owner)
8
+ @pre_auth = pre_auth
9
+ @resource_owner = resource_owner
10
+ end
11
+
12
+ def issue_token
13
+ @token ||= AccessGrant.create!(
14
+ :application_id => pre_auth.client.id,
15
+ :resource_owner_id => resource_owner.id,
16
+ #
17
+ # This is how we expire the document using couchbase
18
+ # Used to be :expires_in => configuration.authorization_code_expires_in
19
+ #
20
+ :ttl => configuration.authorization_code_expires_in,
21
+ :redirect_uri => pre_auth.redirect_uri,
22
+ :scopes => pre_auth.scopes.to_s
23
+ )
24
+ end
25
+
26
+ def configuration
27
+ Doorkeeper.configuration
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end