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,25 @@
1
+ <div class="span16">
2
+ <header class="page-header">
3
+ <h2>Your authorized applications</h2>
4
+ </header>
5
+
6
+ <table class="zebra-striped">
7
+ <thead>
8
+ <tr>
9
+ <th>Application</th>
10
+ <th>Authorized at</th>
11
+ <th></th>
12
+ <th></th>
13
+ </tr>
14
+ </thead>
15
+ <tbody>
16
+ <% @applications.each do |application| %>
17
+ <tr>
18
+ <td><%= application.name %></td>
19
+ <td><%= application.created_at %></td>
20
+ <td><%= link_to 'Revoke', oauth_authorized_application_path(application), :data => { :confirm => 'Are you sure?' }, :method => :delete, :class => 'btn danger' %></td>
21
+ </tr>
22
+ <% end %>
23
+ </tbody>
24
+ </table>
25
+ </div>
@@ -0,0 +1,33 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Doorkeeper</title>
5
+ <%= stylesheet_link_tag "doorkeeper/application" %>
6
+ <%= javascript_include_tag "doorkeeper/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+ <section id="main" class="container">
11
+ <div class="topbar">
12
+ <div class="fill">
13
+ <div class="container">
14
+ <span class="brand">
15
+ OAuth2 Provider
16
+ </span>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <div class="content">
21
+ <div class="row">
22
+ <% flash.each do |key, message| %>
23
+ <div class="span16">
24
+ <div class="alert-message <%= key %>" data-alert><a class="close" href="#">×</a><p><%= message %></p></div>
25
+ </div>
26
+ <% end %>
27
+
28
+ <%= yield %>
29
+ </div>
30
+ </div>
31
+ </section>
32
+ </body>
33
+ </html>
@@ -0,0 +1,68 @@
1
+ en:
2
+ activerecord:
3
+ errors:
4
+ models:
5
+ application:
6
+ attributes:
7
+ redirect_uri:
8
+ fragment_present: 'cannot contain a fragment.'
9
+ has_query_parameter: 'cannot contain a query parameter.'
10
+ invalid_uri: 'must be a valid URI.'
11
+ relative_uri: 'must be an absolute URI.'
12
+ mongoid:
13
+ errors:
14
+ models:
15
+ application:
16
+ attributes:
17
+ redirect_uri:
18
+ fragment_present: 'cannot contain a fragment.'
19
+ has_query_parameter: 'cannot contain a query parameter.'
20
+ invalid_uri: 'must be a valid URI.'
21
+ relative_uri: 'must be an absolute URI.'
22
+ mongo_mapper:
23
+ errors:
24
+ models:
25
+ application:
26
+ attributes:
27
+ redirect_uri:
28
+ fragment_present: 'cannot contain a fragment.'
29
+ has_query_parameter: 'cannot contain a query parameter.'
30
+ invalid_uri: 'must be a valid URI.'
31
+ relative_uri: 'must be an absolute URI.'
32
+ doorkeeper:
33
+ errors:
34
+ messages:
35
+ # Common error messages
36
+ invalid_request: 'The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.'
37
+ invalid_redirect_uri: 'The redirect uri included is not valid.'
38
+ unauthorized_client: 'The client is not authorized to perform this request using this method.'
39
+ access_denied: 'The resource owner or authorization server denied the request.'
40
+ invalid_scope: 'The requested scope is invalid, unknown, or malformed.'
41
+ server_error: 'The authorization server encountered an unexpected condition which prevented it from fulfilling the request.'
42
+ temporarily_unavailable: 'The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.'
43
+
44
+ #configuration error messages
45
+ credential_flow_not_configured: 'Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.'
46
+ resource_owner_authenticator_not_configured: 'Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.'
47
+
48
+ # Access grant errors
49
+ unsupported_response_type: 'The authorization server does not support this response type.'
50
+
51
+ # Access token errors
52
+ invalid_client: 'Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.'
53
+ invalid_grant: 'The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.'
54
+ unsupported_grant_type: 'The authorization grant type is not supported by the authorization server.'
55
+
56
+ # Password Access token errors
57
+ invalid_resource_owner: 'The provided resource owner credentials are not valid, or resource owner cannot be found'
58
+ flash:
59
+ applications:
60
+ create:
61
+ notice: 'Application created.'
62
+ destroy:
63
+ notice: 'Application deleted.'
64
+ update:
65
+ notice: 'Application updated.'
66
+ authorized_applications:
67
+ destroy:
68
+ notice: 'Application revoked.'
@@ -0,0 +1,28 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ require "doorkeeper/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "couchkeeper"
7
+ s.version = Doorkeeper::VERSION
8
+ s.authors = ["Felipe Elias Philipp", "Piotr Jakubowski"]
9
+ s.email = ["felipe@applicake.com", "piotr.jakubowski@applicake.com"]
10
+ s.homepage = "https://github.com/applicake/doorkeeper"
11
+ s.summary = "Doorkeeper is an OAuth 2 provider for Rails."
12
+ s.description = "Doorkeeper is an OAuth 2 provider for Rails."
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- test/*`.split("\n")
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_dependency "railties", ">= 3.1"
19
+
20
+ s.add_development_dependency "sqlite3", "~> 1.3.5"
21
+ s.add_development_dependency "rspec-rails", ">= 2.11.4"
22
+ s.add_development_dependency "capybara", "~> 1.1.2"
23
+ s.add_development_dependency "generator_spec", "~> 0.8.5"
24
+ s.add_development_dependency "factory_girl", "~> 2.6.4"
25
+ s.add_development_dependency "timecop", "~> 0.5.2"
26
+ s.add_development_dependency "database_cleaner", "~> 0.9.1"
27
+ s.add_development_dependency "bcrypt-ruby", "~> 3.0.1"
28
+ end
@@ -0,0 +1,64 @@
1
+ require "doorkeeper/version"
2
+ require "doorkeeper/engine"
3
+ require "doorkeeper/config"
4
+ require "doorkeeper/doorkeeper_for"
5
+
6
+ require 'doorkeeper/errors'
7
+ require 'doorkeeper/server'
8
+ require 'doorkeeper/request'
9
+
10
+ module Doorkeeper
11
+ autoload :Validations, "doorkeeper/validations"
12
+
13
+ module OAuth
14
+ autoload :Scopes, "doorkeeper/oauth/scopes"
15
+ autoload :Error, "doorkeeper/oauth/error"
16
+ autoload :CodeResponse, "doorkeeper/oauth/code_response"
17
+ autoload :TokenResponse, "doorkeeper/oauth/token_response"
18
+ autoload :ErrorResponse, "doorkeeper/oauth/error_response"
19
+ autoload :PreAuthorization, "doorkeeper/oauth/pre_authorization"
20
+ autoload :AuthorizationCodeRequest, "doorkeeper/oauth/authorization_code_request"
21
+ autoload :RefreshTokenRequest, "doorkeeper/oauth/refresh_token_request"
22
+ autoload :PasswordAccessTokenRequest, "doorkeeper/oauth/password_access_token_request"
23
+ autoload :ClientCredentialsRequest, "doorkeeper/oauth/client_credentials_request"
24
+ autoload :Authorization, "doorkeeper/oauth/authorization"
25
+ autoload :CodeRequest, "doorkeeper/oauth/code_request"
26
+ autoload :TokenRequest, "doorkeeper/oauth/token_request"
27
+ autoload :Client, "doorkeeper/oauth/client"
28
+ autoload :Token, "doorkeeper/oauth/token"
29
+
30
+ module Helpers
31
+ autoload :ScopeChecker, "doorkeeper/oauth/helpers/scope_checker"
32
+ autoload :URIChecker, "doorkeeper/oauth/helpers/uri_checker"
33
+ autoload :UniqueToken, "doorkeeper/oauth/helpers/unique_token"
34
+ end
35
+ end
36
+
37
+ module Models
38
+ autoload :Scopes, 'doorkeeper/models/scopes'
39
+ autoload :Expirable, 'doorkeeper/models/expirable'
40
+ autoload :Revocable, 'doorkeeper/models/revocable'
41
+ autoload :Accessible, 'doorkeeper/models/accessible'
42
+ end
43
+
44
+ module Helpers
45
+ autoload :Filter, "doorkeeper/helpers/filter"
46
+ autoload :Controller, "doorkeeper/helpers/controller"
47
+ end
48
+
49
+ module Rails
50
+ autoload :Routes, "doorkeeper/rails/routes"
51
+ end
52
+
53
+ def self.configured?
54
+ @config.present?
55
+ end
56
+
57
+ def self.database_installed?
58
+ [AccessToken, AccessGrant, Application].all? { |model| model.table_exists? }
59
+ end
60
+
61
+ def self.installed?
62
+ configured? && database_installed?
63
+ end
64
+ end
@@ -0,0 +1,194 @@
1
+ module Doorkeeper
2
+ class MissingConfiguration < StandardError
3
+ def initialize
4
+ super("Configuration for doorkeeper missing. Do you have doorkeeper initializer?")
5
+ end
6
+ end
7
+
8
+ def self.configure(&block)
9
+ @config = Config::Builder.new(&block).build
10
+ enable_orm
11
+ setup_application_owner if @config.enable_application_owner?
12
+ end
13
+
14
+ def self.configuration
15
+ @config || (raise MissingConfiguration.new)
16
+ end
17
+
18
+ def self.enable_orm
19
+ require "doorkeeper/models/#{@config.orm}/access_grant"
20
+ require "doorkeeper/models/#{@config.orm}/access_token"
21
+ require "doorkeeper/models/#{@config.orm}/application"
22
+ require 'doorkeeper/models/access_grant'
23
+ require 'doorkeeper/models/access_token'
24
+ require 'doorkeeper/models/application'
25
+ end
26
+
27
+ def self.setup_application_owner
28
+ require File.join(File.dirname(__FILE__), 'models', 'ownership')
29
+ Doorkeeper::Application.send :include, Doorkeeper::Models::Ownership
30
+ end
31
+
32
+ class Config
33
+ class Builder
34
+ def initialize(&block)
35
+ @config = Config.new
36
+ instance_eval(&block)
37
+ end
38
+
39
+ def build
40
+ @config
41
+ end
42
+
43
+ def enable_application_owner(opts={})
44
+ @config.instance_variable_set("@enable_application_owner", true)
45
+ confirm_application_owner if opts[:confirmation].present? && opts[:confirmation]
46
+ end
47
+
48
+ def confirm_application_owner
49
+ @config.instance_variable_set("@confirm_application_owner", true)
50
+ end
51
+
52
+ def default_scopes(*scopes)
53
+ @config.instance_variable_set("@default_scopes", Doorkeeper::OAuth::Scopes.from_array(scopes))
54
+ end
55
+
56
+ def optional_scopes(*scopes)
57
+ @config.instance_variable_set("@optional_scopes", Doorkeeper::OAuth::Scopes.from_array(scopes))
58
+ end
59
+
60
+ def client_credentials(*methods)
61
+ @config.instance_variable_set("@client_credentials", methods)
62
+ end
63
+
64
+ def access_token_methods(*methods)
65
+ @config.instance_variable_set("@access_token_methods", methods)
66
+ end
67
+
68
+ def use_refresh_token
69
+ @config.instance_variable_set("@refresh_token_enabled", true)
70
+ end
71
+ end
72
+
73
+ module Option
74
+
75
+ # Defines configuration option
76
+ #
77
+ # When you call option, it defines two methods. One method will take place
78
+ # in the +Config+ class and the other method will take place in the
79
+ # +Builder+ class.
80
+ #
81
+ # The +name+ parameter will set both builder method and config attribute.
82
+ # If the +:as+ option is defined, the builder method will be the specified
83
+ # option while the config attribute will be the +name+ parameter.
84
+ #
85
+ # If you want to introduce another level of config DSL you can
86
+ # define +builder_class+ parameter.
87
+ # Builder should take a block as the initializer parameter and respond to function +build+
88
+ # that returns the value of the config attribute.
89
+ #
90
+ # ==== Options
91
+ #
92
+ # * [:+as+] Set the builder method that goes inside +configure+ block
93
+ # * [+:default+] The default value in case no option was set
94
+ #
95
+ # ==== Examples
96
+ #
97
+ # option :name
98
+ # option :name, :as => :set_name
99
+ # option :name, :default => "My Name"
100
+ # option :scopes :builder_class => ScopesBuilder
101
+ #
102
+ def option(name, options = {})
103
+ attribute = options[:as] || name
104
+ attribute_builder = options[:builder_class]
105
+
106
+ Builder.instance_eval do
107
+ define_method name do |*args, &block|
108
+ # TODO: is builder_class option being used?
109
+ value = unless attribute_builder
110
+ block ? block : args.first
111
+ else
112
+ attribute_builder.new(&block).build
113
+ end
114
+
115
+ @config.instance_variable_set(:"@#{attribute}", value)
116
+ end
117
+ end
118
+
119
+ define_method attribute do |*args|
120
+ if instance_variable_defined?(:"@#{attribute}")
121
+ instance_variable_get(:"@#{attribute}")
122
+ else
123
+ options[:default]
124
+ end
125
+ end
126
+
127
+ public attribute
128
+ end
129
+
130
+ def extended(base)
131
+ base.send(:private, :option)
132
+ end
133
+ end
134
+
135
+ extend Option
136
+
137
+ option :resource_owner_authenticator,
138
+ :as => :authenticate_resource_owner,
139
+ :default => lambda{|routes|
140
+ logger.warn(I18n.translate('doorkeeper.errors.messages.resource_owner_authenticator_not_configured'))
141
+ nil
142
+ }
143
+ option :admin_authenticator,
144
+ :as => :authenticate_admin,
145
+ :default => lambda{|routes| }
146
+ option :resource_owner_from_credentials,
147
+ :default => lambda{|routes|
148
+ warn(I18n.translate('doorkeeper.errors.messages.credential_flow_not_configured'))
149
+ nil
150
+ }
151
+ option :skip_authorization, :default => lambda{|routes|}
152
+ option :access_token_expires_in, :default => 7200
153
+ option :authorization_code_expires_in,:default => 600
154
+ option :orm, :default => :active_record
155
+ option :test_redirect_uri, :default => 'urn:ietf:wg:oauth:2.0:oob'
156
+
157
+
158
+ def refresh_token_enabled?
159
+ !!@refresh_token_enabled
160
+ end
161
+
162
+ def enable_application_owner?
163
+ !!@enable_application_owner
164
+ end
165
+
166
+ def confirm_application_owner?
167
+ !!@confirm_application_owner
168
+ end
169
+
170
+ def default_scopes
171
+ @default_scopes ||= Doorkeeper::OAuth::Scopes.new
172
+ end
173
+
174
+ def optional_scopes
175
+ @optional_scopes ||= Doorkeeper::OAuth::Scopes.new
176
+ end
177
+
178
+ def scopes
179
+ @scopes ||= default_scopes + optional_scopes
180
+ end
181
+
182
+ def orm_name
183
+ [:mongoid2, :mongoid3].include?(orm) ? :mongoid : orm
184
+ end
185
+
186
+ def client_credentials_methods
187
+ @client_credentials ||= [:from_basic, :from_params]
188
+ end
189
+
190
+ def access_token_methods
191
+ @access_token_methods ||= [:from_bearer_authorization, :from_access_token_param, :from_bearer_param]
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,76 @@
1
+ module Doorkeeper
2
+ class InvalidSyntax < StandardError; end
3
+ class DoorkeeperFor
4
+ def initialize(options)
5
+ options ||= {}
6
+ raise InvalidSyntax unless options.is_a? Hash
7
+ @filter_options = {}
8
+
9
+ options.each do |k, v|
10
+ self.send(k, v)
11
+ end
12
+ end
13
+
14
+ # TODO: move this to Token class
15
+ def validate_token(token)
16
+ return false unless token
17
+ validate_token_scopes(token)
18
+ end
19
+
20
+ def filter_options
21
+ @filter_options
22
+ end
23
+
24
+ private
25
+ def scopes(scopes)
26
+ @scopes = scopes
27
+ end
28
+
29
+ def if(if_block)
30
+ @filter_options[:if] = if_block
31
+ end
32
+
33
+ def unless(unless_block)
34
+ @filter_options[:unless] = unless_block
35
+ end
36
+
37
+ # TODO: move this to Token class
38
+ def validate_token_scopes(token)
39
+ return true if @scopes.blank?
40
+ token.scopes.any? { |scope| @scopes.include? scope}
41
+ end
42
+ end
43
+
44
+ class AllDoorkeeperFor < DoorkeeperFor
45
+ private
46
+ def except(actions)
47
+ @filter_options[:except] = actions
48
+ end
49
+ end
50
+
51
+ class SelectedDoorkeeperFor < DoorkeeperFor
52
+ def initialize(*args)
53
+ options = args.pop if args.last.is_a? Hash
54
+ super(options)
55
+ only(args)
56
+ end
57
+
58
+ private
59
+ def only(actions)
60
+ @filter_options[:only] = actions
61
+ end
62
+ end
63
+
64
+ class DoorkeeperForBuilder
65
+ def self.create_doorkeeper_for(*args)
66
+ case args.first
67
+ when :all
68
+ AllDoorkeeperFor.new(args[1] || {})
69
+ when Hash, nil
70
+ raise InvalidSyntax
71
+ else
72
+ SelectedDoorkeeperFor.new(*args)
73
+ end
74
+ end
75
+ end
76
+ end