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,155 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- module Doorkeeper::OAuth
4
- describe BaseRequest do
5
- let(:access_token) do
6
- double :access_token,
7
- token: "some-token",
8
- expires_in: "3600",
9
- expires_in_seconds: "300",
10
- scopes_string: "two scopes",
11
- refresh_token: "some-refresh-token",
12
- token_type: "bearer",
13
- created_at: 0
14
- end
15
-
16
- let(:client) { double :client, id: '1' }
17
-
18
- let(:scopes_array) { %w[public write] }
19
-
20
- let(:server) do
21
- double :server,
22
- access_token_expires_in: 100,
23
- custom_access_token_expires_in: ->(_) { nil },
24
- refresh_token_enabled?: false
25
- end
26
-
27
- subject do
28
- BaseRequest.new
29
- end
30
-
31
- describe "#authorize" do
32
- before do
33
- allow(subject).to receive(:access_token).and_return(access_token)
34
- end
35
-
36
- it "validates itself" do
37
- expect(subject).to receive(:validate).once
38
- subject.authorize
39
- end
40
-
41
- context "valid" do
42
- before do
43
- allow(subject).to receive(:valid?).and_return(true)
44
- end
45
-
46
- it "calls callback methods" do
47
- expect(subject).to receive(:before_successful_response).once
48
- expect(subject).to receive(:after_successful_response).once
49
- subject.authorize
50
- end
51
-
52
- it "returns a TokenResponse object" do
53
- result = subject.authorize
54
-
55
- expect(result).to be_an_instance_of(TokenResponse)
56
- expect(result.body).to eq(
57
- TokenResponse.new(access_token).body
58
- )
59
- end
60
- end
61
-
62
- context "invalid" do
63
- before do
64
- allow(subject).to receive(:valid?).and_return(false)
65
- allow(subject).to receive(:error).and_return("server_error")
66
- allow(subject).to receive(:state).and_return("hello")
67
- end
68
-
69
- it "returns an ErrorResponse object" do
70
- error_description = I18n.translate(
71
- "server_error",
72
- scope: %i[doorkeeper errors messages]
73
- )
74
-
75
- result = subject.authorize
76
-
77
- expect(result).to be_an_instance_of(ErrorResponse)
78
-
79
- expect(result.body).to eq(
80
- error: "server_error",
81
- error_description: error_description,
82
- state: "hello"
83
- )
84
- end
85
- end
86
- end
87
-
88
- describe "#default_scopes" do
89
- it "delegates to the server" do
90
- expect(subject).to receive(:server).and_return(server).once
91
- expect(server).to receive(:default_scopes).once
92
-
93
- subject.default_scopes
94
- end
95
- end
96
-
97
- describe "#find_or_create_access_token" do
98
- it "returns an instance of AccessToken" do
99
- result = subject.find_or_create_access_token(
100
- client,
101
- "1",
102
- "public",
103
- server
104
- )
105
-
106
- expect(result).to be_an_instance_of(Doorkeeper::AccessToken)
107
- end
108
- end
109
-
110
- describe "#scopes" do
111
- context "@original_scopes is present" do
112
- before do
113
- subject.instance_variable_set(:@original_scopes, "public write")
114
- end
115
-
116
- it "returns array of @original_scopes" do
117
- result = subject.scopes
118
-
119
- expect(result).to eq(scopes_array)
120
- end
121
- end
122
-
123
- context "@original_scopes is not present" do
124
- before do
125
- subject.instance_variable_set(:@original_scopes, "")
126
- end
127
-
128
- it "calls #default_scopes" do
129
- allow(subject).to receive(:server).and_return(server).once
130
- allow(server).to receive(:default_scopes).and_return(scopes_array).once
131
-
132
- result = subject.scopes
133
-
134
- expect(result).to eq(scopes_array)
135
- end
136
- end
137
- end
138
-
139
- describe "#valid?" do
140
- context "error is nil" do
141
- it "returns true" do
142
- allow(subject).to receive(:error).and_return(nil).once
143
- expect(subject.valid?).to eq(true)
144
- end
145
- end
146
-
147
- context "error is not nil" do
148
- it "returns false" do
149
- allow(subject).to receive(:error).and_return(Object.new).once
150
- expect(subject.valid?).to eq(false)
151
- end
152
- end
153
- end
154
- end
155
- end
@@ -1,45 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- module Doorkeeper::OAuth
4
- describe BaseResponse do
5
- subject do
6
- BaseResponse.new
7
- end
8
-
9
- describe "#body" do
10
- it "returns an empty Hash" do
11
- expect(subject.body).to eq({})
12
- end
13
- end
14
-
15
- describe "#description" do
16
- it "returns an empty String" do
17
- expect(subject.description).to eq("")
18
- end
19
- end
20
-
21
- describe "#headers" do
22
- it "returns an empty Hash" do
23
- expect(subject.headers).to eq({})
24
- end
25
- end
26
-
27
- describe "#redirectable?" do
28
- it "returns false" do
29
- expect(subject.redirectable?).to eq(false)
30
- end
31
- end
32
-
33
- describe "#redirect_uri" do
34
- it "returns an empty String" do
35
- expect(subject.redirect_uri).to eq("")
36
- end
37
- end
38
-
39
- describe "#status" do
40
- it "returns :ok" do
41
- expect(subject.status).to eq(:ok)
42
- end
43
- end
44
- end
45
- end
@@ -1,90 +0,0 @@
1
- require 'spec_helper'
2
- require 'active_support/core_ext/string'
3
- require 'doorkeeper/oauth/client'
4
-
5
- class Doorkeeper::OAuth::Client
6
- describe Credentials do
7
- let(:client_id) { 'some-uid' }
8
- let(:client_secret) { 'some-secret' }
9
-
10
- it 'is blank when the uid in credentials is blank' do
11
- expect(Credentials.new(nil, nil)).to be_blank
12
- expect(Credentials.new(nil, 'something')).to be_blank
13
- expect(Credentials.new('something', nil)).to be_present
14
- expect(Credentials.new('something', 'something')).to be_present
15
- end
16
-
17
- describe :from_request do
18
- let(:request) { double.as_null_object }
19
-
20
- let(:method) do
21
- ->(_request) { return 'uid', 'secret' }
22
- end
23
-
24
- it 'accepts anything that responds to #call' do
25
- expect(method).to receive(:call).with(request)
26
- Credentials.from_request request, method
27
- end
28
-
29
- it 'delegates methods received as symbols to Credentials class' do
30
- expect(Credentials).to receive(:from_params).with(request)
31
- Credentials.from_request request, :from_params
32
- end
33
-
34
- it 'stops at the first credentials found' do
35
- not_called_method = double
36
- expect(not_called_method).not_to receive(:call)
37
- Credentials.from_request request, ->(_) {}, method, not_called_method
38
- end
39
-
40
- it 'returns new Credentials' do
41
- credentials = Credentials.from_request request, method
42
- expect(credentials).to be_a(Credentials)
43
- end
44
-
45
- it 'returns uid and secret from extractor method' do
46
- credentials = Credentials.from_request request, method
47
- expect(credentials.uid).to eq('uid')
48
- expect(credentials.secret).to eq('secret')
49
- end
50
- end
51
-
52
- describe :from_params do
53
- it 'returns credentials from parameters when Authorization header is not available' do
54
- request = double parameters: { client_id: client_id, client_secret: client_secret }
55
- uid, secret = Credentials.from_params(request)
56
-
57
- expect(uid).to eq('some-uid')
58
- expect(secret).to eq('some-secret')
59
- end
60
-
61
- it 'is blank when there are no credentials' do
62
- request = double parameters: {}
63
- uid, secret = Credentials.from_params(request)
64
-
65
- expect(uid).to be_blank
66
- expect(secret).to be_blank
67
- end
68
- end
69
-
70
- describe :from_basic do
71
- let(:credentials) { Base64.encode64("#{client_id}:#{client_secret}") }
72
-
73
- it 'decodes the credentials' do
74
- request = double authorization: "Basic #{credentials}"
75
- uid, secret = Credentials.from_basic(request)
76
-
77
- expect(uid).to eq('some-uid')
78
- expect(secret).to eq('some-secret')
79
- end
80
-
81
- it 'is blank if Authorization is not Basic' do
82
- request = double authorization: "#{credentials}"
83
- uid, secret = Credentials.from_basic(request)
84
-
85
- expect(uid).to be_blank
86
- expect(secret).to be_blank
87
- end
88
- end
89
- end
90
- end
@@ -1,44 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- class Doorkeeper::OAuth::ClientCredentialsRequest
4
- describe Creator do
5
- let(:client) { FactoryBot.create :application }
6
- let(:scopes) { Doorkeeper::OAuth::Scopes.from_string('public') }
7
-
8
- it 'creates a new token' do
9
- expect do
10
- subject.call(client, scopes)
11
- end.to change { Doorkeeper::AccessToken.count }.by(1)
12
- end
13
-
14
- context "when reuse_access_token is true" do
15
- it "returns the existing valid token" do
16
- allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
17
- existing_token = subject.call(client, scopes)
18
-
19
- result = subject.call(client, scopes)
20
-
21
- expect(Doorkeeper::AccessToken.count).to eq(1)
22
- expect(result).to eq(existing_token)
23
- end
24
- end
25
-
26
- context "when reuse_access_token is false" do
27
- it "returns a new token" do
28
- allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(false)
29
- existing_token = subject.call(client, scopes)
30
-
31
- result = subject.call(client, scopes)
32
-
33
- expect(Doorkeeper::AccessToken.count).to eq(2)
34
- expect(result).not_to eq(existing_token)
35
- end
36
- end
37
-
38
- it 'returns false if creation fails' do
39
- expect(Doorkeeper::AccessToken).to receive(:find_or_create_for).and_return(false)
40
- created = subject.call(client, scopes)
41
- expect(created).to be_falsey
42
- end
43
- end
44
- end
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
- require 'active_support/all'
3
- require 'doorkeeper/oauth/client_credentials/issuer'
4
-
5
- class Doorkeeper::OAuth::ClientCredentialsRequest
6
- describe Issuer do
7
- let(:creator) { double :acces_token_creator }
8
- let(:server) do
9
- double(
10
- :server,
11
- access_token_expires_in: 100,
12
- custom_access_token_expires_in: ->(_app) { nil }
13
- )
14
- end
15
- let(:validation) { double :validation, valid?: true }
16
-
17
- subject { Issuer.new(server, validation) }
18
-
19
- describe :create do
20
- let(:client) { double :client, id: 'some-id' }
21
- let(:scopes) { 'some scope' }
22
-
23
- it 'creates and sets the token' do
24
- expect(creator).to receive(:call).and_return('token')
25
- subject.create client, scopes, creator
26
-
27
- expect(subject.token).to eq('token')
28
- end
29
-
30
- it 'creates with correct token parameters' do
31
- expect(creator).to receive(:call).with(
32
- client,
33
- scopes,
34
- expires_in: 100,
35
- use_refresh_token: false
36
- )
37
-
38
- subject.create client, scopes, creator
39
- end
40
-
41
- it 'has error set to :server_error if creator fails' do
42
- expect(creator).to receive(:call).and_return(false)
43
- subject.create client, scopes, creator
44
-
45
- expect(subject.error).to eq(:server_error)
46
- end
47
-
48
- context 'when validation fails' do
49
- before do
50
- allow(validation).to receive(:valid?).and_return(false)
51
- allow(validation).to receive(:error).and_return(:validation_error)
52
- expect(creator).not_to receive(:create)
53
- end
54
-
55
- it 'has error set from validation' do
56
- subject.create client, scopes, creator
57
- expect(subject.error).to eq(:validation_error)
58
- end
59
-
60
- it 'returns false' do
61
- expect(subject.create(client, scopes, creator)).to be_falsey
62
- end
63
- end
64
-
65
- context 'with custom expirations' do
66
- let(:custom_ttl) { 1233 }
67
- let(:server) do
68
- double(
69
- :server,
70
- custom_access_token_expires_in: ->(_app) { custom_ttl }
71
- )
72
- end
73
-
74
- it 'creates with correct token parameters' do
75
- expect(creator).to receive(:call).with(
76
- client,
77
- scopes,
78
- expires_in: custom_ttl,
79
- use_refresh_token: false
80
- )
81
- subject.create client, scopes, creator
82
- end
83
- end
84
- end
85
- end
86
- end
@@ -1,54 +0,0 @@
1
- require 'spec_helper'
2
- require 'active_support/all'
3
- require 'doorkeeper/oauth/client_credentials/validation'
4
-
5
- class Doorkeeper::OAuth::ClientCredentialsRequest
6
- describe Validation do
7
- let(:server) { double :server, scopes: nil }
8
- let(:application) { double scopes: nil }
9
- let(:client) { double application: application }
10
- let(:request) { double :request, client: client, scopes: nil }
11
-
12
- subject { Validation.new(server, request) }
13
-
14
- it 'is valid with valid request' do
15
- expect(subject).to be_valid
16
- end
17
-
18
- it 'is invalid when client is not present' do
19
- allow(request).to receive(:client).and_return(nil)
20
- expect(subject).not_to be_valid
21
- end
22
-
23
- context 'with scopes' do
24
- it 'is invalid when scopes are not included in the server' do
25
- server_scopes = Doorkeeper::OAuth::Scopes.from_string 'email'
26
- allow(server).to receive(:scopes).and_return(server_scopes)
27
- allow(request).to receive(:scopes).and_return(
28
- Doorkeeper::OAuth::Scopes.from_string 'invalid')
29
- expect(subject).not_to be_valid
30
- end
31
-
32
- context 'with application scopes' do
33
- it 'is valid when scopes are included in the application' do
34
- application_scopes = Doorkeeper::OAuth::Scopes.from_string 'app'
35
- server_scopes = Doorkeeper::OAuth::Scopes.from_string 'email app'
36
- allow(application).to receive(:scopes).and_return(application_scopes)
37
- allow(server).to receive(:scopes).and_return(server_scopes)
38
- allow(request).to receive(:scopes).and_return(application_scopes)
39
- expect(subject).to be_valid
40
- end
41
-
42
- it 'is invalid when scopes are not included in the application' do
43
- application_scopes = Doorkeeper::OAuth::Scopes.from_string 'app'
44
- server_scopes = Doorkeeper::OAuth::Scopes.from_string 'email app'
45
- allow(application).to receive(:scopes).and_return(application_scopes)
46
- allow(server).to receive(:scopes).and_return(server_scopes)
47
- allow(request).to receive(:scopes).and_return(
48
- Doorkeeper::OAuth::Scopes.from_string 'email')
49
- expect(subject).not_to be_valid
50
- end
51
- end
52
- end
53
- end
54
- end