doorkeeper 4.4.3 → 5.5.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of doorkeeper might be problematic. Click here for more details.

Files changed (282) hide show
  1. checksums.yaml +5 -5
  2. data/{NEWS.md → CHANGELOG.md} +393 -19
  3. data/README.md +97 -393
  4. data/app/assets/stylesheets/doorkeeper/admin/application.css +2 -2
  5. data/app/controllers/doorkeeper/application_controller.rb +8 -5
  6. data/app/controllers/doorkeeper/application_metal_controller.rb +7 -11
  7. data/app/controllers/doorkeeper/applications_controller.rb +62 -27
  8. data/app/controllers/doorkeeper/authorizations_controller.rb +97 -17
  9. data/app/controllers/doorkeeper/authorized_applications_controller.rb +22 -3
  10. data/app/controllers/doorkeeper/token_info_controller.rb +16 -4
  11. data/app/controllers/doorkeeper/tokens_controller.rb +98 -32
  12. data/app/helpers/doorkeeper/dashboard_helper.rb +9 -7
  13. data/app/views/doorkeeper/applications/_delete_form.html.erb +3 -1
  14. data/app/views/doorkeeper/applications/_form.html.erb +27 -26
  15. data/app/views/doorkeeper/applications/edit.html.erb +1 -1
  16. data/app/views/doorkeeper/applications/index.html.erb +17 -7
  17. data/app/views/doorkeeper/applications/new.html.erb +1 -1
  18. data/app/views/doorkeeper/applications/show.html.erb +38 -17
  19. data/app/views/doorkeeper/authorizations/error.html.erb +1 -1
  20. data/app/views/doorkeeper/authorizations/form_post.html.erb +15 -0
  21. data/app/views/doorkeeper/authorizations/new.html.erb +6 -0
  22. data/app/views/layouts/doorkeeper/admin.html.erb +16 -14
  23. data/config/locales/en.yml +23 -3
  24. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  25. data/lib/doorkeeper/config/option.rb +82 -0
  26. data/lib/doorkeeper/config/validations.rb +53 -0
  27. data/lib/doorkeeper/config.rb +471 -140
  28. data/lib/doorkeeper/engine.rb +8 -2
  29. data/lib/doorkeeper/errors.rb +25 -16
  30. data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
  31. data/lib/doorkeeper/grant_flow/flow.rb +44 -0
  32. data/lib/doorkeeper/grant_flow/registry.rb +50 -0
  33. data/lib/doorkeeper/grant_flow.rb +45 -0
  34. data/lib/doorkeeper/grape/authorization_decorator.rb +6 -4
  35. data/lib/doorkeeper/grape/helpers.rb +13 -7
  36. data/lib/doorkeeper/helpers/controller.rb +43 -10
  37. data/lib/doorkeeper/models/access_grant_mixin.rb +97 -3
  38. data/lib/doorkeeper/models/access_token_mixin.rb +272 -66
  39. data/lib/doorkeeper/models/application_mixin.rb +50 -5
  40. data/lib/doorkeeper/models/concerns/accessible.rb +2 -0
  41. data/lib/doorkeeper/models/concerns/expirable.rb +7 -3
  42. data/lib/doorkeeper/models/concerns/orderable.rb +2 -0
  43. data/lib/doorkeeper/models/concerns/ownership.rb +4 -7
  44. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  45. data/lib/doorkeeper/models/concerns/reusable.rb +19 -0
  46. data/lib/doorkeeper/models/concerns/revocable.rb +3 -27
  47. data/lib/doorkeeper/models/concerns/scopes.rb +12 -2
  48. data/lib/doorkeeper/models/concerns/secret_storable.rb +106 -0
  49. data/lib/doorkeeper/oauth/authorization/code.rb +48 -12
  50. data/lib/doorkeeper/oauth/authorization/context.rb +17 -0
  51. data/lib/doorkeeper/oauth/authorization/token.rb +58 -24
  52. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +7 -5
  53. data/lib/doorkeeper/oauth/authorization_code_request.rb +58 -10
  54. data/lib/doorkeeper/oauth/base_request.rb +35 -24
  55. data/lib/doorkeeper/oauth/base_response.rb +2 -0
  56. data/lib/doorkeeper/oauth/client/credentials.rb +5 -5
  57. data/lib/doorkeeper/oauth/client.rb +10 -11
  58. data/lib/doorkeeper/oauth/client_credentials/creator.rb +47 -4
  59. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +16 -9
  60. data/lib/doorkeeper/oauth/client_credentials/validator.rb +56 -0
  61. data/lib/doorkeeper/oauth/client_credentials_request.rb +10 -11
  62. data/lib/doorkeeper/oauth/code_request.rb +8 -12
  63. data/lib/doorkeeper/oauth/code_response.rb +27 -15
  64. data/lib/doorkeeper/oauth/error.rb +3 -1
  65. data/lib/doorkeeper/oauth/error_response.rb +35 -14
  66. data/lib/doorkeeper/oauth/forbidden_token_response.rb +10 -3
  67. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +23 -18
  68. data/lib/doorkeeper/oauth/helpers/unique_token.rb +20 -3
  69. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +42 -7
  70. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  71. data/lib/doorkeeper/oauth/invalid_request_response.rb +43 -0
  72. data/lib/doorkeeper/oauth/invalid_token_response.rb +29 -4
  73. data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
  74. data/lib/doorkeeper/oauth/password_access_token_request.rb +43 -10
  75. data/lib/doorkeeper/oauth/pre_authorization.rb +133 -26
  76. data/lib/doorkeeper/oauth/refresh_token_request.rb +59 -31
  77. data/lib/doorkeeper/oauth/scopes.rb +8 -4
  78. data/lib/doorkeeper/oauth/token.rb +12 -8
  79. data/lib/doorkeeper/oauth/token_introspection.rb +97 -23
  80. data/lib/doorkeeper/oauth/token_request.rb +8 -20
  81. data/lib/doorkeeper/oauth/token_response.rb +14 -10
  82. data/lib/doorkeeper/oauth.rb +13 -0
  83. data/lib/doorkeeper/orm/active_record/access_grant.rb +5 -30
  84. data/lib/doorkeeper/orm/active_record/access_token.rb +5 -43
  85. data/lib/doorkeeper/orm/active_record/application.rb +6 -57
  86. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +68 -0
  87. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +59 -0
  88. data/lib/doorkeeper/orm/active_record/mixins/application.rb +198 -0
  89. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +66 -0
  90. data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +33 -0
  91. data/lib/doorkeeper/orm/active_record.rb +27 -9
  92. data/lib/doorkeeper/rails/helpers.rb +10 -8
  93. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  94. data/lib/doorkeeper/rails/routes/mapper.rb +4 -2
  95. data/lib/doorkeeper/rails/routes/mapping.rb +9 -7
  96. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  97. data/lib/doorkeeper/rails/routes.rb +37 -30
  98. data/lib/doorkeeper/rake/db.rake +40 -0
  99. data/lib/doorkeeper/rake/setup.rake +11 -0
  100. data/lib/doorkeeper/rake.rb +14 -0
  101. data/lib/doorkeeper/request/authorization_code.rb +6 -4
  102. data/lib/doorkeeper/request/client_credentials.rb +3 -3
  103. data/lib/doorkeeper/request/code.rb +1 -1
  104. data/lib/doorkeeper/request/password.rb +4 -3
  105. data/lib/doorkeeper/request/refresh_token.rb +6 -5
  106. data/lib/doorkeeper/request/strategy.rb +4 -2
  107. data/lib/doorkeeper/request/token.rb +1 -1
  108. data/lib/doorkeeper/request.rb +61 -34
  109. data/lib/doorkeeper/secret_storing/base.rb +64 -0
  110. data/lib/doorkeeper/secret_storing/bcrypt.rb +60 -0
  111. data/lib/doorkeeper/secret_storing/plain.rb +33 -0
  112. data/lib/doorkeeper/secret_storing/sha256_hash.rb +26 -0
  113. data/lib/doorkeeper/server.rb +9 -11
  114. data/lib/doorkeeper/stale_records_cleaner.rb +24 -0
  115. data/lib/doorkeeper/validations.rb +2 -0
  116. data/lib/doorkeeper/version.rb +7 -29
  117. data/lib/doorkeeper.rb +111 -64
  118. data/lib/generators/doorkeeper/application_owner_generator.rb +24 -18
  119. data/lib/generators/doorkeeper/confidential_applications_generator.rb +33 -0
  120. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  121. data/lib/generators/doorkeeper/install_generator.rb +19 -9
  122. data/lib/generators/doorkeeper/migration_generator.rb +23 -18
  123. data/lib/generators/doorkeeper/pkce_generator.rb +33 -0
  124. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +28 -22
  125. data/{spec/dummy/db/migrate/20180210183654_add_confidential_to_application.rb → lib/generators/doorkeeper/templates/add_confidential_to_applications.rb.erb} +2 -2
  126. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +3 -1
  127. data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb +2 -0
  128. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +8 -0
  129. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  130. data/lib/generators/doorkeeper/templates/initializer.rb +382 -30
  131. data/lib/generators/doorkeeper/templates/migration.rb.erb +35 -16
  132. data/lib/generators/doorkeeper/views_generator.rb +8 -4
  133. data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +4 -5
  134. metadata +95 -309
  135. data/.coveralls.yml +0 -1
  136. data/.github/ISSUE_TEMPLATE.md +0 -25
  137. data/.github/PULL_REQUEST_TEMPLATE.md +0 -17
  138. data/.gitignore +0 -19
  139. data/.hound.yml +0 -2
  140. data/.rspec +0 -1
  141. data/.rubocop.yml +0 -17
  142. data/.travis.yml +0 -38
  143. data/Appraisals +0 -18
  144. data/CODE_OF_CONDUCT.md +0 -46
  145. data/CONTRIBUTING.md +0 -47
  146. data/Gemfile +0 -10
  147. data/RELEASING.md +0 -10
  148. data/Rakefile +0 -20
  149. data/SECURITY.md +0 -15
  150. data/app/validators/redirect_uri_validator.rb +0 -44
  151. data/doorkeeper.gemspec +0 -32
  152. data/gemfiles/rails_4_2.gemfile +0 -13
  153. data/gemfiles/rails_5_0.gemfile +0 -12
  154. data/gemfiles/rails_5_1.gemfile +0 -12
  155. data/gemfiles/rails_5_2.gemfile +0 -12
  156. data/gemfiles/rails_master.gemfile +0 -14
  157. data/lib/doorkeeper/oauth/client_credentials/validation.rb +0 -45
  158. data/lib/generators/doorkeeper/add_client_confidentiality_generator.rb +0 -31
  159. data/lib/generators/doorkeeper/templates/add_confidential_to_application_migration.rb.erb +0 -11
  160. data/spec/controllers/application_metal_controller.rb +0 -10
  161. data/spec/controllers/applications_controller_spec.rb +0 -69
  162. data/spec/controllers/authorizations_controller_spec.rb +0 -250
  163. data/spec/controllers/protected_resources_controller_spec.rb +0 -309
  164. data/spec/controllers/token_info_controller_spec.rb +0 -56
  165. data/spec/controllers/tokens_controller_spec.rb +0 -274
  166. data/spec/dummy/Rakefile +0 -7
  167. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  168. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -7
  169. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -12
  170. data/spec/dummy/app/controllers/home_controller.rb +0 -17
  171. data/spec/dummy/app/controllers/metal_controller.rb +0 -11
  172. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -11
  173. data/spec/dummy/app/helpers/application_helper.rb +0 -5
  174. data/spec/dummy/app/models/user.rb +0 -5
  175. data/spec/dummy/app/views/home/index.html.erb +0 -0
  176. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  177. data/spec/dummy/config/application.rb +0 -23
  178. data/spec/dummy/config/boot.rb +0 -9
  179. data/spec/dummy/config/database.yml +0 -15
  180. data/spec/dummy/config/environment.rb +0 -5
  181. data/spec/dummy/config/environments/development.rb +0 -29
  182. data/spec/dummy/config/environments/production.rb +0 -62
  183. data/spec/dummy/config/environments/test.rb +0 -44
  184. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  185. data/spec/dummy/config/initializers/doorkeeper.rb +0 -112
  186. data/spec/dummy/config/initializers/new_framework_defaults.rb +0 -6
  187. data/spec/dummy/config/initializers/secret_token.rb +0 -8
  188. data/spec/dummy/config/initializers/session_store.rb +0 -8
  189. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  190. data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
  191. data/spec/dummy/config/routes.rb +0 -52
  192. data/spec/dummy/config.ru +0 -4
  193. data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -11
  194. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -7
  195. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -62
  196. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -9
  197. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +0 -13
  198. data/spec/dummy/db/schema.rb +0 -68
  199. data/spec/dummy/public/404.html +0 -26
  200. data/spec/dummy/public/422.html +0 -26
  201. data/spec/dummy/public/500.html +0 -26
  202. data/spec/dummy/public/favicon.ico +0 -0
  203. data/spec/dummy/script/rails +0 -6
  204. data/spec/factories.rb +0 -28
  205. data/spec/generators/application_owner_generator_spec.rb +0 -41
  206. data/spec/generators/install_generator_spec.rb +0 -31
  207. data/spec/generators/migration_generator_spec.rb +0 -41
  208. data/spec/generators/previous_refresh_token_generator_spec.rb +0 -57
  209. data/spec/generators/templates/routes.rb +0 -3
  210. data/spec/generators/views_generator_spec.rb +0 -27
  211. data/spec/grape/grape_integration_spec.rb +0 -135
  212. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -24
  213. data/spec/lib/config_spec.rb +0 -462
  214. data/spec/lib/doorkeeper_spec.rb +0 -150
  215. data/spec/lib/models/expirable_spec.rb +0 -50
  216. data/spec/lib/models/revocable_spec.rb +0 -59
  217. data/spec/lib/models/scopes_spec.rb +0 -43
  218. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -41
  219. data/spec/lib/oauth/authorization_code_request_spec.rb +0 -123
  220. data/spec/lib/oauth/base_request_spec.rb +0 -155
  221. data/spec/lib/oauth/base_response_spec.rb +0 -45
  222. data/spec/lib/oauth/client/credentials_spec.rb +0 -90
  223. data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -44
  224. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -86
  225. data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -54
  226. data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -27
  227. data/spec/lib/oauth/client_credentials_request_spec.rb +0 -105
  228. data/spec/lib/oauth/client_spec.rb +0 -39
  229. data/spec/lib/oauth/code_request_spec.rb +0 -43
  230. data/spec/lib/oauth/code_response_spec.rb +0 -34
  231. data/spec/lib/oauth/error_response_spec.rb +0 -61
  232. data/spec/lib/oauth/error_spec.rb +0 -23
  233. data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -23
  234. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -64
  235. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -20
  236. data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -218
  237. data/spec/lib/oauth/invalid_token_response_spec.rb +0 -56
  238. data/spec/lib/oauth/password_access_token_request_spec.rb +0 -96
  239. data/spec/lib/oauth/pre_authorization_spec.rb +0 -160
  240. data/spec/lib/oauth/refresh_token_request_spec.rb +0 -166
  241. data/spec/lib/oauth/scopes_spec.rb +0 -149
  242. data/spec/lib/oauth/token_request_spec.rb +0 -96
  243. data/spec/lib/oauth/token_response_spec.rb +0 -85
  244. data/spec/lib/oauth/token_spec.rb +0 -116
  245. data/spec/lib/request/strategy_spec.rb +0 -53
  246. data/spec/lib/server_spec.rb +0 -59
  247. data/spec/models/doorkeeper/access_grant_spec.rb +0 -36
  248. data/spec/models/doorkeeper/access_token_spec.rb +0 -418
  249. data/spec/models/doorkeeper/application_spec.rb +0 -303
  250. data/spec/requests/applications/applications_request_spec.rb +0 -94
  251. data/spec/requests/applications/authorized_applications_spec.rb +0 -30
  252. data/spec/requests/endpoints/authorization_spec.rb +0 -71
  253. data/spec/requests/endpoints/token_spec.rb +0 -71
  254. data/spec/requests/flows/authorization_code_errors_spec.rb +0 -76
  255. data/spec/requests/flows/authorization_code_spec.rb +0 -149
  256. data/spec/requests/flows/client_credentials_spec.rb +0 -86
  257. data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -32
  258. data/spec/requests/flows/implicit_grant_spec.rb +0 -61
  259. data/spec/requests/flows/password_spec.rb +0 -197
  260. data/spec/requests/flows/refresh_token_spec.rb +0 -174
  261. data/spec/requests/flows/revoke_token_spec.rb +0 -157
  262. data/spec/requests/flows/skip_authorization_spec.rb +0 -59
  263. data/spec/requests/protected_resources/metal_spec.rb +0 -14
  264. data/spec/requests/protected_resources/private_api_spec.rb +0 -81
  265. data/spec/routing/custom_controller_routes_spec.rb +0 -75
  266. data/spec/routing/default_routes_spec.rb +0 -39
  267. data/spec/routing/scoped_routes_spec.rb +0 -31
  268. data/spec/spec_helper.rb +0 -4
  269. data/spec/spec_helper_integration.rb +0 -74
  270. data/spec/support/dependencies/factory_girl.rb +0 -2
  271. data/spec/support/helpers/access_token_request_helper.rb +0 -11
  272. data/spec/support/helpers/authorization_request_helper.rb +0 -41
  273. data/spec/support/helpers/config_helper.rb +0 -9
  274. data/spec/support/helpers/model_helper.rb +0 -72
  275. data/spec/support/helpers/request_spec_helper.rb +0 -88
  276. data/spec/support/helpers/url_helper.rb +0 -56
  277. data/spec/support/http_method_shim.rb +0 -38
  278. data/spec/support/orm/active_record.rb +0 -3
  279. data/spec/support/shared/controllers_shared_context.rb +0 -65
  280. data/spec/support/shared/models_shared_examples.rb +0 -52
  281. data/spec/validators/redirect_uri_validator_spec.rb +0 -123
  282. data/spec/version/version_spec.rb +0 -15
@@ -1,59 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- feature 'Skip authorization form' do
4
- background do
5
- config_is_set(:authenticate_resource_owner) { User.first || redirect_to('/sign_in') }
6
- client_exists
7
- default_scopes_exist :public
8
- optional_scopes_exist :write
9
- end
10
-
11
- context 'for previously authorized clients' do
12
- background do
13
- create_resource_owner
14
- sign_in
15
- end
16
-
17
- scenario 'skips the authorization and return a new grant code' do
18
- client_is_authorized(@client, @resource_owner, scopes: 'public')
19
- visit authorization_endpoint_url(client: @client)
20
-
21
- i_should_not_see 'Authorize'
22
- client_should_be_authorized @client
23
- i_should_be_on_client_callback @client
24
- url_should_have_param 'code', Doorkeeper::AccessGrant.first.token
25
- end
26
-
27
- scenario 'does not skip authorization when scopes differ (new request has fewer scopes)' do
28
- client_is_authorized(@client, @resource_owner, scopes: 'public write')
29
- visit authorization_endpoint_url(client: @client, scope: 'public')
30
- i_should_see 'Authorize'
31
- end
32
-
33
- scenario 'does not skip authorization when scopes differ (new request has more scopes)' do
34
- client_is_authorized(@client, @resource_owner, scopes: 'public write')
35
- visit authorization_endpoint_url(client: @client, scopes: 'public write email')
36
- i_should_see 'Authorize'
37
- end
38
-
39
- scenario 'creates grant with new scope when scopes differ' do
40
- client_is_authorized(@client, @resource_owner, scopes: 'public write')
41
- visit authorization_endpoint_url(client: @client, scope: 'public')
42
- click_on 'Authorize'
43
- access_grant_should_have_scopes :public
44
- end
45
-
46
- scenario 'doesn not skip authorization when scopes are greater' do
47
- client_is_authorized(@client, @resource_owner, scopes: 'public')
48
- visit authorization_endpoint_url(client: @client, scope: 'public write')
49
- i_should_see 'Authorize'
50
- end
51
-
52
- scenario 'creates grant with new scope when scopes are greater' do
53
- client_is_authorized(@client, @resource_owner, scopes: 'public')
54
- visit authorization_endpoint_url(client: @client, scope: 'public write')
55
- click_on 'Authorize'
56
- access_grant_should_have_scopes :public, :write
57
- end
58
- end
59
- end
@@ -1,14 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe 'ActionController::Metal API' do
4
- before do
5
- @client = FactoryBot.create(:application)
6
- @resource = User.create!(name: 'Joe', password: 'sekret')
7
- @token = client_is_authorized(@client, @resource)
8
- end
9
-
10
- it 'client requests protected resource with valid token' do
11
- get "/metal.json?access_token=#{@token.token}"
12
- should_have_json 'ok', true
13
- end
14
- end
@@ -1,81 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- feature 'Private API' do
4
- background do
5
- @client = FactoryBot.create(:application)
6
- @resource = User.create!(name: 'Joe', password: 'sekret')
7
- @token = client_is_authorized(@client, @resource)
8
- end
9
-
10
- scenario 'client requests protected resource with valid token' do
11
- with_access_token_header @token.token
12
- visit '/full_protected_resources'
13
- expect(page.body).to have_content('index')
14
- end
15
-
16
- scenario 'client requests protected resource with disabled header authentication' do
17
- config_is_set :access_token_methods, [:from_access_token_param]
18
- with_access_token_header @token.token
19
- visit '/full_protected_resources'
20
- response_status_should_be 401
21
- end
22
-
23
- scenario 'client attempts to request protected resource with invalid token' do
24
- with_access_token_header 'invalid'
25
- visit '/full_protected_resources'
26
- response_status_should_be 401
27
- end
28
-
29
- scenario 'client attempts to request protected resource with expired token' do
30
- @token.update_attribute :expires_in, -100 # expires token
31
- with_access_token_header @token.token
32
- visit '/full_protected_resources'
33
- response_status_should_be 401
34
- end
35
-
36
- scenario 'client requests protected resource with permanent token' do
37
- @token.update_attribute :expires_in, nil # never expires
38
- with_access_token_header @token.token
39
- visit '/full_protected_resources'
40
- expect(page.body).to have_content('index')
41
- end
42
-
43
- scenario 'access token with no default scopes' do
44
- Doorkeeper.configuration.instance_eval {
45
- @default_scopes = Doorkeeper::OAuth::Scopes.from_array([:public])
46
- @scopes = default_scopes + optional_scopes
47
- }
48
- @token.update_attribute :scopes, 'dummy'
49
- with_access_token_header @token.token
50
- visit '/full_protected_resources'
51
- response_status_should_be 403
52
- end
53
-
54
- scenario 'access token with no allowed scopes' do
55
- @token.update_attribute :scopes, nil
56
- with_access_token_header @token.token
57
- visit '/full_protected_resources/1.json'
58
- response_status_should_be 403
59
- end
60
-
61
- scenario 'access token with one of allowed scopes' do
62
- @token.update_attribute :scopes, 'admin'
63
- with_access_token_header @token.token
64
- visit '/full_protected_resources/1.json'
65
- expect(page.body).to have_content('show')
66
- end
67
-
68
- scenario 'access token with another of allowed scopes' do
69
- @token.update_attribute :scopes, 'write'
70
- with_access_token_header @token.token
71
- visit '/full_protected_resources/1.json'
72
- expect(page.body).to have_content('show')
73
- end
74
-
75
- scenario 'access token with both allowed scopes' do
76
- @token.update_attribute :scopes, 'write admin'
77
- with_access_token_header @token.token
78
- visit '/full_protected_resources/1.json'
79
- expect(page.body).to have_content('show')
80
- end
81
- end
@@ -1,75 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe 'Custom controller for routes' do
4
- it 'GET /space/scope/authorize routes to custom authorizations controller' do
5
- expect(get('/inner_space/scope/authorize')).to route_to('custom_authorizations#new')
6
- end
7
-
8
- it 'POST /space/scope/authorize routes to custom authorizations controller' do
9
- expect(post('/inner_space/scope/authorize')).to route_to('custom_authorizations#create')
10
- end
11
-
12
- it 'DELETE /space/scope/authorize routes to custom authorizations controller' do
13
- expect(delete('/inner_space/scope/authorize')).to route_to('custom_authorizations#destroy')
14
- end
15
-
16
- it 'POST /space/scope/token routes to tokens controller' do
17
- expect(post('/inner_space/scope/token')).to route_to('custom_authorizations#create')
18
- end
19
-
20
- it 'GET /space/scope/applications routes to applications controller' do
21
- expect(get('/inner_space/scope/applications')).to route_to('custom_authorizations#index')
22
- end
23
-
24
- it 'GET /space/scope/token/info routes to the token_info controller' do
25
- expect(get('/inner_space/scope/token/info')).to route_to('custom_authorizations#show')
26
- end
27
-
28
- it 'GET /space/oauth/authorize routes to custom authorizations controller' do
29
- expect(get('/space/oauth/authorize')).to route_to('custom_authorizations#new')
30
- end
31
-
32
- it 'POST /space/oauth/authorize routes to custom authorizations controller' do
33
- expect(post('/space/oauth/authorize')).to route_to('custom_authorizations#create')
34
- end
35
-
36
- it 'DELETE /space/oauth/authorize routes to custom authorizations controller' do
37
- expect(delete('/space/oauth/authorize')).to route_to('custom_authorizations#destroy')
38
- end
39
-
40
- it 'POST /space/oauth/token routes to tokens controller' do
41
- expect(post('/space/oauth/token')).to route_to('custom_authorizations#create')
42
- end
43
-
44
- it 'POST /space/oauth/revoke routes to tokens controller' do
45
- expect(post('/space/oauth/revoke')).to route_to('custom_authorizations#revoke')
46
- end
47
-
48
- it 'POST /space/oauth/introspect routes to tokens controller' do
49
- expect(post('/space/oauth/introspect')).to route_to('custom_authorizations#introspect')
50
- end
51
-
52
- it 'GET /space/oauth/applications routes to applications controller' do
53
- expect(get('/space/oauth/applications')).to route_to('custom_authorizations#index')
54
- end
55
-
56
- it 'GET /space/oauth/token/info routes to the token_info controller' do
57
- expect(get('/space/oauth/token/info')).to route_to('custom_authorizations#show')
58
- end
59
-
60
- it 'POST /outer_space/oauth/token is not be routable' do
61
- expect(post('/outer_space/oauth/token')).not_to be_routable
62
- end
63
-
64
- it 'GET /outer_space/oauth/authorize routes to custom authorizations controller' do
65
- expect(get('/outer_space/oauth/authorize')).to be_routable
66
- end
67
-
68
- it 'GET /outer_space/oauth/applications is not routable' do
69
- expect(get('/outer_space/oauth/applications')).not_to be_routable
70
- end
71
-
72
- it 'GET /outer_space/oauth/token_info is not routable' do
73
- expect(get('/outer_space/oauth/token/info')).not_to be_routable
74
- end
75
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe 'Default routes' do
4
- it 'GET /oauth/authorize routes to authorizations controller' do
5
- expect(get('/oauth/authorize')).to route_to('doorkeeper/authorizations#new')
6
- end
7
-
8
- it 'POST /oauth/authorize routes to authorizations controller' do
9
- expect(post('/oauth/authorize')).to route_to('doorkeeper/authorizations#create')
10
- end
11
-
12
- it 'DELETE /oauth/authorize routes to authorizations controller' do
13
- expect(delete('/oauth/authorize')).to route_to('doorkeeper/authorizations#destroy')
14
- end
15
-
16
- it 'POST /oauth/token routes to tokens controller' do
17
- expect(post('/oauth/token')).to route_to('doorkeeper/tokens#create')
18
- end
19
-
20
- it 'POST /oauth/revoke routes to tokens controller' do
21
- expect(post('/oauth/revoke')).to route_to('doorkeeper/tokens#revoke')
22
- end
23
-
24
- it 'POST /oauth/introspect routes to tokens controller' do
25
- expect(post('/oauth/introspect')).to route_to('doorkeeper/tokens#introspect')
26
- end
27
-
28
- it 'GET /oauth/applications routes to applications controller' do
29
- expect(get('/oauth/applications')).to route_to('doorkeeper/applications#index')
30
- end
31
-
32
- it 'GET /oauth/authorized_applications routes to authorized applications controller' do
33
- expect(get('/oauth/authorized_applications')).to route_to('doorkeeper/authorized_applications#index')
34
- end
35
-
36
- it 'GET /oauth/token/info route to authorized tokeninfo controller' do
37
- expect(get('/oauth/token/info')).to route_to('doorkeeper/token_info#show')
38
- end
39
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe 'Scoped routes' do
4
- it 'GET /scope/authorize routes to authorizations controller' do
5
- expect(get('/scope/authorize')).to route_to('doorkeeper/authorizations#new')
6
- end
7
-
8
- it 'POST /scope/authorize routes to authorizations controller' do
9
- expect(post('/scope/authorize')).to route_to('doorkeeper/authorizations#create')
10
- end
11
-
12
- it 'DELETE /scope/authorize routes to authorizations controller' do
13
- expect(delete('/scope/authorize')).to route_to('doorkeeper/authorizations#destroy')
14
- end
15
-
16
- it 'POST /scope/token routes to tokens controller' do
17
- expect(post('/scope/token')).to route_to('doorkeeper/tokens#create')
18
- end
19
-
20
- it 'GET /scope/applications routes to applications controller' do
21
- expect(get('/scope/applications')).to route_to('doorkeeper/applications#index')
22
- end
23
-
24
- it 'GET /scope/authorized_applications routes to authorized applications controller' do
25
- expect(get('/scope/authorized_applications')).to route_to('doorkeeper/authorized_applications#index')
26
- end
27
-
28
- it 'GET /scope/token/info route to authorzed tokeninfo controller' do
29
- expect(get('/scope/token/info')).to route_to('doorkeeper/token_info#show')
30
- end
31
- end
data/spec/spec_helper.rb DELETED
@@ -1,4 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '../lib'))
2
- $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '../app'))
3
-
4
- require 'doorkeeper'
@@ -1,74 +0,0 @@
1
- if ENV['TRAVIS']
2
- require 'coveralls'
3
-
4
- Coveralls.wear!('rails') do
5
- add_filter('/spec/')
6
- add_filter('/lib/generators/doorkeeper/templates/')
7
- end
8
- else
9
- require 'simplecov'
10
-
11
- SimpleCov.start do
12
- add_filter('/spec/')
13
- add_filter('/lib/generators/doorkeeper/templates/')
14
- end
15
- end
16
-
17
- ENV['RAILS_ENV'] ||= 'test'
18
- TABLE_NAME_PREFIX = ENV['table_name_prefix'] || nil
19
- TABLE_NAME_SUFFIX = ENV['table_name_suffix'] || nil
20
-
21
- orm = (ENV['BUNDLE_GEMFILE'] || '').match(/Gemfile\.(.+)\.rb/)
22
- DOORKEEPER_ORM = (orm && orm[1] || :active_record).to_sym
23
-
24
- $LOAD_PATH.unshift File.dirname(__FILE__)
25
-
26
- require 'capybara/rspec'
27
- require 'dummy/config/environment'
28
- require 'rspec/rails'
29
- require 'generator_spec/test_case'
30
- require 'database_cleaner'
31
-
32
- # Load JRuby SQLite3 if in that platform
33
- begin
34
- require 'jdbc/sqlite3'
35
- Jdbc::SQLite3.load_driver
36
- rescue LoadError
37
- end
38
-
39
- Rails.logger.info "====> Doorkeeper.orm = #{Doorkeeper.configuration.orm}"
40
- if Doorkeeper.configuration.orm == :active_record
41
- Rails.logger.info "======> active_record.table_name_prefix = #{Rails.configuration.active_record.table_name_prefix}"
42
- Rails.logger.info "======> active_record.table_name_suffix = #{Rails.configuration.active_record.table_name_suffix}"
43
- end
44
- Rails.logger.info "====> Rails version: #{Rails.version}"
45
- Rails.logger.info "====> Ruby version: #{RUBY_VERSION}"
46
-
47
- require "support/orm/#{DOORKEEPER_ORM}"
48
-
49
- ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '../')
50
-
51
- Dir["#{File.dirname(__FILE__)}/support/{dependencies,helpers,shared}/*.rb"].each { |f| require f }
52
-
53
- # Remove after dropping support of Rails 4.2
54
- require "#{File.dirname(__FILE__)}/support/http_method_shim.rb"
55
-
56
- RSpec.configure do |config|
57
- config.infer_spec_type_from_file_location!
58
- config.mock_with :rspec
59
-
60
- config.infer_base_class_for_anonymous_controllers = false
61
-
62
- config.include RSpec::Rails::RequestExampleGroup, type: :request
63
-
64
- config.before do
65
- DatabaseCleaner.start
66
- Doorkeeper.configure { orm DOORKEEPER_ORM }
67
- end
68
-
69
- config.after do
70
- DatabaseCleaner.clean
71
- end
72
-
73
- config.order = 'random'
74
- end
@@ -1,2 +0,0 @@
1
- require 'factory_bot'
2
- FactoryBot.find_definitions
@@ -1,11 +0,0 @@
1
- module AccessTokenRequestHelper
2
- def client_is_authorized(client, resource_owner, access_token_attributes = {})
3
- attributes = {
4
- application: client,
5
- resource_owner_id: resource_owner.id
6
- }.merge(access_token_attributes)
7
- FactoryBot.create(:access_token, attributes)
8
- end
9
- end
10
-
11
- RSpec.configuration.send :include, AccessTokenRequestHelper
@@ -1,41 +0,0 @@
1
- module AuthorizationRequestHelper
2
- def resource_owner_is_authenticated(resource_owner = nil)
3
- resource_owner ||= User.create!(name: 'Joe', password: 'sekret')
4
- Doorkeeper.configuration.instance_variable_set(:@authenticate_resource_owner, proc { resource_owner })
5
- end
6
-
7
- def resource_owner_is_not_authenticated
8
- Doorkeeper.configuration.instance_variable_set(:@authenticate_resource_owner, proc { redirect_to('/sign_in') })
9
- end
10
-
11
- def default_scopes_exist(*scopes)
12
- Doorkeeper.configuration.instance_variable_set(:@default_scopes, Doorkeeper::OAuth::Scopes.from_array(scopes))
13
- end
14
-
15
- def optional_scopes_exist(*scopes)
16
- Doorkeeper.configuration.instance_variable_set(:@optional_scopes, Doorkeeper::OAuth::Scopes.from_array(scopes))
17
- end
18
-
19
- def client_should_be_authorized(client)
20
- expect(client.access_grants.size).to eq(1)
21
- end
22
-
23
- def client_should_not_be_authorized(client)
24
- expect(client.size).to eq(0)
25
- end
26
-
27
- def i_should_be_on_client_callback(client)
28
- expect(client.redirect_uri).to eq("#{current_uri.scheme}://#{current_uri.host}#{current_uri.path}")
29
- end
30
-
31
- def allowing_forgery_protection(&block)
32
- _original_value = ActionController::Base.allow_forgery_protection
33
- ActionController::Base.allow_forgery_protection = true
34
-
35
- block.call
36
- ensure
37
- ActionController::Base.allow_forgery_protection = _original_value
38
- end
39
- end
40
-
41
- RSpec.configuration.send :include, AuthorizationRequestHelper