devise 3.2.2 → 4.6.0

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

Potentially problematic release.


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

Files changed (235) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +242 -978
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +371 -100
  5. data/app/controllers/devise/confirmations_controller.rb +11 -5
  6. data/app/controllers/devise/omniauth_callbacks_controller.rb +12 -6
  7. data/app/controllers/devise/passwords_controller.rb +21 -8
  8. data/app/controllers/devise/registrations_controller.rb +59 -26
  9. data/app/controllers/devise/sessions_controller.rb +47 -17
  10. data/app/controllers/devise/unlocks_controller.rb +9 -4
  11. data/app/controllers/devise_controller.rb +67 -31
  12. data/app/helpers/devise_helper.rb +12 -19
  13. data/app/mailers/devise/mailer.rb +10 -0
  14. data/app/views/devise/confirmations/new.html.erb +9 -5
  15. data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
  16. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  17. data/app/views/devise/mailer/password_change.html.erb +3 -0
  18. data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
  19. data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
  20. data/app/views/devise/passwords/edit.html.erb +16 -7
  21. data/app/views/devise/passwords/new.html.erb +9 -5
  22. data/app/views/devise/registrations/edit.html.erb +29 -15
  23. data/app/views/devise/registrations/new.html.erb +20 -9
  24. data/app/views/devise/sessions/new.html.erb +19 -10
  25. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  26. data/app/views/devise/shared/{_links.erb → _links.html.erb} +9 -9
  27. data/app/views/devise/unlocks/new.html.erb +9 -5
  28. data/config/locales/en.yml +23 -17
  29. data/lib/devise/controllers/helpers.rb +112 -32
  30. data/lib/devise/controllers/rememberable.rb +15 -6
  31. data/lib/devise/controllers/scoped_views.rb +3 -1
  32. data/lib/devise/controllers/sign_in_out.rb +42 -26
  33. data/lib/devise/controllers/store_location.rb +31 -5
  34. data/lib/devise/controllers/url_helpers.rb +9 -7
  35. data/lib/devise/delegator.rb +2 -0
  36. data/lib/devise/encryptor.rb +24 -0
  37. data/lib/devise/failure_app.rb +125 -39
  38. data/lib/devise/hooks/activatable.rb +7 -6
  39. data/lib/devise/hooks/csrf_cleaner.rb +5 -1
  40. data/lib/devise/hooks/forgetable.rb +2 -0
  41. data/lib/devise/hooks/lockable.rb +7 -2
  42. data/lib/devise/hooks/proxy.rb +4 -2
  43. data/lib/devise/hooks/rememberable.rb +4 -2
  44. data/lib/devise/hooks/timeoutable.rb +16 -9
  45. data/lib/devise/hooks/trackable.rb +3 -1
  46. data/lib/devise/mailers/helpers.rb +15 -12
  47. data/lib/devise/mapping.rb +8 -2
  48. data/lib/devise/models/authenticatable.rb +82 -56
  49. data/lib/devise/models/confirmable.rb +125 -42
  50. data/lib/devise/models/database_authenticatable.rb +110 -32
  51. data/lib/devise/models/lockable.rb +30 -17
  52. data/lib/devise/models/omniauthable.rb +3 -1
  53. data/lib/devise/models/recoverable.rb +62 -26
  54. data/lib/devise/models/registerable.rb +4 -0
  55. data/lib/devise/models/rememberable.rb +62 -33
  56. data/lib/devise/models/timeoutable.rb +4 -8
  57. data/lib/devise/models/trackable.rb +20 -4
  58. data/lib/devise/models/validatable.rb +16 -9
  59. data/lib/devise/models.rb +3 -1
  60. data/lib/devise/modules.rb +12 -10
  61. data/lib/devise/omniauth/config.rb +2 -0
  62. data/lib/devise/omniauth/url_helpers.rb +14 -5
  63. data/lib/devise/omniauth.rb +2 -0
  64. data/lib/devise/orm/active_record.rb +5 -1
  65. data/lib/devise/orm/mongoid.rb +6 -2
  66. data/lib/devise/parameter_filter.rb +4 -0
  67. data/lib/devise/parameter_sanitizer.rb +139 -65
  68. data/lib/devise/rails/routes.rb +147 -116
  69. data/lib/devise/rails/warden_compat.rb +3 -10
  70. data/lib/devise/rails.rb +10 -13
  71. data/lib/devise/secret_key_finder.rb +27 -0
  72. data/lib/devise/strategies/authenticatable.rb +20 -9
  73. data/lib/devise/strategies/base.rb +3 -1
  74. data/lib/devise/strategies/database_authenticatable.rb +14 -6
  75. data/lib/devise/strategies/rememberable.rb +15 -3
  76. data/lib/devise/test/controller_helpers.rb +165 -0
  77. data/lib/devise/test/integration_helpers.rb +63 -0
  78. data/lib/devise/test_helpers.rb +7 -124
  79. data/lib/devise/time_inflector.rb +4 -2
  80. data/lib/devise/token_generator.rb +3 -41
  81. data/lib/devise/version.rb +3 -1
  82. data/lib/devise.rb +111 -84
  83. data/lib/generators/active_record/devise_generator.rb +49 -12
  84. data/lib/generators/active_record/templates/migration.rb +9 -7
  85. data/lib/generators/active_record/templates/migration_existing.rb +9 -7
  86. data/lib/generators/devise/controllers_generator.rb +46 -0
  87. data/lib/generators/devise/devise_generator.rb +7 -5
  88. data/lib/generators/devise/install_generator.rb +21 -0
  89. data/lib/generators/devise/orm_helpers.rb +10 -21
  90. data/lib/generators/devise/views_generator.rb +49 -28
  91. data/lib/generators/mongoid/devise_generator.rb +21 -19
  92. data/lib/generators/templates/README +5 -12
  93. data/lib/generators/templates/controllers/README +14 -0
  94. data/lib/generators/templates/controllers/confirmations_controller.rb +30 -0
  95. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +30 -0
  96. data/lib/generators/templates/controllers/passwords_controller.rb +34 -0
  97. data/lib/generators/templates/controllers/registrations_controller.rb +62 -0
  98. data/lib/generators/templates/controllers/sessions_controller.rb +27 -0
  99. data/lib/generators/templates/controllers/unlocks_controller.rb +30 -0
  100. data/lib/generators/templates/devise.rb +81 -36
  101. data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
  102. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  103. data/lib/generators/templates/markerb/password_change.markerb +3 -0
  104. data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
  105. data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
  106. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +6 -2
  107. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +9 -4
  108. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +5 -2
  109. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +14 -6
  110. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +12 -4
  111. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +11 -6
  112. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +5 -2
  113. metadata +52 -280
  114. data/.gitignore +0 -10
  115. data/.travis.yml +0 -20
  116. data/.yardopts +0 -9
  117. data/CONTRIBUTING.md +0 -14
  118. data/Gemfile +0 -31
  119. data/Gemfile.lock +0 -160
  120. data/Rakefile +0 -35
  121. data/devise.gemspec +0 -27
  122. data/devise.png +0 -0
  123. data/gemfiles/Gemfile.rails-3.2.x +0 -31
  124. data/gemfiles/Gemfile.rails-3.2.x.lock +0 -159
  125. data/test/controllers/custom_strategy_test.rb +0 -62
  126. data/test/controllers/helpers_test.rb +0 -276
  127. data/test/controllers/internal_helpers_test.rb +0 -120
  128. data/test/controllers/passwords_controller_test.rb +0 -31
  129. data/test/controllers/sessions_controller_test.rb +0 -99
  130. data/test/controllers/url_helpers_test.rb +0 -59
  131. data/test/delegator_test.rb +0 -19
  132. data/test/devise_test.rb +0 -94
  133. data/test/failure_app_test.rb +0 -232
  134. data/test/generators/active_record_generator_test.rb +0 -103
  135. data/test/generators/devise_generator_test.rb +0 -39
  136. data/test/generators/install_generator_test.rb +0 -13
  137. data/test/generators/mongoid_generator_test.rb +0 -23
  138. data/test/generators/views_generator_test.rb +0 -67
  139. data/test/helpers/devise_helper_test.rb +0 -51
  140. data/test/integration/authenticatable_test.rb +0 -713
  141. data/test/integration/confirmable_test.rb +0 -284
  142. data/test/integration/database_authenticatable_test.rb +0 -84
  143. data/test/integration/http_authenticatable_test.rb +0 -105
  144. data/test/integration/lockable_test.rb +0 -239
  145. data/test/integration/omniauthable_test.rb +0 -133
  146. data/test/integration/recoverable_test.rb +0 -334
  147. data/test/integration/registerable_test.rb +0 -349
  148. data/test/integration/rememberable_test.rb +0 -167
  149. data/test/integration/timeoutable_test.rb +0 -183
  150. data/test/integration/trackable_test.rb +0 -92
  151. data/test/mailers/confirmation_instructions_test.rb +0 -115
  152. data/test/mailers/reset_password_instructions_test.rb +0 -96
  153. data/test/mailers/unlock_instructions_test.rb +0 -91
  154. data/test/mapping_test.rb +0 -127
  155. data/test/models/authenticatable_test.rb +0 -13
  156. data/test/models/confirmable_test.rb +0 -454
  157. data/test/models/database_authenticatable_test.rb +0 -249
  158. data/test/models/lockable_test.rb +0 -298
  159. data/test/models/omniauthable_test.rb +0 -7
  160. data/test/models/recoverable_test.rb +0 -184
  161. data/test/models/registerable_test.rb +0 -7
  162. data/test/models/rememberable_test.rb +0 -183
  163. data/test/models/serializable_test.rb +0 -49
  164. data/test/models/timeoutable_test.rb +0 -51
  165. data/test/models/trackable_test.rb +0 -13
  166. data/test/models/validatable_test.rb +0 -127
  167. data/test/models_test.rb +0 -144
  168. data/test/omniauth/config_test.rb +0 -57
  169. data/test/omniauth/url_helpers_test.rb +0 -54
  170. data/test/orm/active_record.rb +0 -10
  171. data/test/orm/mongoid.rb +0 -13
  172. data/test/parameter_sanitizer_test.rb +0 -81
  173. data/test/rails_app/Rakefile +0 -6
  174. data/test/rails_app/app/active_record/admin.rb +0 -6
  175. data/test/rails_app/app/active_record/shim.rb +0 -2
  176. data/test/rails_app/app/active_record/user.rb +0 -6
  177. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  178. data/test/rails_app/app/controllers/admins_controller.rb +0 -11
  179. data/test/rails_app/app/controllers/application_controller.rb +0 -9
  180. data/test/rails_app/app/controllers/home_controller.rb +0 -25
  181. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  182. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  183. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  184. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  185. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  186. data/test/rails_app/app/mailers/users/mailer.rb +0 -12
  187. data/test/rails_app/app/mongoid/admin.rb +0 -29
  188. data/test/rails_app/app/mongoid/shim.rb +0 -23
  189. data/test/rails_app/app/mongoid/user.rb +0 -39
  190. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  191. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  192. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  193. data/test/rails_app/app/views/home/index.html.erb +0 -1
  194. data/test/rails_app/app/views/home/join.html.erb +0 -1
  195. data/test/rails_app/app/views/home/private.html.erb +0 -1
  196. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  197. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  198. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  199. data/test/rails_app/app/views/users/index.html.erb +0 -1
  200. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  201. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  202. data/test/rails_app/bin/bundle +0 -3
  203. data/test/rails_app/bin/rails +0 -4
  204. data/test/rails_app/bin/rake +0 -4
  205. data/test/rails_app/config/application.rb +0 -40
  206. data/test/rails_app/config/boot.rb +0 -14
  207. data/test/rails_app/config/database.yml +0 -18
  208. data/test/rails_app/config/environment.rb +0 -5
  209. data/test/rails_app/config/environments/development.rb +0 -30
  210. data/test/rails_app/config/environments/production.rb +0 -80
  211. data/test/rails_app/config/environments/test.rb +0 -36
  212. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  213. data/test/rails_app/config/initializers/devise.rb +0 -181
  214. data/test/rails_app/config/initializers/inflections.rb +0 -2
  215. data/test/rails_app/config/initializers/secret_token.rb +0 -8
  216. data/test/rails_app/config/initializers/session_store.rb +0 -1
  217. data/test/rails_app/config/routes.rb +0 -104
  218. data/test/rails_app/config.ru +0 -4
  219. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
  220. data/test/rails_app/db/schema.rb +0 -55
  221. data/test/rails_app/lib/shared_admin.rb +0 -17
  222. data/test/rails_app/lib/shared_user.rb +0 -29
  223. data/test/rails_app/public/404.html +0 -26
  224. data/test/rails_app/public/422.html +0 -26
  225. data/test/rails_app/public/500.html +0 -26
  226. data/test/rails_app/public/favicon.ico +0 -0
  227. data/test/routes_test.rb +0 -250
  228. data/test/support/assertions.rb +0 -40
  229. data/test/support/helpers.rb +0 -70
  230. data/test/support/integration.rb +0 -92
  231. data/test/support/locale/en.yml +0 -8
  232. data/test/support/webrat/integrations/rails.rb +0 -24
  233. data/test/test_helper.rb +0 -27
  234. data/test/test_helpers_test.rb +0 -173
  235. data/test/test_models.rb +0 -33
@@ -1,284 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ConfirmationTest < ActionDispatch::IntegrationTest
4
-
5
- def visit_user_confirmation_with_token(confirmation_token)
6
- visit user_confirmation_path(:confirmation_token => confirmation_token)
7
- end
8
-
9
- def resend_confirmation
10
- user = create_user(:confirm => false)
11
- ActionMailer::Base.deliveries.clear
12
-
13
- visit new_user_session_path
14
- click_link "Didn't receive confirmation instructions?"
15
-
16
- fill_in 'email', :with => user.email
17
- click_button 'Resend confirmation instructions'
18
- end
19
-
20
- test 'user should be able to request a new confirmation' do
21
- resend_confirmation
22
-
23
- assert_current_url '/users/sign_in'
24
- assert_contain 'You will receive an email with instructions about how to confirm your account in a few minutes'
25
- assert_equal 1, ActionMailer::Base.deliveries.size
26
- assert_equal ['please-change-me@config-initializers-devise.com'], ActionMailer::Base.deliveries.first.from
27
- end
28
-
29
- test 'user should receive a confirmation from a custom mailer' do
30
- User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
31
- resend_confirmation
32
- assert_equal ['custom@example.com'], ActionMailer::Base.deliveries.first.from
33
- end
34
-
35
- test 'user with invalid confirmation token should not be able to confirm an account' do
36
- visit_user_confirmation_with_token('invalid_confirmation')
37
- assert_have_selector '#error_explanation'
38
- assert_contain /Confirmation token(.*)invalid/
39
- end
40
-
41
- test 'user with valid confirmation token should not be able to confirm an account after the token has expired' do
42
- swap Devise, :confirm_within => 3.days do
43
- user = create_user(:confirm => false, :confirmation_sent_at => 4.days.ago)
44
- assert_not user.confirmed?
45
- visit_user_confirmation_with_token(user.raw_confirmation_token)
46
-
47
- assert_have_selector '#error_explanation'
48
- assert_contain /needs to be confirmed within 3 days/
49
- assert_not user.reload.confirmed?
50
- end
51
- end
52
-
53
- test 'user with valid confirmation token should be able to confirm an account before the token has expired' do
54
- swap Devise, :confirm_within => 3.days do
55
- user = create_user(:confirm => false, :confirmation_sent_at => 2.days.ago)
56
- assert_not user.confirmed?
57
- visit_user_confirmation_with_token(user.raw_confirmation_token)
58
-
59
- assert_contain 'Your account was successfully confirmed.'
60
- assert_current_url '/users/sign_in'
61
- assert user.reload.confirmed?
62
- end
63
- end
64
-
65
- test 'user should be redirected to a custom path after confirmation' do
66
- Devise::ConfirmationsController.any_instance.stubs(:after_confirmation_path_for).returns("/?custom=1")
67
-
68
- user = create_user(:confirm => false)
69
- visit_user_confirmation_with_token(user.raw_confirmation_token)
70
-
71
- assert_current_url "/?custom=1"
72
- end
73
-
74
- test 'already confirmed user should not be able to confirm the account again' do
75
- user = create_user(:confirm => false)
76
- user.confirmed_at = Time.now
77
- user.save
78
- visit_user_confirmation_with_token(user.raw_confirmation_token)
79
-
80
- assert_have_selector '#error_explanation'
81
- assert_contain 'already confirmed'
82
- end
83
-
84
- test 'already confirmed user should not be able to confirm the account again neither request confirmation' do
85
- user = create_user(:confirm => false)
86
- user.confirmed_at = Time.now
87
- user.save
88
-
89
- visit_user_confirmation_with_token(user.raw_confirmation_token)
90
- assert_contain 'already confirmed'
91
-
92
- fill_in 'email', :with => user.email
93
- click_button 'Resend confirmation instructions'
94
- assert_contain 'already confirmed'
95
- end
96
-
97
- test 'not confirmed user with setup to block without confirmation should not be able to sign in' do
98
- swap Devise, :allow_unconfirmed_access_for => 0.days do
99
- sign_in_as_user(:confirm => false)
100
-
101
- assert_contain 'You have to confirm your account before continuing'
102
- assert_not warden.authenticated?(:user)
103
- end
104
- end
105
-
106
- test 'not confirmed user should not see confirmation message if invalid credentials are given' do
107
- swap Devise, :allow_unconfirmed_access_for => 0.days do
108
- sign_in_as_user(:confirm => false) do
109
- fill_in 'password', :with => 'invalid'
110
- end
111
-
112
- assert_contain 'Invalid email or password'
113
- assert_not warden.authenticated?(:user)
114
- end
115
- end
116
-
117
- test 'not confirmed user but configured with some days to confirm should be able to sign in' do
118
- swap Devise, :allow_unconfirmed_access_for => 1.day do
119
- sign_in_as_user(:confirm => false)
120
-
121
- assert_response :success
122
- assert warden.authenticated?(:user)
123
- end
124
- end
125
-
126
- test 'unconfirmed but signed in user should be redirected to their root path' do
127
- swap Devise, :allow_unconfirmed_access_for => 1.day do
128
- user = sign_in_as_user(:confirm => false)
129
-
130
- visit_user_confirmation_with_token(user.raw_confirmation_token)
131
- assert_contain 'Your account was successfully confirmed.'
132
- assert_current_url '/'
133
- end
134
- end
135
-
136
- test 'error message is configurable by resource name' do
137
- store_translations :en, :devise => {
138
- :failure => { :user => { :unconfirmed => "Not confirmed user" } }
139
- } do
140
- sign_in_as_user(:confirm => false)
141
- assert_contain 'Not confirmed user'
142
- end
143
- end
144
-
145
- test 'resent confirmation token with valid E-Mail in XML format should return valid response' do
146
- user = create_user(:confirm => false)
147
- post user_confirmation_path(:format => 'xml'), :user => { :email => user.email }
148
- assert_response :success
149
- assert_equal response.body, {}.to_xml
150
- end
151
-
152
- test 'resent confirmation token with invalid E-Mail in XML format should return invalid response' do
153
- create_user(:confirm => false)
154
- post user_confirmation_path(:format => 'xml'), :user => { :email => 'invalid.test@test.com' }
155
- assert_response :unprocessable_entity
156
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
157
- end
158
-
159
- test 'confirm account with valid confirmation token in XML format should return valid response' do
160
- user = create_user(:confirm => false)
161
- get user_confirmation_path(:confirmation_token => user.raw_confirmation_token, :format => 'xml')
162
- assert_response :success
163
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
164
- end
165
-
166
- test 'confirm account with invalid confirmation token in XML format should return invalid response' do
167
- create_user(:confirm => false)
168
- get user_confirmation_path(:confirmation_token => 'invalid_confirmation', :format => 'xml')
169
- assert_response :unprocessable_entity
170
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
171
- end
172
-
173
- test 'request an account confirmation account with JSON, should return an empty JSON' do
174
- user = create_user(:confirm => false)
175
-
176
- post user_confirmation_path, :user => { :email => user.email }, :format => :json
177
- assert_response :success
178
- assert_equal response.body, {}.to_json
179
- end
180
-
181
- test "when in paranoid mode and with a valid e-mail, should not say that the e-mail is valid" do
182
- swap Devise, :paranoid => true do
183
- user = create_user(:confirm => false)
184
- visit new_user_session_path
185
-
186
- click_link "Didn't receive confirmation instructions?"
187
- fill_in 'email', :with => user.email
188
- click_button 'Resend confirmation instructions'
189
-
190
- assert_contain "If your email address exists in our database, you will receive an email with instructions about how to confirm your account in a few minutes."
191
- assert_current_url "/users/sign_in"
192
- end
193
- end
194
-
195
- test "when in paranoid mode and with a invalid e-mail, should not say that the e-mail is invalid" do
196
- swap Devise, :paranoid => true do
197
- visit new_user_session_path
198
-
199
- click_link "Didn't receive confirmation instructions?"
200
- fill_in 'email', :with => "idonthavethisemail@gmail.com"
201
- click_button 'Resend confirmation instructions'
202
-
203
- assert_not_contain "1 error prohibited this user from being saved:"
204
- assert_not_contain "Email not found"
205
-
206
- assert_contain "If your email address exists in our database, you will receive an email with instructions about how to confirm your account in a few minutes."
207
- assert_current_url "/users/sign_in"
208
- end
209
- end
210
- end
211
-
212
- class ConfirmationOnChangeTest < ActionDispatch::IntegrationTest
213
- def create_second_admin(options={})
214
- @admin = nil
215
- create_admin(options)
216
- end
217
-
218
- def visit_admin_confirmation_with_token(confirmation_token)
219
- visit admin_confirmation_path(:confirmation_token => confirmation_token)
220
- end
221
-
222
- test 'admin should be able to request a new confirmation after email changed' do
223
- admin = create_admin
224
- admin.update_attributes(:email => 'new_test@example.com')
225
-
226
- visit new_admin_session_path
227
- click_link "Didn't receive confirmation instructions?"
228
-
229
- fill_in 'email', :with => admin.unconfirmed_email
230
- assert_difference "ActionMailer::Base.deliveries.size" do
231
- click_button 'Resend confirmation instructions'
232
- end
233
-
234
- assert_current_url '/admin_area/sign_in'
235
- assert_contain 'You will receive an email with instructions about how to confirm your account in a few minutes'
236
- end
237
-
238
- test 'admin with valid confirmation token should be able to confirm email after email changed' do
239
- admin = create_admin
240
- admin.update_attributes(:email => 'new_test@example.com')
241
- assert_equal 'new_test@example.com', admin.unconfirmed_email
242
- visit_admin_confirmation_with_token(admin.raw_confirmation_token)
243
-
244
- assert_contain 'Your account was successfully confirmed.'
245
- assert_current_url '/admin_area/sign_in'
246
- assert admin.reload.confirmed?
247
- assert_not admin.reload.pending_reconfirmation?
248
- end
249
-
250
- test 'admin with previously valid confirmation token should not be able to confirm email after email changed again' do
251
- admin = create_admin
252
- admin.update_attributes(:email => 'first_test@example.com')
253
- assert_equal 'first_test@example.com', admin.unconfirmed_email
254
-
255
- raw_confirmation_token = admin.raw_confirmation_token
256
- admin = Admin.find(admin.id)
257
-
258
- admin.update_attributes(:email => 'second_test@example.com')
259
- assert_equal 'second_test@example.com', admin.unconfirmed_email
260
-
261
- visit_admin_confirmation_with_token(raw_confirmation_token)
262
- assert_have_selector '#error_explanation'
263
- assert_contain(/Confirmation token(.*)invalid/)
264
-
265
- visit_admin_confirmation_with_token(admin.raw_confirmation_token)
266
- assert_contain 'Your account was successfully confirmed.'
267
- assert_current_url '/admin_area/sign_in'
268
- assert admin.reload.confirmed?
269
- assert_not admin.reload.pending_reconfirmation?
270
- end
271
-
272
- test 'admin email should be unique also within unconfirmed_email' do
273
- admin = create_admin
274
- admin.update_attributes(:email => 'new_admin_test@example.com')
275
- assert_equal 'new_admin_test@example.com', admin.unconfirmed_email
276
-
277
- create_second_admin(:email => "new_admin_test@example.com")
278
-
279
- visit_admin_confirmation_with_token(admin.raw_confirmation_token)
280
- assert_have_selector '#error_explanation'
281
- assert_contain(/Email.*already.*taken/)
282
- assert admin.reload.pending_reconfirmation?
283
- end
284
- end
@@ -1,84 +0,0 @@
1
- require 'test_helper'
2
-
3
- class DatabaseAuthenticationTest < ActionDispatch::IntegrationTest
4
- test 'sign in with email of different case should succeed when email is in the list of case insensitive keys' do
5
- create_user(:email => 'Foo@Bar.com')
6
-
7
- sign_in_as_user do
8
- fill_in 'email', :with => 'foo@bar.com'
9
- end
10
-
11
- assert warden.authenticated?(:user)
12
- end
13
-
14
- test 'sign in with email of different case should fail when email is NOT the list of case insensitive keys' do
15
- swap Devise, :case_insensitive_keys => [] do
16
- create_user(:email => 'Foo@Bar.com')
17
-
18
- sign_in_as_user do
19
- fill_in 'email', :with => 'foo@bar.com'
20
- end
21
-
22
- assert_not warden.authenticated?(:user)
23
- end
24
- end
25
-
26
- test 'sign in with email including extra spaces should succeed when email is in the list of strip whitespace keys' do
27
- create_user(:email => ' foo@bar.com ')
28
-
29
- sign_in_as_user do
30
- fill_in 'email', :with => 'foo@bar.com'
31
- end
32
-
33
- assert warden.authenticated?(:user)
34
- end
35
-
36
- test 'sign in with email including extra spaces should fail when email is NOT the list of strip whitespace keys' do
37
- swap Devise, :strip_whitespace_keys => [] do
38
- create_user(:email => 'foo@bar.com')
39
-
40
- sign_in_as_user do
41
- fill_in 'email', :with => ' foo@bar.com '
42
- end
43
-
44
- assert_not warden.authenticated?(:user)
45
- end
46
- end
47
-
48
- test 'sign in should not authenticate if not using proper authentication keys' do
49
- swap Devise, :authentication_keys => [:username] do
50
- sign_in_as_user
51
- assert_not warden.authenticated?(:user)
52
- end
53
- end
54
-
55
- test 'sign in with invalid email should return to sign in form with error message' do
56
- store_translations :en, :devise => { :failure => { :admin => { :not_found_in_database => 'Invalid email address' } } } do
57
- sign_in_as_admin do
58
- fill_in 'email', :with => 'wrongemail@test.com'
59
- end
60
-
61
- assert_contain 'Invalid email address'
62
- assert_not warden.authenticated?(:admin)
63
- end
64
- end
65
-
66
- test 'sign in with invalid pasword should return to sign in form with error message' do
67
- sign_in_as_admin do
68
- fill_in 'password', :with => 'abcdef'
69
- end
70
-
71
- assert_contain 'Invalid email or password'
72
- assert_not warden.authenticated?(:admin)
73
- end
74
-
75
- test 'error message is configurable by resource name' do
76
- store_translations :en, :devise => { :failure => { :admin => { :invalid => "Invalid credentials" } } } do
77
- sign_in_as_admin do
78
- fill_in 'password', :with => 'abcdef'
79
- end
80
-
81
- assert_contain 'Invalid credentials'
82
- end
83
- end
84
- end
@@ -1,105 +0,0 @@
1
- require 'test_helper'
2
-
3
- class HttpAuthenticationTest < ActionDispatch::IntegrationTest
4
- test 'handles unverified requests gets rid of caches but continues signed in' do
5
- swap ApplicationController, :allow_forgery_protection => true do
6
- create_user
7
- post exhibit_user_url(1), {}, "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("user@test.com:12345678")}"
8
- assert warden.authenticated?(:user)
9
- assert_equal "User is authenticated", response.body
10
- end
11
- end
12
-
13
- test 'sign in should authenticate with http' do
14
- sign_in_as_new_user_with_http
15
- assert_response 200
16
- assert_match '<email>user@test.com</email>', response.body
17
- assert warden.authenticated?(:user)
18
-
19
- get users_path(:format => :xml)
20
- assert_response 200
21
- end
22
-
23
- test 'sign in should authenticate with http but not emit a cookie if skipping session storage' do
24
- swap Devise, :skip_session_storage => [:http_auth] do
25
- sign_in_as_new_user_with_http
26
- assert_response 200
27
- assert_match '<email>user@test.com</email>', response.body
28
- assert warden.authenticated?(:user)
29
-
30
- get users_path(:format => :xml)
31
- assert_response 401
32
- end
33
- end
34
-
35
- test 'returns a custom response with www-authenticate header on failures' do
36
- sign_in_as_new_user_with_http("unknown")
37
- assert_equal 401, status
38
- assert_equal 'Basic realm="Application"', headers["WWW-Authenticate"]
39
- end
40
-
41
- test 'uses the request format as response content type' do
42
- sign_in_as_new_user_with_http("unknown")
43
- assert_equal 401, status
44
- assert_equal "application/xml; charset=utf-8", headers["Content-Type"]
45
- assert_match "<error>Invalid email or password.</error>", response.body
46
- end
47
-
48
- test 'returns a custom response with www-authenticate and chosen realm' do
49
- swap Devise, :http_authentication_realm => "MyApp" do
50
- sign_in_as_new_user_with_http("unknown")
51
- assert_equal 401, status
52
- assert_equal 'Basic realm="MyApp"', headers["WWW-Authenticate"]
53
- end
54
- end
55
-
56
- test 'sign in should authenticate with http even with specific authentication keys' do
57
- swap Devise, :authentication_keys => [:username] do
58
- sign_in_as_new_user_with_http("usertest")
59
- assert_response :success
60
- assert_match '<email>user@test.com</email>', response.body
61
- assert warden.authenticated?(:user)
62
- end
63
- end
64
-
65
- test 'it uses appropriate authentication_keys when configured with hash' do
66
- swap Devise, :authentication_keys => ActiveSupport::OrderedHash[:username, false, :email, false] do
67
- sign_in_as_new_user_with_http("usertest")
68
- assert_response :success
69
- assert_match '<email>user@test.com</email>', response.body
70
- assert warden.authenticated?(:user)
71
- end
72
- end
73
-
74
- test 'it uses the appropriate key when configured explicitly' do
75
- swap Devise, :authentication_keys => ActiveSupport::OrderedHash[:email, false, :username, false], :http_authentication_key => :username do
76
- sign_in_as_new_user_with_http("usertest")
77
- assert_response :success
78
- assert_match '<email>user@test.com</email>', response.body
79
- assert warden.authenticated?(:user)
80
- end
81
- end
82
-
83
- test 'test request with oauth2 header doesnt get mistaken for basic authentication' do
84
- swap Devise, :http_authenticatable => true do
85
- add_oauth2_header
86
- assert_equal 401, status
87
- assert_equal 'Basic realm="Application"', headers["WWW-Authenticate"]
88
- end
89
- end
90
-
91
- private
92
-
93
- def sign_in_as_new_user_with_http(username="user@test.com", password="12345678")
94
- user = create_user
95
- get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("#{username}:#{password}")}"
96
- user
97
- end
98
-
99
- # Sign in with oauth2 token. This is just to test that it isn't misinterpreted as basic authentication
100
- def add_oauth2_header
101
- user = create_user
102
- get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => "OAuth #{Base64.encode64("#{user.email}:12345678")}"
103
- end
104
-
105
- end