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,28 @@
1
+ module Doorkeeper
2
+ module Rails
3
+ class Routes
4
+ class Mapper
5
+ def initialize(mapping = Mapping.new)
6
+ @mapping = mapping
7
+ end
8
+
9
+ def map(&block)
10
+ self.instance_eval(&block) if block
11
+ @mapping
12
+ end
13
+
14
+ def controllers(controller_names = {})
15
+ @mapping.controllers.merge!(controller_names)
16
+ end
17
+
18
+ def skip_controllers(*controller_names)
19
+ @mapping.skips = controller_names
20
+ end
21
+
22
+ def as(alias_names = {})
23
+ @mapping.as.merge!(alias_names)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ module Doorkeeper
2
+ module Rails
3
+ class Routes
4
+ class Mapping
5
+ attr_accessor :controllers, :as, :skips
6
+
7
+ def initialize
8
+ @controllers = {
9
+ :authorizations => 'doorkeeper/authorizations',
10
+ :applications => 'doorkeeper/applications',
11
+ :authorized_applications => 'doorkeeper/authorized_applications',
12
+ :tokens => 'doorkeeper/tokens',
13
+ :token_info => 'doorkeeper/token_info'
14
+ }
15
+
16
+ @as = {
17
+ :authorizations => :authorization,
18
+ :tokens => :token,
19
+ :token_info => :token_info
20
+ }
21
+
22
+ @skips = []
23
+
24
+ end
25
+
26
+ def [](routes)
27
+ {
28
+ :controllers => @controllers[routes],
29
+ :as => @as[routes]
30
+ }
31
+ end
32
+
33
+ def skipped?(controller)
34
+ return @skips.include?(controller)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,33 @@
1
+ require 'doorkeeper/request/authorization_code'
2
+ require 'doorkeeper/request/client_credentials'
3
+ require 'doorkeeper/request/code'
4
+ require 'doorkeeper/request/password'
5
+ require 'doorkeeper/request/refresh_token'
6
+ require 'doorkeeper/request/token'
7
+
8
+ module Doorkeeper
9
+ module Request
10
+ extend self
11
+
12
+ # Available authorization strategies:
13
+ # :code, :token
14
+ def authorization_strategy(strategy)
15
+ get_strategy strategy
16
+ rescue NameError
17
+ raise Errors::InvalidAuthorizationStrategy
18
+ end
19
+
20
+ # Available token strategies:
21
+ # :password, :client_credentials, :authorization_code, :refresh_token
22
+ def token_strategy(strategy)
23
+ get_strategy strategy
24
+ rescue NameError
25
+ raise Errors::InvalidTokenStrategy
26
+ end
27
+
28
+ def get_strategy(strategy)
29
+ raise Errors::MissingRequestStrategy unless strategy.present?
30
+ "Doorkeeper::Request::#{strategy.to_s.camelize}".constantize
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,23 @@
1
+ module Doorkeeper
2
+ module Request
3
+ class AuthorizationCode
4
+ def self.build(server)
5
+ new(server.grant, server.client, server)
6
+ end
7
+
8
+ attr_accessor :grant, :client, :server
9
+
10
+ def initialize(grant, client, server)
11
+ @grant, @client, @server = grant, client, server
12
+ end
13
+
14
+ def request
15
+ @request ||= OAuth::AuthorizationCodeRequest.new(Doorkeeper.configuration, grant, client, server.parameters)
16
+ end
17
+
18
+ def authorize
19
+ request.authorize
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Doorkeeper
2
+ module Request
3
+ class ClientCredentials
4
+ def self.build(server)
5
+ new(server.client, server)
6
+ end
7
+
8
+ attr_accessor :client, :server
9
+
10
+ def initialize(client, server)
11
+ @client, @server = client, server
12
+ end
13
+
14
+ def request
15
+ @request ||= OAuth::ClientCredentialsRequest.new(Doorkeeper.configuration, client, server.parameters)
16
+ end
17
+
18
+ def authorize
19
+ request.authorize
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Doorkeeper
2
+ module Request
3
+ class Code
4
+ # TODO: this is so wrong!
5
+ def self.build(server)
6
+ new(server.context.send(:pre_auth), server)
7
+ end
8
+
9
+ attr_accessor :pre_auth, :server
10
+
11
+ def initialize(pre_auth, server)
12
+ @pre_auth, @server = pre_auth, server
13
+ end
14
+
15
+ def request
16
+ @request ||= OAuth::CodeRequest.new(pre_auth, server.current_resource_owner)
17
+ end
18
+
19
+ def authorize
20
+ request.authorize
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ module Doorkeeper
2
+ module Request
3
+ class Password
4
+ def self.build(server)
5
+ new(server.client, server.resource_owner, server)
6
+ end
7
+
8
+ attr_accessor :client, :resource_owner, :server
9
+
10
+ def initialize(client, resource_owner, server)
11
+ @client, @resource_owner, @server = client, resource_owner, server
12
+ end
13
+
14
+ def request
15
+ @request ||= OAuth::PasswordAccessTokenRequest.new(Doorkeeper.configuration, client, resource_owner, server.parameters)
16
+ end
17
+
18
+ def authorize
19
+ request.authorize
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Doorkeeper
2
+ module Request
3
+ class RefreshToken
4
+ def self.build(server)
5
+ new(server.current_refresh_token, server.client)
6
+ end
7
+
8
+ attr_accessor :refresh_token, :client
9
+
10
+ def initialize(refresh_token, client)
11
+ @refresh_token, @client = refresh_token, client
12
+ end
13
+
14
+ def request
15
+ @request ||= OAuth::RefreshTokenRequest.new(Doorkeeper.configuration, refresh_token, client)
16
+ end
17
+
18
+ def authorize
19
+ request.authorize
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Doorkeeper
2
+ module Request
3
+ class Token
4
+ # TODO: this is so wrong!
5
+ def self.build(server)
6
+ new(server.context.send(:pre_auth), server)
7
+ end
8
+
9
+ attr_accessor :pre_auth, :server
10
+
11
+ def initialize(pre_auth, server)
12
+ @pre_auth, @server = pre_auth, server
13
+ end
14
+
15
+ def request
16
+ @request ||= OAuth::TokenRequest.new(pre_auth, server.current_resource_owner)
17
+ end
18
+
19
+ def authorize
20
+ request.authorize
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,54 @@
1
+ module Doorkeeper
2
+ class Server
3
+ attr_accessor :context
4
+
5
+ def initialize(context = nil)
6
+ @context = context
7
+ end
8
+
9
+ def authorization_request(strategy)
10
+ klass = Request.authorization_strategy strategy
11
+ klass.build self
12
+ end
13
+
14
+ def token_request(strategy)
15
+ klass = Request.token_strategy strategy
16
+ klass.build self
17
+ end
18
+
19
+ # TODO: context should be the request
20
+ def parameters
21
+ context.request.parameters
22
+ end
23
+
24
+ def client
25
+ @client ||= OAuth::Client.authenticate(credentials)
26
+ end
27
+
28
+ def client_via_uid
29
+ @client_via_uid ||= OAuth::Client.find(parameters[:client_id])
30
+ end
31
+
32
+ def current_resource_owner
33
+ context.send :current_resource_owner
34
+ end
35
+
36
+ def current_refresh_token
37
+ Doorkeeper::AccessToken.by_refresh_token(parameters[:refresh_token])
38
+ end
39
+
40
+ def grant
41
+ Doorkeeper::AccessGrant.authenticate(parameters[:code])
42
+ end
43
+
44
+ # TODO: Use configuration and evaluate proper context on block
45
+ def resource_owner
46
+ context.send :resource_owner_from_credentials
47
+ end
48
+
49
+ def credentials
50
+ methods = Doorkeeper.configuration.client_credentials_methods
51
+ @credentials ||= OAuth::Client::Credentials.from_request(context.request, *methods)
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,30 @@
1
+ module Doorkeeper
2
+ module Validations
3
+ extend ActiveSupport::Concern
4
+
5
+ attr_accessor :error
6
+
7
+ def validate
8
+ @error = nil
9
+ self.class.validations.each do |validation|
10
+ break if @error
11
+ @error = validation.last unless send("validate_#{validation.first}")
12
+ end
13
+ end
14
+
15
+ def valid?
16
+ validate
17
+ @error.nil?
18
+ end
19
+
20
+ module ClassMethods
21
+ def validate(attribute, options = {})
22
+ validations << [attribute, options[:error]]
23
+ end
24
+
25
+ def validations
26
+ @validations ||= []
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ module Doorkeeper
2
+ VERSION = "0.6.7"
3
+ end
@@ -0,0 +1,15 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ class Doorkeeper::ApplicationOwnerGenerator < Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ desc "Provide support for client application ownership."
7
+
8
+ def application_owner
9
+ migration_template 'add_owner_to_application_migration.rb', 'db/migrate/add_owner_to_application.rb'
10
+ end
11
+
12
+ def self.next_migration_number(dirname)
13
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ class Doorkeeper::InstallGenerator < ::Rails::Generators::Base
2
+ include Rails::Generators::Migration
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ desc "Installs Doorkeeper."
5
+
6
+ def install
7
+ template "initializer.rb", "config/initializers/doorkeeper.rb"
8
+ copy_file "../../../../config/locales/en.yml", "config/locales/doorkeeper.en.yml"
9
+ route "use_doorkeeper"
10
+ readme "README"
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ class Doorkeeper::MigrationGenerator < ::Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ desc "Installs Doorkeeper migration file."
7
+
8
+ def install
9
+ migration_template 'migration.rb', 'db/migrate/create_doorkeeper_tables.rb'
10
+ end
11
+
12
+ def self.next_migration_number(dirname)
13
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module Doorkeeper
2
+ module MongoMapper
3
+ class IndexesGenerator < ::Rails::Generators::Base
4
+ source_root File.expand_path('../../templates', __FILE__)
5
+ desc "Creates an indexes file for use with MongoMapper's rake db:index"
6
+
7
+ def install
8
+ template "indexes.rb", "db/indexes.rb"
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,44 @@
1
+ ===============================================================================
2
+
3
+ There is a setup that you need to do before you can use doorkeeper.
4
+
5
+ Step 1.
6
+ Go to config/initializers/doorkeeper.rb and configure
7
+ resource_owner_authenticator block.
8
+
9
+ Step 2.
10
+ Choose the ORM:
11
+
12
+ If you want to use ActiveRecord run:
13
+
14
+ rails generate doorkeeper:migration
15
+
16
+ And run
17
+
18
+ rake db:migrate
19
+
20
+ If you want to use Mongoid, configure the orm in initializers/doorkeeper.rb:
21
+
22
+ # Mongoid
23
+ Doorkeeper.configure do
24
+ orm :mongoid
25
+ end
26
+
27
+ If you want to use MongoMapper, configure the orm in
28
+ initializers/doorkeeper.rb:
29
+
30
+ # MongoMapper
31
+ Doorkeeper.configure do
32
+ orm :mongo_mapper
33
+ end
34
+
35
+ And run
36
+
37
+ rails generate doorkeeper:mongo_mapper:indexes
38
+ rake db:index
39
+
40
+ Step 3.
41
+ That's it, that's all. Enjoy!
42
+
43
+ ===============================================================================
44
+