devise 4.3.0 → 4.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +205 -2
  3. data/MIT-LICENSE +2 -1
  4. data/README.md +214 -57
  5. data/app/controllers/devise/confirmations_controller.rb +3 -0
  6. data/app/controllers/devise/omniauth_callbacks_controller.rb +3 -1
  7. data/app/controllers/devise/passwords_controller.rb +5 -2
  8. data/app/controllers/devise/registrations_controller.rb +32 -12
  9. data/app/controllers/devise/sessions_controller.rb +4 -2
  10. data/app/controllers/devise/unlocks_controller.rb +3 -0
  11. data/app/controllers/devise_controller.rb +6 -3
  12. data/app/helpers/devise_helper.rb +23 -18
  13. data/app/mailers/devise/mailer.rb +7 -5
  14. data/app/views/devise/confirmations/new.html.erb +2 -2
  15. data/app/views/devise/passwords/edit.html.erb +3 -3
  16. data/app/views/devise/passwords/new.html.erb +2 -2
  17. data/app/views/devise/registrations/edit.html.erb +6 -6
  18. data/app/views/devise/registrations/new.html.erb +4 -4
  19. data/app/views/devise/sessions/new.html.erb +4 -4
  20. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  21. data/app/views/devise/shared/_links.html.erb +8 -8
  22. data/app/views/devise/unlocks/new.html.erb +2 -2
  23. data/config/locales/en.yml +3 -2
  24. data/lib/devise/controllers/helpers.rb +10 -8
  25. data/lib/devise/controllers/rememberable.rb +2 -0
  26. data/lib/devise/controllers/responder.rb +35 -0
  27. data/lib/devise/controllers/scoped_views.rb +2 -0
  28. data/lib/devise/controllers/sign_in_out.rb +14 -4
  29. data/lib/devise/controllers/store_location.rb +24 -6
  30. data/lib/devise/controllers/url_helpers.rb +3 -1
  31. data/lib/devise/delegator.rb +2 -0
  32. data/lib/devise/encryptor.rb +2 -0
  33. data/lib/devise/failure_app.rb +33 -7
  34. data/lib/devise/hooks/activatable.rb +2 -0
  35. data/lib/devise/hooks/csrf_cleaner.rb +8 -1
  36. data/lib/devise/hooks/forgetable.rb +2 -0
  37. data/lib/devise/hooks/lockable.rb +4 -5
  38. data/lib/devise/hooks/proxy.rb +2 -0
  39. data/lib/devise/hooks/rememberable.rb +2 -0
  40. data/lib/devise/hooks/timeoutable.rb +4 -2
  41. data/lib/devise/hooks/trackable.rb +2 -0
  42. data/lib/devise/mailers/helpers.rb +2 -0
  43. data/lib/devise/mapping.rb +3 -1
  44. data/lib/devise/models/authenticatable.rb +55 -50
  45. data/lib/devise/models/confirmable.rb +36 -40
  46. data/lib/devise/models/database_authenticatable.rb +57 -36
  47. data/lib/devise/models/lockable.rb +18 -4
  48. data/lib/devise/models/omniauthable.rb +4 -2
  49. data/lib/devise/models/recoverable.rb +10 -19
  50. data/lib/devise/models/registerable.rb +4 -0
  51. data/lib/devise/models/rememberable.rb +5 -3
  52. data/lib/devise/models/timeoutable.rb +3 -1
  53. data/lib/devise/models/trackable.rb +15 -1
  54. data/lib/devise/models/validatable.rb +7 -10
  55. data/lib/devise/models.rb +3 -0
  56. data/lib/devise/modules.rb +2 -0
  57. data/lib/devise/omniauth/config.rb +2 -0
  58. data/lib/devise/omniauth/url_helpers.rb +2 -0
  59. data/lib/devise/omniauth.rb +4 -5
  60. data/lib/devise/orm/active_record.rb +2 -0
  61. data/lib/devise/orm/mongoid.rb +2 -0
  62. data/lib/devise/orm.rb +71 -0
  63. data/lib/devise/parameter_filter.rb +4 -0
  64. data/lib/devise/parameter_sanitizer.rb +15 -1
  65. data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
  66. data/lib/devise/rails/routes.rb +8 -6
  67. data/lib/devise/rails/warden_compat.rb +2 -0
  68. data/lib/devise/rails.rb +3 -5
  69. data/lib/devise/secret_key_finder.rb +27 -0
  70. data/lib/devise/strategies/authenticatable.rb +3 -1
  71. data/lib/devise/strategies/base.rb +2 -0
  72. data/lib/devise/strategies/database_authenticatable.rb +8 -1
  73. data/lib/devise/strategies/rememberable.rb +2 -0
  74. data/lib/devise/test/controller_helpers.rb +6 -1
  75. data/lib/devise/test/integration_helpers.rb +3 -1
  76. data/lib/devise/test_helpers.rb +2 -0
  77. data/lib/devise/time_inflector.rb +2 -0
  78. data/lib/devise/token_generator.rb +2 -0
  79. data/lib/devise/version.rb +3 -1
  80. data/lib/devise.rb +38 -12
  81. data/lib/generators/active_record/devise_generator.rb +40 -12
  82. data/lib/generators/active_record/templates/migration.rb +3 -1
  83. data/lib/generators/active_record/templates/migration_existing.rb +2 -0
  84. data/lib/generators/devise/controllers_generator.rb +3 -1
  85. data/lib/generators/devise/devise_generator.rb +5 -3
  86. data/lib/generators/devise/install_generator.rb +3 -5
  87. data/lib/generators/devise/orm_helpers.rb +9 -3
  88. data/lib/generators/devise/views_generator.rb +8 -9
  89. data/lib/generators/mongoid/devise_generator.rb +7 -5
  90. data/lib/generators/templates/README +9 -1
  91. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  92. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +3 -1
  93. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  94. data/lib/generators/templates/controllers/registrations_controller.rb +2 -0
  95. data/lib/generators/templates/controllers/sessions_controller.rb +2 -0
  96. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  97. data/lib/generators/templates/devise.rb +43 -7
  98. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
  99. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +10 -2
  100. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +4 -1
  101. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +12 -4
  102. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +11 -3
  103. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +7 -2
  104. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +4 -1
  105. metadata +24 -307
  106. data/.gitignore +0 -10
  107. data/.travis.yml +0 -58
  108. data/.yardopts +0 -9
  109. data/CODE_OF_CONDUCT.md +0 -22
  110. data/CONTRIBUTING.md +0 -79
  111. data/Gemfile +0 -40
  112. data/Gemfile.lock +0 -194
  113. data/Rakefile +0 -36
  114. data/bin/test +0 -13
  115. data/devise.gemspec +0 -26
  116. data/devise.png +0 -0
  117. data/gemfiles/Gemfile.rails-4.1-stable +0 -30
  118. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -171
  119. data/gemfiles/Gemfile.rails-4.2-stable +0 -30
  120. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -192
  121. data/gemfiles/Gemfile.rails-5.0-stable +0 -34
  122. data/gemfiles/Gemfile.rails-5.0-stable.lock +0 -193
  123. data/guides/bug_report_templates/integration_test.rb +0 -104
  124. data/test/controllers/custom_registrations_controller_test.rb +0 -40
  125. data/test/controllers/custom_strategy_test.rb +0 -64
  126. data/test/controllers/helper_methods_test.rb +0 -22
  127. data/test/controllers/helpers_test.rb +0 -316
  128. data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
  129. data/test/controllers/internal_helpers_test.rb +0 -127
  130. data/test/controllers/load_hooks_controller_test.rb +0 -19
  131. data/test/controllers/passwords_controller_test.rb +0 -32
  132. data/test/controllers/sessions_controller_test.rb +0 -106
  133. data/test/controllers/url_helpers_test.rb +0 -65
  134. data/test/delegator_test.rb +0 -19
  135. data/test/devise_test.rb +0 -107
  136. data/test/failure_app_test.rb +0 -338
  137. data/test/generators/active_record_generator_test.rb +0 -83
  138. data/test/generators/controllers_generator_test.rb +0 -48
  139. data/test/generators/devise_generator_test.rb +0 -39
  140. data/test/generators/install_generator_test.rb +0 -24
  141. data/test/generators/mongoid_generator_test.rb +0 -23
  142. data/test/generators/views_generator_test.rb +0 -103
  143. data/test/helpers/devise_helper_test.rb +0 -49
  144. data/test/integration/authenticatable_test.rb +0 -698
  145. data/test/integration/confirmable_test.rb +0 -324
  146. data/test/integration/database_authenticatable_test.rb +0 -95
  147. data/test/integration/http_authenticatable_test.rb +0 -106
  148. data/test/integration/lockable_test.rb +0 -240
  149. data/test/integration/mounted_engine_test.rb +0 -36
  150. data/test/integration/omniauthable_test.rb +0 -135
  151. data/test/integration/recoverable_test.rb +0 -347
  152. data/test/integration/registerable_test.rb +0 -363
  153. data/test/integration/rememberable_test.rb +0 -217
  154. data/test/integration/timeoutable_test.rb +0 -184
  155. data/test/integration/trackable_test.rb +0 -92
  156. data/test/mailers/confirmation_instructions_test.rb +0 -115
  157. data/test/mailers/email_changed_test.rb +0 -130
  158. data/test/mailers/mailer_test.rb +0 -18
  159. data/test/mailers/reset_password_instructions_test.rb +0 -96
  160. data/test/mailers/unlock_instructions_test.rb +0 -91
  161. data/test/mapping_test.rb +0 -134
  162. data/test/models/authenticatable_test.rb +0 -23
  163. data/test/models/confirmable_test.rb +0 -536
  164. data/test/models/database_authenticatable_test.rb +0 -281
  165. data/test/models/lockable_test.rb +0 -350
  166. data/test/models/omniauthable_test.rb +0 -7
  167. data/test/models/recoverable_test.rb +0 -261
  168. data/test/models/registerable_test.rb +0 -7
  169. data/test/models/rememberable_test.rb +0 -182
  170. data/test/models/serializable_test.rb +0 -54
  171. data/test/models/timeoutable_test.rb +0 -51
  172. data/test/models/trackable_test.rb +0 -41
  173. data/test/models/validatable_test.rb +0 -119
  174. data/test/models_test.rb +0 -153
  175. data/test/omniauth/config_test.rb +0 -59
  176. data/test/omniauth/url_helpers_test.rb +0 -51
  177. data/test/orm/active_record.rb +0 -17
  178. data/test/orm/mongoid.rb +0 -13
  179. data/test/parameter_sanitizer_test.rb +0 -75
  180. data/test/rails_app/Rakefile +0 -6
  181. data/test/rails_app/app/active_record/admin.rb +0 -6
  182. data/test/rails_app/app/active_record/shim.rb +0 -2
  183. data/test/rails_app/app/active_record/user.rb +0 -7
  184. data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
  185. data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
  186. data/test/rails_app/app/active_record/user_without_email.rb +0 -8
  187. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  188. data/test/rails_app/app/controllers/admins_controller.rb +0 -6
  189. data/test/rails_app/app/controllers/application_controller.rb +0 -11
  190. data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
  191. data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
  192. data/test/rails_app/app/controllers/home_controller.rb +0 -29
  193. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  194. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  195. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  196. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  197. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  198. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
  199. data/test/rails_app/app/mailers/users/mailer.rb +0 -3
  200. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
  201. data/test/rails_app/app/mongoid/admin.rb +0 -29
  202. data/test/rails_app/app/mongoid/shim.rb +0 -23
  203. data/test/rails_app/app/mongoid/user.rb +0 -39
  204. data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
  205. data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
  206. data/test/rails_app/app/mongoid/user_without_email.rb +0 -33
  207. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  208. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  209. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  210. data/test/rails_app/app/views/home/index.html.erb +0 -1
  211. data/test/rails_app/app/views/home/join.html.erb +0 -1
  212. data/test/rails_app/app/views/home/private.html.erb +0 -1
  213. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  214. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  215. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  216. data/test/rails_app/app/views/users/index.html.erb +0 -1
  217. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  218. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  219. data/test/rails_app/bin/bundle +0 -3
  220. data/test/rails_app/bin/rails +0 -4
  221. data/test/rails_app/bin/rake +0 -4
  222. data/test/rails_app/config/application.rb +0 -44
  223. data/test/rails_app/config/boot.rb +0 -20
  224. data/test/rails_app/config/database.yml +0 -18
  225. data/test/rails_app/config/environment.rb +0 -5
  226. data/test/rails_app/config/environments/development.rb +0 -30
  227. data/test/rails_app/config/environments/production.rb +0 -86
  228. data/test/rails_app/config/environments/test.rb +0 -45
  229. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  230. data/test/rails_app/config/initializers/devise.rb +0 -180
  231. data/test/rails_app/config/initializers/inflections.rb +0 -2
  232. data/test/rails_app/config/initializers/secret_token.rb +0 -3
  233. data/test/rails_app/config/initializers/session_store.rb +0 -1
  234. data/test/rails_app/config/routes.rb +0 -126
  235. data/test/rails_app/config.ru +0 -4
  236. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -75
  237. data/test/rails_app/db/schema.rb +0 -55
  238. data/test/rails_app/lib/shared_admin.rb +0 -21
  239. data/test/rails_app/lib/shared_user.rb +0 -30
  240. data/test/rails_app/lib/shared_user_without_email.rb +0 -26
  241. data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -13
  242. data/test/rails_app/public/404.html +0 -26
  243. data/test/rails_app/public/422.html +0 -26
  244. data/test/rails_app/public/500.html +0 -26
  245. data/test/rails_app/public/favicon.ico +0 -0
  246. data/test/rails_test.rb +0 -9
  247. data/test/routes_test.rb +0 -279
  248. data/test/support/action_controller/record_identifier.rb +0 -10
  249. data/test/support/assertions.rb +0 -28
  250. data/test/support/helpers.rb +0 -77
  251. data/test/support/http_method_compatibility.rb +0 -51
  252. data/test/support/integration.rb +0 -92
  253. data/test/support/locale/en.yml +0 -8
  254. data/test/support/mongoid.yml +0 -6
  255. data/test/support/webrat/integrations/rails.rb +0 -33
  256. data/test/test/controller_helpers_test.rb +0 -186
  257. data/test/test/integration_helpers_test.rb +0 -32
  258. data/test/test_helper.rb +0 -34
  259. data/test/test_models.rb +0 -33
@@ -1,698 +0,0 @@
1
- require 'test_helper'
2
-
3
- class AuthenticationSanityTest < Devise::IntegrationTest
4
- test 'home should be accessible without sign in' do
5
- visit '/'
6
- assert_response :success
7
- assert_template 'home/index'
8
- end
9
-
10
- test 'sign in as user should not authenticate admin scope' do
11
- sign_in_as_user
12
- assert warden.authenticated?(:user)
13
- refute warden.authenticated?(:admin)
14
- end
15
-
16
- test 'sign in as admin should not authenticate user scope' do
17
- sign_in_as_admin
18
- assert warden.authenticated?(:admin)
19
- refute warden.authenticated?(:user)
20
- end
21
-
22
- test 'sign in as both user and admin at same time' do
23
- sign_in_as_user
24
- sign_in_as_admin
25
- assert warden.authenticated?(:user)
26
- assert warden.authenticated?(:admin)
27
- end
28
-
29
- test 'sign out as user should not touch admin authentication if sign_out_all_scopes is false' do
30
- swap Devise, sign_out_all_scopes: false do
31
- sign_in_as_user
32
- sign_in_as_admin
33
- delete destroy_user_session_path
34
- refute warden.authenticated?(:user)
35
- assert warden.authenticated?(:admin)
36
- end
37
- end
38
-
39
- test 'sign out as admin should not touch user authentication if sign_out_all_scopes is false' do
40
- swap Devise, sign_out_all_scopes: false do
41
- sign_in_as_user
42
- sign_in_as_admin
43
-
44
- delete destroy_admin_session_path
45
- refute warden.authenticated?(:admin)
46
- assert warden.authenticated?(:user)
47
- end
48
- end
49
-
50
- test 'sign out as user should also sign out admin if sign_out_all_scopes is true' do
51
- swap Devise, sign_out_all_scopes: true do
52
- sign_in_as_user
53
- sign_in_as_admin
54
-
55
- delete destroy_user_session_path
56
- refute warden.authenticated?(:user)
57
- refute warden.authenticated?(:admin)
58
- end
59
- end
60
-
61
- test 'sign out as admin should also sign out user if sign_out_all_scopes is true' do
62
- swap Devise, sign_out_all_scopes: true do
63
- sign_in_as_user
64
- sign_in_as_admin
65
-
66
- delete destroy_admin_session_path
67
- refute warden.authenticated?(:admin)
68
- refute warden.authenticated?(:user)
69
- end
70
- end
71
-
72
- test 'not signed in as admin should not be able to access admins actions' do
73
- get admins_path
74
- assert_redirected_to new_admin_session_path
75
- refute warden.authenticated?(:admin)
76
- end
77
-
78
- test 'signed in as user should not be able to access admins actions' do
79
- sign_in_as_user
80
- assert warden.authenticated?(:user)
81
- refute warden.authenticated?(:admin)
82
-
83
- get admins_path
84
- assert_redirected_to new_admin_session_path
85
- end
86
-
87
- test 'signed in as admin should be able to access admin actions' do
88
- sign_in_as_admin
89
- assert warden.authenticated?(:admin)
90
- refute warden.authenticated?(:user)
91
-
92
- get admins_path
93
-
94
- assert_response :success
95
- assert_template 'admins/index'
96
- assert_contain 'Welcome Admin'
97
- end
98
-
99
- test 'authenticated admin should not be able to sign as admin again' do
100
- sign_in_as_admin
101
- get new_admin_session_path
102
-
103
- assert_response :redirect
104
- assert_redirected_to admin_root_path
105
- assert warden.authenticated?(:admin)
106
- end
107
-
108
- test 'authenticated admin should be able to sign out' do
109
- sign_in_as_admin
110
- assert warden.authenticated?(:admin)
111
-
112
- delete destroy_admin_session_path
113
- assert_response :redirect
114
- assert_redirected_to root_path
115
-
116
- get root_path
117
- assert_contain 'Signed out successfully'
118
- refute warden.authenticated?(:admin)
119
- end
120
-
121
- test 'unauthenticated admin set message on sign out' do
122
- delete destroy_admin_session_path
123
- assert_response :redirect
124
- assert_redirected_to root_path
125
-
126
- get root_path
127
- assert_contain 'Signed out successfully'
128
- end
129
-
130
- test 'scope uses custom failure app' do
131
- put "/en/accounts/management"
132
- assert_equal "Oops, not found", response.body
133
- assert_equal 404, response.status
134
- end
135
- end
136
-
137
- class AuthenticationRoutesRestrictions < Devise::IntegrationTest
138
- test 'not signed in should not be able to access private route (authenticate denied)' do
139
- get private_path
140
- assert_redirected_to new_admin_session_path
141
- refute warden.authenticated?(:admin)
142
- end
143
-
144
- test 'signed in as user should not be able to access private route restricted to admins (authenticate denied)' do
145
- sign_in_as_user
146
- assert warden.authenticated?(:user)
147
- refute warden.authenticated?(:admin)
148
- get private_path
149
- assert_redirected_to new_admin_session_path
150
- end
151
-
152
- test 'signed in as admin should be able to access private route restricted to admins (authenticate accepted)' do
153
- sign_in_as_admin
154
- assert warden.authenticated?(:admin)
155
- refute warden.authenticated?(:user)
156
-
157
- get private_path
158
-
159
- assert_response :success
160
- assert_template 'home/private'
161
- assert_contain 'Private!'
162
- end
163
-
164
- test 'signed in as inactive admin should not be able to access private/active route restricted to active admins (authenticate denied)' do
165
- sign_in_as_admin(active: false)
166
- assert warden.authenticated?(:admin)
167
- refute warden.authenticated?(:user)
168
-
169
- assert_raises ActionController::RoutingError do
170
- get "/private/active"
171
- end
172
- end
173
-
174
- test 'signed in as active admin should be able to access private/active route restricted to active admins (authenticate accepted)' do
175
- sign_in_as_admin(active: true)
176
- assert warden.authenticated?(:admin)
177
- refute warden.authenticated?(:user)
178
-
179
- get private_active_path
180
-
181
- assert_response :success
182
- assert_template 'home/private'
183
- assert_contain 'Private!'
184
- end
185
-
186
- test 'signed in as admin should get admin dashboard (authenticated accepted)' do
187
- sign_in_as_admin
188
- assert warden.authenticated?(:admin)
189
- refute warden.authenticated?(:user)
190
-
191
- get dashboard_path
192
-
193
- assert_response :success
194
- assert_template 'home/admin_dashboard'
195
- assert_contain 'Admin dashboard'
196
- end
197
-
198
- test 'signed in as user should get user dashboard (authenticated accepted)' do
199
- sign_in_as_user
200
- assert warden.authenticated?(:user)
201
- refute warden.authenticated?(:admin)
202
-
203
- get dashboard_path
204
-
205
- assert_response :success
206
- assert_template 'home/user_dashboard'
207
- assert_contain 'User dashboard'
208
- end
209
-
210
- test 'not signed in should get no dashboard (authenticated denied)' do
211
- assert_raises ActionController::RoutingError do
212
- get dashboard_path
213
- end
214
- end
215
-
216
- test 'signed in as inactive admin should not be able to access dashboard/active route restricted to active admins (authenticated denied)' do
217
- sign_in_as_admin(active: false)
218
- assert warden.authenticated?(:admin)
219
- refute warden.authenticated?(:user)
220
-
221
- assert_raises ActionController::RoutingError do
222
- get "/dashboard/active"
223
- end
224
- end
225
-
226
- test 'signed in as active admin should be able to access dashboard/active route restricted to active admins (authenticated accepted)' do
227
- sign_in_as_admin(active: true)
228
- assert warden.authenticated?(:admin)
229
- refute warden.authenticated?(:user)
230
-
231
- get dashboard_active_path
232
-
233
- assert_response :success
234
- assert_template 'home/admin_dashboard'
235
- assert_contain 'Admin dashboard'
236
- end
237
-
238
- test 'signed in user should not see unauthenticated page (unauthenticated denied)' do
239
- sign_in_as_user
240
- assert warden.authenticated?(:user)
241
- refute warden.authenticated?(:admin)
242
-
243
- assert_raises ActionController::RoutingError do
244
- get join_path
245
- end
246
- end
247
-
248
- test 'not signed in users should see unauthenticated page (unauthenticated accepted)' do
249
- get join_path
250
-
251
- assert_response :success
252
- assert_template 'home/join'
253
- assert_contain 'Join'
254
- end
255
- end
256
-
257
- class AuthenticationRedirectTest < Devise::IntegrationTest
258
- test 'redirect from warden shows sign in or sign up message' do
259
- get admins_path
260
-
261
- warden_path = new_admin_session_path
262
- assert_redirected_to warden_path
263
-
264
- get warden_path
265
- assert_contain 'You need to sign in or sign up before continuing.'
266
- end
267
-
268
- test 'redirect to default url if no other was configured' do
269
- sign_in_as_user
270
- assert_template 'home/index'
271
- assert_nil session[:"user_return_to"]
272
- end
273
-
274
- test 'redirect to requested url after sign in' do
275
- get users_path
276
- assert_redirected_to new_user_session_path
277
- assert_equal users_path, session[:"user_return_to"]
278
-
279
- follow_redirect!
280
- sign_in_as_user visit: false
281
-
282
- assert_current_url '/users'
283
- assert_nil session[:"user_return_to"]
284
- end
285
-
286
- test 'redirect to last requested url overwriting the stored return_to option' do
287
- get expire_user_path(create_user)
288
- assert_redirected_to new_user_session_path
289
- assert_equal expire_user_path(create_user), session[:"user_return_to"]
290
-
291
- get users_path
292
- assert_redirected_to new_user_session_path
293
- assert_equal users_path, session[:"user_return_to"]
294
-
295
- follow_redirect!
296
- sign_in_as_user visit: false
297
-
298
- assert_current_url '/users'
299
- assert_nil session[:"user_return_to"]
300
- end
301
-
302
- test 'xml http requests does not store urls for redirect' do
303
- get users_path, headers: { 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest' }
304
- assert_equal 401, response.status
305
- assert_nil session[:"user_return_to"]
306
- end
307
-
308
- test 'redirect to configured home path for a given scope after sign in' do
309
- sign_in_as_admin
310
- assert_equal "/admin_area/home", @request.path
311
- end
312
-
313
- test 'require_no_authentication should set the already_authenticated flash message' do
314
- sign_in_as_user
315
- visit new_user_session_path
316
- assert_equal flash[:alert], I18n.t("devise.failure.already_authenticated")
317
- end
318
- end
319
-
320
- class AuthenticationSessionTest < Devise::IntegrationTest
321
- test 'destroyed account is signed out' do
322
- sign_in_as_user
323
- get '/users'
324
-
325
- User.destroy_all
326
- get '/users'
327
- assert_redirected_to new_user_session_path
328
- end
329
-
330
- test 'refreshes _csrf_token' do
331
- ApplicationController.allow_forgery_protection = true
332
-
333
- begin
334
- get new_user_session_path
335
- token = request.session[:_csrf_token]
336
-
337
- sign_in_as_user
338
- assert_not_equal request.session[:_csrf_token], token
339
- ensure
340
- ApplicationController.allow_forgery_protection = false
341
- end
342
- end
343
-
344
- test 'allows session to be set for a given scope' do
345
- sign_in_as_user
346
- get '/users'
347
- assert_equal "Cart", @controller.user_session[:cart]
348
- end
349
-
350
- test 'session id is changed on sign in' do
351
- get '/users'
352
- session_id = request.session["session_id"]
353
-
354
- get '/users'
355
- assert_equal session_id, request.session["session_id"]
356
-
357
- sign_in_as_user
358
- assert_not_equal session_id, request.session["session_id"]
359
- end
360
- end
361
-
362
- class AuthenticationWithScopedViewsTest < Devise::IntegrationTest
363
- test 'renders the scoped view if turned on and view is available' do
364
- swap Devise, scoped_views: true do
365
- assert_raise Webrat::NotFoundError do
366
- sign_in_as_user
367
- end
368
- assert_match %r{Special user view}, response.body
369
- end
370
- end
371
-
372
- test 'renders the scoped view if turned on in an specific controller' do
373
- begin
374
- Devise::SessionsController.scoped_views = true
375
- assert_raise Webrat::NotFoundError do
376
- sign_in_as_user
377
- end
378
-
379
- assert_match %r{Special user view}, response.body
380
- assert !Devise::PasswordsController.scoped_views?
381
- ensure
382
- Devise::SessionsController.send :remove_instance_variable, :@scoped_views
383
- end
384
- end
385
-
386
- test 'does not render the scoped view if turned off' do
387
- swap Devise, scoped_views: false do
388
- assert_nothing_raised do
389
- sign_in_as_user
390
- end
391
- end
392
- end
393
-
394
- test 'does not render the scoped view if not available' do
395
- swap Devise, scoped_views: true do
396
- assert_nothing_raised do
397
- sign_in_as_admin
398
- end
399
- end
400
- end
401
- end
402
-
403
- class AuthenticationOthersTest < Devise::IntegrationTest
404
- test 'handles unverified requests gets rid of caches' do
405
- swap ApplicationController, allow_forgery_protection: true do
406
- post exhibit_user_url(1)
407
- refute warden.authenticated?(:user)
408
-
409
- sign_in_as_user
410
- assert warden.authenticated?(:user)
411
-
412
- post exhibit_user_url(1)
413
- refute warden.authenticated?(:user)
414
- assert_equal "User is not authenticated", response.body
415
- end
416
- end
417
-
418
- test 'uses the custom controller with the custom controller view' do
419
- get '/admin_area/sign_in'
420
- assert_contain 'Log in'
421
- assert_contain 'Welcome to "admins/sessions" controller!'
422
- assert_contain 'Welcome to "sessions/new" view!'
423
- end
424
-
425
- test 'render 404 on roles without routes' do
426
- assert_raise ActionController::RoutingError do
427
- get '/admin_area/password/new'
428
- end
429
- end
430
-
431
- test 'does not intercept Rails 401 responses' do
432
- get '/unauthenticated'
433
- assert_equal 401, response.status
434
- end
435
-
436
- test 'render 404 on roles without mapping' do
437
- assert_raise AbstractController::ActionNotFound do
438
- get '/sign_in'
439
- end
440
- end
441
-
442
- test 'sign in with script name' do
443
- assert_nothing_raised do
444
- get new_user_session_path, headers: { "SCRIPT_NAME" => "/omg" }
445
- fill_in "email", with: "user@test.com"
446
- end
447
- end
448
-
449
- test 'sign in stub in xml format' do
450
- get new_user_session_path(format: 'xml')
451
- assert_match '<?xml version="1.0" encoding="UTF-8"?>', response.body
452
- assert_match %r{<user>.*</user>}m, response.body
453
- assert_match '<email></email>', response.body
454
- assert_match '<password nil="true"', response.body
455
- end
456
-
457
- test 'sign in stub in json format' do
458
- get new_user_session_path(format: 'json')
459
- assert_match '{"user":{', response.body
460
- assert_match '"email":""', response.body
461
- assert_match '"password":null', response.body
462
- end
463
-
464
- test 'sign in stub in json with non attribute key' do
465
- swap Devise, authentication_keys: [:other_key] do
466
- get new_user_session_path(format: 'json')
467
- assert_match '{"user":{', response.body
468
- assert_match '"other_key":null', response.body
469
- assert_match '"password":null', response.body
470
- end
471
- end
472
-
473
- test 'uses the mapping from router' do
474
- sign_in_as_user visit: "/as/sign_in"
475
- assert warden.authenticated?(:user)
476
- refute warden.authenticated?(:admin)
477
- end
478
-
479
- test 'sign in with xml format returns xml response' do
480
- create_user
481
- post user_session_path(format: 'xml'), params: { user: {email: "user@test.com", password: '12345678'} }
482
- assert_response :success
483
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
484
- end
485
-
486
- test 'sign in with xml format is idempotent' do
487
- get new_user_session_path(format: 'xml')
488
- assert_response :success
489
-
490
- create_user
491
- post user_session_path(format: 'xml'), params: { user: {email: "user@test.com", password: '12345678'} }
492
- assert_response :success
493
-
494
- get new_user_session_path(format: 'xml')
495
- assert_response :success
496
-
497
- post user_session_path(format: 'xml'), params: { user: {email: "user@test.com", password: '12345678'} }
498
- assert_response :success
499
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
500
- end
501
-
502
- test 'sign out with html redirects' do
503
- sign_in_as_user
504
- delete destroy_user_session_path
505
- assert_response :redirect
506
- assert_current_url '/'
507
-
508
- sign_in_as_user
509
- delete destroy_user_session_path(format: 'html')
510
- assert_response :redirect
511
- assert_current_url '/'
512
- end
513
-
514
- test 'sign out with xml format returns no content' do
515
- sign_in_as_user
516
- delete destroy_user_session_path(format: 'xml')
517
- assert_response :no_content
518
- refute warden.authenticated?(:user)
519
- end
520
-
521
- test 'sign out with json format returns no content' do
522
- sign_in_as_user
523
- delete destroy_user_session_path(format: 'json')
524
- assert_response :no_content
525
- refute warden.authenticated?(:user)
526
- end
527
-
528
- test 'sign out with non-navigational format via XHR does not redirect' do
529
- swap Devise, navigational_formats: ['*/*', :html] do
530
- sign_in_as_admin
531
- get destroy_sign_out_via_get_session_path, xhr: true, headers: { "HTTP_ACCEPT" => "application/json,text/javascript,*/*" } # NOTE: Bug is triggered by combination of XHR and */*.
532
- assert_response :no_content
533
- refute warden.authenticated?(:user)
534
- end
535
- end
536
-
537
- # Belt and braces ... Perhaps this test is not necessary?
538
- test 'sign out with navigational format via XHR does redirect' do
539
- swap Devise, navigational_formats: ['*/*', :html] do
540
- sign_in_as_user
541
- delete destroy_user_session_path, xhr: true, headers: { "HTTP_ACCEPT" => "text/html,*/*" }
542
- assert_response :redirect
543
- refute warden.authenticated?(:user)
544
- end
545
- end
546
- end
547
-
548
- class AuthenticationKeysTest < Devise::IntegrationTest
549
- test 'missing authentication keys cause authentication to abort' do
550
- swap Devise, authentication_keys: [:subdomain] do
551
- sign_in_as_user
552
- assert_contain "Invalid Subdomain or password."
553
- refute warden.authenticated?(:user)
554
- end
555
- end
556
-
557
- test 'missing authentication keys cause authentication to abort unless marked as not required' do
558
- swap Devise, authentication_keys: { email: true, subdomain: false } do
559
- sign_in_as_user
560
- assert warden.authenticated?(:user)
561
- end
562
- end
563
- end
564
-
565
- class AuthenticationRequestKeysTest < Devise::IntegrationTest
566
- test 'request keys are used on authentication' do
567
- host! 'foo.bar.baz'
568
-
569
- swap Devise, request_keys: [:subdomain] do
570
- User.expects(:find_for_authentication).with(subdomain: 'foo', email: 'user@test.com').returns(create_user)
571
- sign_in_as_user
572
- assert warden.authenticated?(:user)
573
- end
574
- end
575
-
576
- test 'invalid request keys raises NoMethodError' do
577
- swap Devise, request_keys: [:unknown_method] do
578
- assert_raise NoMethodError do
579
- sign_in_as_user
580
- end
581
-
582
- refute warden.authenticated?(:user)
583
- end
584
- end
585
-
586
- test 'blank request keys cause authentication to abort' do
587
- host! 'test.com'
588
-
589
- swap Devise, request_keys: [:subdomain] do
590
- sign_in_as_user
591
- assert_contain "Invalid Email or password."
592
- refute warden.authenticated?(:user)
593
- end
594
- end
595
-
596
- test 'blank request keys cause authentication to abort unless if marked as not required' do
597
- host! 'test.com'
598
-
599
- swap Devise, request_keys: { subdomain: false } do
600
- sign_in_as_user
601
- assert warden.authenticated?(:user)
602
- end
603
- end
604
- end
605
-
606
- class AuthenticationSignOutViaTest < Devise::IntegrationTest
607
- def sign_in!(scope)
608
- sign_in_as_admin(visit: send("new_#{scope}_session_path"))
609
- assert warden.authenticated?(scope)
610
- end
611
-
612
- test 'allow sign out via delete when sign_out_via provides only delete' do
613
- sign_in!(:sign_out_via_delete)
614
- delete destroy_sign_out_via_delete_session_path
615
- refute warden.authenticated?(:sign_out_via_delete)
616
- end
617
-
618
- test 'do not allow sign out via get when sign_out_via provides only delete' do
619
- sign_in!(:sign_out_via_delete)
620
- assert_raise ActionController::RoutingError do
621
- get destroy_sign_out_via_delete_session_path
622
- end
623
- assert warden.authenticated?(:sign_out_via_delete)
624
- end
625
-
626
- test 'allow sign out via post when sign_out_via provides only post' do
627
- sign_in!(:sign_out_via_post)
628
- post destroy_sign_out_via_post_session_path
629
- refute warden.authenticated?(:sign_out_via_post)
630
- end
631
-
632
- test 'do not allow sign out via get when sign_out_via provides only post' do
633
- sign_in!(:sign_out_via_post)
634
- assert_raise ActionController::RoutingError do
635
- get destroy_sign_out_via_delete_session_path
636
- end
637
- assert warden.authenticated?(:sign_out_via_post)
638
- end
639
-
640
- test 'allow sign out via delete when sign_out_via provides delete and post' do
641
- sign_in!(:sign_out_via_delete_or_post)
642
- delete destroy_sign_out_via_delete_or_post_session_path
643
- refute warden.authenticated?(:sign_out_via_delete_or_post)
644
- end
645
-
646
- test 'allow sign out via post when sign_out_via provides delete and post' do
647
- sign_in!(:sign_out_via_delete_or_post)
648
- post destroy_sign_out_via_delete_or_post_session_path
649
- refute warden.authenticated?(:sign_out_via_delete_or_post)
650
- end
651
-
652
- test 'do not allow sign out via get when sign_out_via provides delete and post' do
653
- sign_in!(:sign_out_via_delete_or_post)
654
- assert_raise ActionController::RoutingError do
655
- get destroy_sign_out_via_delete_or_post_session_path
656
- end
657
- assert warden.authenticated?(:sign_out_via_delete_or_post)
658
- end
659
- end
660
-
661
- class DoubleAuthenticationRedirectTest < Devise::IntegrationTest
662
- test 'signed in as user redirects when visiting user sign in page' do
663
- sign_in_as_user
664
- get new_user_session_path(format: :html)
665
- assert_redirected_to '/'
666
- end
667
-
668
- test 'signed in as admin redirects when visiting admin sign in page' do
669
- sign_in_as_admin
670
- get new_admin_session_path(format: :html)
671
- assert_redirected_to '/admin_area/home'
672
- end
673
-
674
- test 'signed in as both user and admin redirects when visiting admin sign in page' do
675
- sign_in_as_user
676
- sign_in_as_admin
677
- get new_user_session_path(format: :html)
678
- assert_redirected_to '/'
679
- get new_admin_session_path(format: :html)
680
- assert_redirected_to '/admin_area/home'
681
- end
682
- end
683
-
684
- class DoubleSignOutRedirectTest < Devise::IntegrationTest
685
- test 'sign out after already having signed out redirects to sign in' do
686
- sign_in_as_user
687
-
688
- post destroy_sign_out_via_delete_or_post_session_path
689
-
690
- get root_path
691
- assert_contain 'Signed out successfully.'
692
-
693
- post destroy_sign_out_via_delete_or_post_session_path
694
-
695
- get root_path
696
- assert_contain 'Signed out successfully.'
697
- end
698
- end