doorkeeper 4.2.6 → 5.5.4

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 (274) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1049 -0
  3. data/README.md +110 -353
  4. data/app/assets/stylesheets/doorkeeper/admin/application.css +2 -2
  5. data/app/controllers/doorkeeper/application_controller.rb +6 -7
  6. data/app/controllers/doorkeeper/application_metal_controller.rb +7 -11
  7. data/app/controllers/doorkeeper/applications_controller.rb +65 -16
  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 +115 -38
  12. data/app/helpers/doorkeeper/dashboard_helper.rb +10 -6
  13. data/app/views/doorkeeper/applications/_delete_form.html.erb +3 -1
  14. data/app/views/doorkeeper/applications/_form.html.erb +33 -21
  15. data/app/views/doorkeeper/applications/edit.html.erb +1 -1
  16. data/app/views/doorkeeper/applications/index.html.erb +18 -6
  17. data/app/views/doorkeeper/applications/new.html.erb +1 -1
  18. data/app/views/doorkeeper/applications/show.html.erb +40 -16
  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/doorkeeper/authorized_applications/index.html.erb +0 -1
  23. data/app/views/layouts/doorkeeper/admin.html.erb +16 -14
  24. data/config/locales/en.yml +34 -7
  25. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  26. data/lib/doorkeeper/config/option.rb +82 -0
  27. data/lib/doorkeeper/config/validations.rb +53 -0
  28. data/lib/doorkeeper/config.rb +514 -167
  29. data/lib/doorkeeper/engine.rb +11 -5
  30. data/lib/doorkeeper/errors.rb +25 -16
  31. data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
  32. data/lib/doorkeeper/grant_flow/flow.rb +44 -0
  33. data/lib/doorkeeper/grant_flow/registry.rb +50 -0
  34. data/lib/doorkeeper/grant_flow.rb +45 -0
  35. data/lib/doorkeeper/grape/authorization_decorator.rb +6 -4
  36. data/lib/doorkeeper/grape/helpers.rb +23 -12
  37. data/lib/doorkeeper/helpers/controller.rb +51 -14
  38. data/lib/doorkeeper/models/access_grant_mixin.rb +94 -27
  39. data/lib/doorkeeper/models/access_token_mixin.rb +284 -96
  40. data/lib/doorkeeper/models/application_mixin.rb +58 -27
  41. data/lib/doorkeeper/models/concerns/accessible.rb +2 -0
  42. data/lib/doorkeeper/models/concerns/expirable.rb +12 -6
  43. data/lib/doorkeeper/models/concerns/orderable.rb +15 -0
  44. data/lib/doorkeeper/models/concerns/ownership.rb +4 -7
  45. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  46. data/lib/doorkeeper/models/concerns/reusable.rb +19 -0
  47. data/lib/doorkeeper/models/concerns/revocable.rb +3 -27
  48. data/lib/doorkeeper/models/concerns/scopes.rb +12 -2
  49. data/lib/doorkeeper/models/concerns/secret_storable.rb +106 -0
  50. data/lib/doorkeeper/oauth/authorization/code.rb +48 -12
  51. data/lib/doorkeeper/oauth/authorization/context.rb +17 -0
  52. data/lib/doorkeeper/oauth/authorization/token.rb +66 -28
  53. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +7 -5
  54. data/lib/doorkeeper/oauth/authorization_code_request.rb +63 -10
  55. data/lib/doorkeeper/oauth/base_request.rb +35 -19
  56. data/lib/doorkeeper/oauth/base_response.rb +2 -0
  57. data/lib/doorkeeper/oauth/client/credentials.rb +9 -7
  58. data/lib/doorkeeper/oauth/client.rb +10 -11
  59. data/lib/doorkeeper/oauth/client_credentials/creator.rb +47 -4
  60. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +16 -9
  61. data/lib/doorkeeper/oauth/client_credentials/validator.rb +56 -0
  62. data/lib/doorkeeper/oauth/client_credentials_request.rb +10 -11
  63. data/lib/doorkeeper/oauth/code_request.rb +8 -12
  64. data/lib/doorkeeper/oauth/code_response.rb +27 -15
  65. data/lib/doorkeeper/oauth/error.rb +5 -3
  66. data/lib/doorkeeper/oauth/error_response.rb +35 -15
  67. data/lib/doorkeeper/oauth/forbidden_token_response.rb +11 -3
  68. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +23 -18
  69. data/lib/doorkeeper/oauth/helpers/unique_token.rb +20 -3
  70. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +53 -3
  71. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  72. data/lib/doorkeeper/oauth/invalid_request_response.rb +43 -0
  73. data/lib/doorkeeper/oauth/invalid_token_response.rb +29 -5
  74. data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
  75. data/lib/doorkeeper/oauth/password_access_token_request.rb +44 -10
  76. data/lib/doorkeeper/oauth/pre_authorization.rb +135 -26
  77. data/lib/doorkeeper/oauth/refresh_token_request.rb +60 -31
  78. data/lib/doorkeeper/oauth/scopes.rb +26 -12
  79. data/lib/doorkeeper/oauth/token.rb +13 -9
  80. data/lib/doorkeeper/oauth/token_introspection.rb +202 -0
  81. data/lib/doorkeeper/oauth/token_request.rb +8 -20
  82. data/lib/doorkeeper/oauth/token_response.rb +14 -10
  83. data/lib/doorkeeper/oauth.rb +13 -0
  84. data/lib/doorkeeper/orm/active_record/access_grant.rb +6 -4
  85. data/lib/doorkeeper/orm/active_record/access_token.rb +5 -42
  86. data/lib/doorkeeper/orm/active_record/application.rb +6 -20
  87. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +69 -0
  88. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +60 -0
  89. data/lib/doorkeeper/orm/active_record/mixins/application.rb +199 -0
  90. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +66 -0
  91. data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +33 -0
  92. data/lib/doorkeeper/orm/active_record.rb +37 -8
  93. data/lib/doorkeeper/rails/helpers.rb +14 -13
  94. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  95. data/lib/doorkeeper/rails/routes/mapper.rb +4 -2
  96. data/lib/doorkeeper/rails/routes/mapping.rb +9 -7
  97. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  98. data/lib/doorkeeper/rails/routes.rb +41 -28
  99. data/lib/doorkeeper/rake/db.rake +40 -0
  100. data/lib/doorkeeper/rake/setup.rake +11 -0
  101. data/lib/doorkeeper/rake.rb +14 -0
  102. data/lib/doorkeeper/request/authorization_code.rb +6 -4
  103. data/lib/doorkeeper/request/client_credentials.rb +3 -3
  104. data/lib/doorkeeper/request/code.rb +1 -1
  105. data/lib/doorkeeper/request/password.rb +5 -14
  106. data/lib/doorkeeper/request/refresh_token.rb +6 -5
  107. data/lib/doorkeeper/request/strategy.rb +4 -2
  108. data/lib/doorkeeper/request/token.rb +1 -1
  109. data/lib/doorkeeper/request.rb +62 -29
  110. data/lib/doorkeeper/secret_storing/base.rb +64 -0
  111. data/lib/doorkeeper/secret_storing/bcrypt.rb +60 -0
  112. data/lib/doorkeeper/secret_storing/plain.rb +33 -0
  113. data/lib/doorkeeper/secret_storing/sha256_hash.rb +26 -0
  114. data/lib/doorkeeper/server.rb +9 -11
  115. data/lib/doorkeeper/stale_records_cleaner.rb +24 -0
  116. data/lib/doorkeeper/validations.rb +5 -2
  117. data/lib/doorkeeper/version.rb +12 -1
  118. data/lib/doorkeeper.rb +111 -62
  119. data/lib/generators/doorkeeper/application_owner_generator.rb +28 -13
  120. data/lib/generators/doorkeeper/confidential_applications_generator.rb +33 -0
  121. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  122. data/lib/generators/doorkeeper/install_generator.rb +19 -9
  123. data/lib/generators/doorkeeper/migration_generator.rb +27 -10
  124. data/lib/generators/doorkeeper/pkce_generator.rb +33 -0
  125. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +31 -19
  126. data/lib/generators/doorkeeper/templates/add_confidential_to_applications.rb.erb +13 -0
  127. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +9 -0
  128. data/{spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb → lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb} +3 -1
  129. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +8 -0
  130. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  131. data/lib/generators/doorkeeper/templates/initializer.rb +412 -33
  132. data/lib/generators/doorkeeper/templates/migration.rb.erb +88 -0
  133. data/lib/generators/doorkeeper/views_generator.rb +8 -4
  134. data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +4 -5
  135. metadata +114 -276
  136. data/.coveralls.yml +0 -1
  137. data/.gitignore +0 -19
  138. data/.hound.yml +0 -13
  139. data/.rspec +0 -1
  140. data/.travis.yml +0 -26
  141. data/Appraisals +0 -14
  142. data/CONTRIBUTING.md +0 -47
  143. data/Gemfile +0 -10
  144. data/NEWS.md +0 -606
  145. data/RELEASING.md +0 -10
  146. data/Rakefile +0 -20
  147. data/app/validators/redirect_uri_validator.rb +0 -34
  148. data/doorkeeper.gemspec +0 -29
  149. data/gemfiles/rails_4_2.gemfile +0 -11
  150. data/gemfiles/rails_5_0.gemfile +0 -12
  151. data/gemfiles/rails_5_1.gemfile +0 -13
  152. data/lib/doorkeeper/oauth/client_credentials/validation.rb +0 -45
  153. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +0 -7
  154. data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb +0 -11
  155. data/lib/generators/doorkeeper/templates/migration.rb +0 -68
  156. data/spec/controllers/application_metal_controller.rb +0 -10
  157. data/spec/controllers/applications_controller_spec.rb +0 -58
  158. data/spec/controllers/authorizations_controller_spec.rb +0 -218
  159. data/spec/controllers/protected_resources_controller_spec.rb +0 -300
  160. data/spec/controllers/token_info_controller_spec.rb +0 -52
  161. data/spec/controllers/tokens_controller_spec.rb +0 -88
  162. data/spec/dummy/Rakefile +0 -7
  163. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  164. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -7
  165. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -12
  166. data/spec/dummy/app/controllers/home_controller.rb +0 -17
  167. data/spec/dummy/app/controllers/metal_controller.rb +0 -11
  168. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -11
  169. data/spec/dummy/app/helpers/application_helper.rb +0 -5
  170. data/spec/dummy/app/models/user.rb +0 -5
  171. data/spec/dummy/app/views/home/index.html.erb +0 -0
  172. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  173. data/spec/dummy/config/application.rb +0 -23
  174. data/spec/dummy/config/boot.rb +0 -9
  175. data/spec/dummy/config/database.yml +0 -15
  176. data/spec/dummy/config/environment.rb +0 -5
  177. data/spec/dummy/config/environments/development.rb +0 -29
  178. data/spec/dummy/config/environments/production.rb +0 -62
  179. data/spec/dummy/config/environments/test.rb +0 -44
  180. data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +0 -6
  181. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  182. data/spec/dummy/config/initializers/doorkeeper.rb +0 -96
  183. data/spec/dummy/config/initializers/secret_token.rb +0 -9
  184. data/spec/dummy/config/initializers/session_store.rb +0 -8
  185. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  186. data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
  187. data/spec/dummy/config/routes.rb +0 -52
  188. data/spec/dummy/config.ru +0 -4
  189. data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -9
  190. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -5
  191. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -60
  192. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -7
  193. data/spec/dummy/db/schema.rb +0 -67
  194. data/spec/dummy/public/404.html +0 -26
  195. data/spec/dummy/public/422.html +0 -26
  196. data/spec/dummy/public/500.html +0 -26
  197. data/spec/dummy/public/favicon.ico +0 -0
  198. data/spec/dummy/script/rails +0 -6
  199. data/spec/factories.rb +0 -28
  200. data/spec/generators/application_owner_generator_spec.rb +0 -22
  201. data/spec/generators/install_generator_spec.rb +0 -31
  202. data/spec/generators/migration_generator_spec.rb +0 -20
  203. data/spec/generators/templates/routes.rb +0 -3
  204. data/spec/generators/views_generator_spec.rb +0 -27
  205. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -24
  206. data/spec/lib/config_spec.rb +0 -334
  207. data/spec/lib/doorkeeper_spec.rb +0 -150
  208. data/spec/lib/models/expirable_spec.rb +0 -50
  209. data/spec/lib/models/revocable_spec.rb +0 -59
  210. data/spec/lib/models/scopes_spec.rb +0 -43
  211. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -41
  212. data/spec/lib/oauth/authorization_code_request_spec.rb +0 -80
  213. data/spec/lib/oauth/base_request_spec.rb +0 -160
  214. data/spec/lib/oauth/base_response_spec.rb +0 -45
  215. data/spec/lib/oauth/client/credentials_spec.rb +0 -88
  216. data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -44
  217. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -86
  218. data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -54
  219. data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -27
  220. data/spec/lib/oauth/client_credentials_request_spec.rb +0 -104
  221. data/spec/lib/oauth/client_spec.rb +0 -39
  222. data/spec/lib/oauth/code_request_spec.rb +0 -45
  223. data/spec/lib/oauth/code_response_spec.rb +0 -34
  224. data/spec/lib/oauth/error_response_spec.rb +0 -61
  225. data/spec/lib/oauth/error_spec.rb +0 -23
  226. data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -23
  227. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -64
  228. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -20
  229. data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -104
  230. data/spec/lib/oauth/invalid_token_response_spec.rb +0 -56
  231. data/spec/lib/oauth/password_access_token_request_spec.rb +0 -90
  232. data/spec/lib/oauth/pre_authorization_spec.rb +0 -155
  233. data/spec/lib/oauth/refresh_token_request_spec.rb +0 -154
  234. data/spec/lib/oauth/scopes_spec.rb +0 -122
  235. data/spec/lib/oauth/token_request_spec.rb +0 -98
  236. data/spec/lib/oauth/token_response_spec.rb +0 -85
  237. data/spec/lib/oauth/token_spec.rb +0 -116
  238. data/spec/lib/request/strategy_spec.rb +0 -53
  239. data/spec/lib/server_spec.rb +0 -49
  240. data/spec/models/doorkeeper/access_grant_spec.rb +0 -36
  241. data/spec/models/doorkeeper/access_token_spec.rb +0 -394
  242. data/spec/models/doorkeeper/application_spec.rb +0 -179
  243. data/spec/requests/applications/applications_request_spec.rb +0 -94
  244. data/spec/requests/applications/authorized_applications_spec.rb +0 -30
  245. data/spec/requests/endpoints/authorization_spec.rb +0 -71
  246. data/spec/requests/endpoints/token_spec.rb +0 -64
  247. data/spec/requests/flows/authorization_code_errors_spec.rb +0 -76
  248. data/spec/requests/flows/authorization_code_spec.rb +0 -148
  249. data/spec/requests/flows/client_credentials_spec.rb +0 -58
  250. data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -32
  251. data/spec/requests/flows/implicit_grant_spec.rb +0 -61
  252. data/spec/requests/flows/password_spec.rb +0 -115
  253. data/spec/requests/flows/refresh_token_spec.rb +0 -174
  254. data/spec/requests/flows/revoke_token_spec.rb +0 -157
  255. data/spec/requests/flows/skip_authorization_spec.rb +0 -59
  256. data/spec/requests/protected_resources/metal_spec.rb +0 -14
  257. data/spec/requests/protected_resources/private_api_spec.rb +0 -81
  258. data/spec/routing/custom_controller_routes_spec.rb +0 -71
  259. data/spec/routing/default_routes_spec.rb +0 -35
  260. data/spec/routing/scoped_routes_spec.rb +0 -31
  261. data/spec/spec_helper.rb +0 -4
  262. data/spec/spec_helper_integration.rb +0 -63
  263. data/spec/support/dependencies/factory_girl.rb +0 -2
  264. data/spec/support/helpers/access_token_request_helper.rb +0 -11
  265. data/spec/support/helpers/authorization_request_helper.rb +0 -41
  266. data/spec/support/helpers/config_helper.rb +0 -9
  267. data/spec/support/helpers/model_helper.rb +0 -67
  268. data/spec/support/helpers/request_spec_helper.rb +0 -84
  269. data/spec/support/helpers/url_helper.rb +0 -55
  270. data/spec/support/http_method_shim.rb +0 -38
  271. data/spec/support/orm/active_record.rb +0 -3
  272. data/spec/support/shared/controllers_shared_context.rb +0 -69
  273. data/spec/support/shared/models_shared_examples.rb +0 -52
  274. data/spec/validators/redirect_uri_validator_spec.rb +0 -78
@@ -1,34 +0,0 @@
1
- require 'uri'
2
-
3
- class RedirectUriValidator < ActiveModel::EachValidator
4
- def self.native_redirect_uri
5
- Doorkeeper.configuration.native_redirect_uri
6
- end
7
-
8
- def validate_each(record, attribute, value)
9
- if value.blank?
10
- record.errors.add(attribute, :blank)
11
- else
12
- value.split.each do |val|
13
- uri = ::URI.parse(val)
14
- return if native_redirect_uri?(uri)
15
- record.errors.add(attribute, :fragment_present) unless uri.fragment.nil?
16
- record.errors.add(attribute, :relative_uri) if uri.scheme.nil? || uri.host.nil?
17
- record.errors.add(attribute, :secured_uri) if invalid_ssl_uri?(uri)
18
- end
19
- end
20
- rescue URI::InvalidURIError
21
- record.errors.add(attribute, :invalid_uri)
22
- end
23
-
24
- private
25
-
26
- def native_redirect_uri?(uri)
27
- self.class.native_redirect_uri.present? && uri.to_s == self.class.native_redirect_uri.to_s
28
- end
29
-
30
- def invalid_ssl_uri?(uri)
31
- forces_ssl = Doorkeeper.configuration.force_ssl_in_redirect_uri
32
- forces_ssl && uri.try(:scheme) == 'http'
33
- end
34
- end
data/doorkeeper.gemspec DELETED
@@ -1,29 +0,0 @@
1
- $LOAD_PATH.push File.expand_path("../lib", __FILE__)
2
-
3
- require "doorkeeper/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "doorkeeper"
7
- s.version = Doorkeeper::VERSION
8
- s.authors = ["Felipe Elias Philipp", "Tute Costa", "Jon Moss"]
9
- s.email = %w(me@jonathanmoss.me)
10
- s.homepage = "https://github.com/doorkeeper-gem/doorkeeper"
11
- s.summary = "OAuth 2 provider for Rails and Grape"
12
- s.description = "Doorkeeper is an OAuth 2 provider for Rails and Grape."
13
- s.license = 'MIT'
14
-
15
- s.files = `git ls-files`.split("\n")
16
- s.test_files = `git ls-files -- spec/*`.split("\n")
17
- s.require_paths = ["lib"]
18
-
19
- s.add_dependency "railties", ">= 4.2"
20
- s.required_ruby_version = ">= 2.1"
21
-
22
- s.add_development_dependency "capybara"
23
- s.add_development_dependency "coveralls"
24
- s.add_development_dependency "database_cleaner", "~> 1.5.3"
25
- s.add_development_dependency "factory_girl", "~> 4.7.0"
26
- s.add_development_dependency "generator_spec", "~> 0.9.3"
27
- s.add_development_dependency "rake", ">= 11.3.0"
28
- s.add_development_dependency "rspec-rails"
29
- end
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", "~> 4.2.0"
6
- gem "appraisal"
7
- gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
8
- gem "sqlite3", :platform => [:ruby, :mswin, :mingw, :x64_mingw]
9
- gem "tzinfo-data", :platforms => [:mingw, :mswin, :x64_mingw]
10
-
11
- gemspec :path => "../"
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", "~> 5.0.0"
6
- gem "appraisal"
7
- gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
8
- gem "sqlite3", :platform => [:ruby, :mswin, :mingw, :x64_mingw]
9
- gem "tzinfo-data", :platforms => [:mingw, :mswin, :x64_mingw]
10
- gem "rspec-rails", "~> 3.5"
11
-
12
- gemspec :path => "../"
@@ -1,13 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", :github => "rails/rails"
6
- gem "appraisal"
7
- gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
8
- gem "sqlite3", :platform => [:ruby, :mswin, :mingw, :x64_mingw]
9
- gem "tzinfo-data", :platforms => [:mingw, :mswin, :x64_mingw]
10
- gem "arel", :github => "rails/arel"
11
- gem "rspec-rails", "~> 3.5"
12
-
13
- gemspec :path => "../"
@@ -1,45 +0,0 @@
1
- require 'doorkeeper/validations'
2
- require 'doorkeeper/oauth/scopes'
3
- require 'doorkeeper/oauth/helpers/scope_checker'
4
-
5
- module Doorkeeper
6
- module OAuth
7
- class ClientCredentialsRequest < BaseRequest
8
- class Validation
9
- include Validations
10
- include OAuth::Helpers
11
-
12
- validate :client, error: :invalid_client
13
- validate :scopes, error: :invalid_scope
14
-
15
- def initialize(server, request)
16
- @server, @request, @client = server, request, request.client
17
-
18
- validate
19
- end
20
-
21
- private
22
-
23
- def validate_client
24
- @client.present?
25
- end
26
-
27
- def validate_scopes
28
- return true unless @request.scopes.present?
29
-
30
- application_scopes = if @client.present?
31
- @client.application.scopes
32
- else
33
- ''
34
- end
35
-
36
- ScopeChecker.valid?(
37
- @request.scopes.to_s,
38
- @server.scopes,
39
- application_scopes
40
- )
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,7 +0,0 @@
1
- class AddOwnerToApplication < ActiveRecord::Migration
2
- def change
3
- add_column :oauth_applications, :owner_id, :integer, null: true
4
- add_column :oauth_applications, :owner_type, :string, null: true
5
- add_index :oauth_applications, [:owner_id, :owner_type]
6
- end
7
- end
@@ -1,11 +0,0 @@
1
- class AddPreviousRefreshTokenToAccessTokens < ActiveRecord::Migration
2
- def change
3
- add_column(
4
- :oauth_access_tokens,
5
- :previous_refresh_token,
6
- :string,
7
- default: "",
8
- null: false
9
- )
10
- end
11
- end
@@ -1,68 +0,0 @@
1
- class CreateDoorkeeperTables < ActiveRecord::Migration
2
- def change
3
- create_table :oauth_applications do |t|
4
- t.string :name, null: false
5
- t.string :uid, null: false
6
- t.string :secret, null: false
7
- t.text :redirect_uri, null: false
8
- t.string :scopes, null: false, default: ''
9
- t.timestamps null: false
10
- end
11
-
12
- add_index :oauth_applications, :uid, unique: true
13
-
14
- create_table :oauth_access_grants do |t|
15
- t.integer :resource_owner_id, null: false
16
- t.references :application, null: false
17
- t.string :token, null: false
18
- t.integer :expires_in, null: false
19
- t.text :redirect_uri, null: false
20
- t.datetime :created_at, null: false
21
- t.datetime :revoked_at
22
- t.string :scopes
23
- end
24
-
25
- add_index :oauth_access_grants, :token, unique: true
26
- add_foreign_key(
27
- :oauth_access_grants,
28
- :oauth_applications,
29
- column: :application_id
30
- )
31
-
32
- create_table :oauth_access_tokens do |t|
33
- t.integer :resource_owner_id
34
- t.references :application
35
-
36
- # If you use a custom token generator you may need to change this column
37
- # from string to text, so that it accepts tokens larger than 255
38
- # characters. More info on custom token generators in:
39
- # https://github.com/doorkeeper-gem/doorkeeper/tree/v3.0.0.rc1#custom-access-token-generator
40
- #
41
- # t.text :token, null: false
42
- t.string :token, null: false
43
-
44
- t.string :refresh_token
45
- t.integer :expires_in
46
- t.datetime :revoked_at
47
- t.datetime :created_at, null: false
48
- t.string :scopes
49
-
50
- # If there is a previous_refresh_token column,
51
- # refresh tokens will be revoked after a related access token is used.
52
- # If there is no previous_refresh_token column,
53
- # previous tokens are revoked as soon as a new access token is created.
54
- # Comment out this line if you'd rather have refresh tokens
55
- # instantly revoked.
56
- t.string :previous_refresh_token, null: false, default: ""
57
- end
58
-
59
- add_index :oauth_access_tokens, :token, unique: true
60
- add_index :oauth_access_tokens, :resource_owner_id
61
- add_index :oauth_access_tokens, :refresh_token, unique: true
62
- add_foreign_key(
63
- :oauth_access_tokens,
64
- :oauth_applications,
65
- column: :application_id
66
- )
67
- end
68
- end
@@ -1,10 +0,0 @@
1
- require "spec_helper_integration"
2
-
3
- describe Doorkeeper::ApplicationMetalController do
4
- it "lazy run hooks" do
5
- i = 0
6
- ActiveSupport.on_load(:doorkeeper_metal_controller) { i += 1 }
7
-
8
- expect(i).to eq 1
9
- end
10
- end
@@ -1,58 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- module Doorkeeper
4
- describe ApplicationsController do
5
- context 'when admin is not authenticated' do
6
- before do
7
- allow(Doorkeeper.configuration).to receive(:authenticate_admin).and_return(proc do
8
- redirect_to main_app.root_url
9
- end)
10
- end
11
-
12
- it 'redirects as set in Doorkeeper.authenticate_admin' do
13
- get :index
14
- expect(response).to redirect_to(controller.main_app.root_url)
15
- end
16
-
17
- it 'does not create application' do
18
- expect do
19
- post :create, doorkeeper_application: {
20
- name: 'Example',
21
- redirect_uri: 'https://example.com' }
22
- end.to_not change { Doorkeeper::Application.count }
23
- end
24
- end
25
-
26
- context 'when admin is authenticated' do
27
- before do
28
- allow(Doorkeeper.configuration).to receive(:authenticate_admin).and_return(->(arg) { true })
29
- end
30
-
31
- it 'creates application' do
32
- expect do
33
- post :create, doorkeeper_application: {
34
- name: 'Example',
35
- redirect_uri: 'https://example.com' }
36
- end.to change { Doorkeeper::Application.count }.by(1)
37
- expect(response).to be_redirect
38
- end
39
-
40
- it 'does not allow mass assignment of uid or secret' do
41
- application = FactoryGirl.create(:application)
42
- put :update, id: application.id, doorkeeper_application: {
43
- uid: '1A2B3C4D',
44
- secret: '1A2B3C4D' }
45
-
46
- expect(application.reload.uid).not_to eq '1A2B3C4D'
47
- end
48
-
49
- it 'updates application' do
50
- application = FactoryGirl.create(:application)
51
- put :update, id: application.id, doorkeeper_application: {
52
- name: 'Example',
53
- redirect_uri: 'https://example.com' }
54
- expect(application.reload.name).to eq 'Example'
55
- end
56
- end
57
- end
58
- end
@@ -1,218 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe Doorkeeper::AuthorizationsController, 'implicit grant flow' do
4
- include AuthorizationRequestHelper
5
-
6
- if Rails::VERSION::MAJOR == 5
7
- class ActionDispatch::TestResponse
8
- def query_params
9
- @_query_params ||= begin
10
- fragment = URI.parse(location).fragment
11
- Rack::Utils.parse_query(fragment)
12
- end
13
- end
14
- end
15
- else
16
- class ActionController::TestResponse
17
- def query_params
18
- @_query_params ||= begin
19
- fragment = URI.parse(location).fragment
20
- Rack::Utils.parse_query(fragment)
21
- end
22
- end
23
- end
24
- end
25
-
26
- def translated_error_message(key)
27
- I18n.translate key, scope: [:doorkeeper, :errors, :messages]
28
- end
29
-
30
- let(:client) { FactoryGirl.create :application }
31
- let(:user) { User.create!(name: 'Joe', password: 'sekret') }
32
- let(:access_token) { FactoryGirl.build :access_token, resource_owner_id: user.id, application_id: client.id }
33
-
34
- before do
35
- allow(Doorkeeper.configuration).to receive(:grant_flows).and_return(["implicit"])
36
- allow(controller).to receive(:current_resource_owner).and_return(user)
37
- end
38
-
39
- describe 'POST #create' do
40
- before do
41
- post :create, client_id: client.uid, response_type: 'token', redirect_uri: client.redirect_uri
42
- end
43
-
44
- it 'redirects after authorization' do
45
- expect(response).to be_redirect
46
- end
47
-
48
- it 'redirects to client redirect uri' do
49
- expect(response.location).to match(%r{^#{client.redirect_uri}})
50
- end
51
-
52
- it 'includes access token in fragment' do
53
- expect(response.query_params['access_token']).to eq(Doorkeeper::AccessToken.first.token)
54
- end
55
-
56
- it 'includes token type in fragment' do
57
- expect(response.query_params['token_type']).to eq('bearer')
58
- end
59
-
60
- it 'includes token expiration in fragment' do
61
- expect(response.query_params['expires_in'].to_i).to eq(2.hours.to_i)
62
- end
63
-
64
- it 'issues the token for the current client' do
65
- expect(Doorkeeper::AccessToken.first.application_id).to eq(client.id)
66
- end
67
-
68
- it 'issues the token for the current resource owner' do
69
- expect(Doorkeeper::AccessToken.first.resource_owner_id).to eq(user.id)
70
- end
71
- end
72
-
73
- describe 'POST #create with errors' do
74
- before do
75
- default_scopes_exist :public
76
- post :create, client_id: client.uid, response_type: 'token', scope: 'invalid', redirect_uri: client.redirect_uri
77
- end
78
-
79
- it 'redirects after authorization' do
80
- expect(response).to be_redirect
81
- end
82
-
83
- it 'redirects to client redirect uri' do
84
- expect(response.location).to match(%r{^#{client.redirect_uri}})
85
- end
86
-
87
- it 'does not include access token in fragment' do
88
- expect(response.query_params['access_token']).to be_nil
89
- end
90
-
91
- it 'includes error in fragment' do
92
- expect(response.query_params['error']).to eq('invalid_scope')
93
- end
94
-
95
- it 'includes error description in fragment' do
96
- expect(response.query_params['error_description']).to eq(translated_error_message(:invalid_scope))
97
- end
98
-
99
- it 'does not issue any access token' do
100
- expect(Doorkeeper::AccessToken.all).to be_empty
101
- end
102
- end
103
-
104
- describe 'POST #create with application already authorized' do
105
- before do
106
- allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
107
-
108
- access_token.save!
109
- post :create, client_id: client.uid, response_type: 'token', redirect_uri: client.redirect_uri
110
- end
111
-
112
- it 'returns the existing access token in a fragment' do
113
- expect(response.query_params['access_token']).to eq(access_token.token)
114
- end
115
-
116
- it 'does not creates a new access token' do
117
- expect(Doorkeeper::AccessToken.count).to eq(1)
118
- end
119
- end
120
-
121
- describe 'GET #new token request with native url and skip_authorization true' do
122
- before do
123
- allow(Doorkeeper.configuration).to receive(:skip_authorization).and_return(proc do
124
- true
125
- end)
126
- client.update_attribute :redirect_uri, 'urn:ietf:wg:oauth:2.0:oob'
127
- get :new, client_id: client.uid, response_type: 'token', redirect_uri: client.redirect_uri
128
- end
129
-
130
- it 'should redirect immediately' do
131
- expect(response).to be_redirect
132
- expect(response.location).to match(/oauth\/token\/info\?access_token=/)
133
- end
134
-
135
- it 'should not issue a grant' do
136
- expect(Doorkeeper::AccessGrant.count).to be 0
137
- end
138
-
139
- it 'should issue a token' do
140
- expect(Doorkeeper::AccessToken.count).to be 1
141
- end
142
- end
143
-
144
- describe 'GET #new code request with native url and skip_authorization true' do
145
- before do
146
- allow(Doorkeeper.configuration).to receive(:grant_flows).
147
- and_return(%w(authorization_code))
148
- allow(Doorkeeper.configuration).to receive(:skip_authorization).and_return(proc do
149
- true
150
- end)
151
- client.update_attribute :redirect_uri, 'urn:ietf:wg:oauth:2.0:oob'
152
- get :new, client_id: client.uid, response_type: 'code', redirect_uri: client.redirect_uri
153
- end
154
-
155
- it 'should redirect immediately' do
156
- expect(response).to be_redirect
157
- expect(response.location).to match(/oauth\/authorize\//)
158
- end
159
-
160
- it 'should issue a grant' do
161
- expect(Doorkeeper::AccessGrant.count).to be 1
162
- end
163
-
164
- it 'should not issue a token' do
165
- expect(Doorkeeper::AccessToken.count).to be 0
166
- end
167
- end
168
-
169
- describe 'GET #new with skip_authorization true' do
170
- before do
171
- allow(Doorkeeper.configuration).to receive(:skip_authorization).and_return(proc do
172
- true
173
- end)
174
- get :new, client_id: client.uid, response_type: 'token', redirect_uri: client.redirect_uri
175
- end
176
-
177
- it 'should redirect immediately' do
178
- expect(response).to be_redirect
179
- expect(response.location).to match(%r{^#{client.redirect_uri}})
180
- end
181
-
182
- it 'should issue a token' do
183
- expect(Doorkeeper::AccessToken.count).to be 1
184
- end
185
-
186
- it 'includes token type in fragment' do
187
- expect(response.query_params['token_type']).to eq('bearer')
188
- end
189
-
190
- it 'includes token expiration in fragment' do
191
- expect(response.query_params['expires_in'].to_i).to eq(2.hours.to_i)
192
- end
193
-
194
- it 'issues the token for the current client' do
195
- expect(Doorkeeper::AccessToken.first.application_id).to eq(client.id)
196
- end
197
-
198
- it 'issues the token for the current resource owner' do
199
- expect(Doorkeeper::AccessToken.first.resource_owner_id).to eq(user.id)
200
- end
201
- end
202
-
203
- describe 'GET #new with errors' do
204
- before do
205
- default_scopes_exist :public
206
- get :new, an_invalid: 'request'
207
- end
208
-
209
- it 'does not redirect' do
210
- expect(response).to_not be_redirect
211
- end
212
-
213
- it 'does not issue any token' do
214
- expect(Doorkeeper::AccessGrant.count).to eq 0
215
- expect(Doorkeeper::AccessToken.count).to eq 0
216
- end
217
- end
218
- end