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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +242 -978
- data/MIT-LICENSE +1 -1
- data/README.md +371 -100
- data/app/controllers/devise/confirmations_controller.rb +11 -5
- data/app/controllers/devise/omniauth_callbacks_controller.rb +12 -6
- data/app/controllers/devise/passwords_controller.rb +21 -8
- data/app/controllers/devise/registrations_controller.rb +59 -26
- data/app/controllers/devise/sessions_controller.rb +47 -17
- data/app/controllers/devise/unlocks_controller.rb +9 -4
- data/app/controllers/devise_controller.rb +67 -31
- data/app/helpers/devise_helper.rb +12 -19
- data/app/mailers/devise/mailer.rb +10 -0
- data/app/views/devise/confirmations/new.html.erb +9 -5
- data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/app/views/devise/mailer/password_change.html.erb +3 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/devise/passwords/edit.html.erb +16 -7
- data/app/views/devise/passwords/new.html.erb +9 -5
- data/app/views/devise/registrations/edit.html.erb +29 -15
- data/app/views/devise/registrations/new.html.erb +20 -9
- data/app/views/devise/sessions/new.html.erb +19 -10
- data/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/devise/shared/{_links.erb → _links.html.erb} +9 -9
- data/app/views/devise/unlocks/new.html.erb +9 -5
- data/config/locales/en.yml +23 -17
- data/lib/devise/controllers/helpers.rb +112 -32
- data/lib/devise/controllers/rememberable.rb +15 -6
- data/lib/devise/controllers/scoped_views.rb +3 -1
- data/lib/devise/controllers/sign_in_out.rb +42 -26
- data/lib/devise/controllers/store_location.rb +31 -5
- data/lib/devise/controllers/url_helpers.rb +9 -7
- data/lib/devise/delegator.rb +2 -0
- data/lib/devise/encryptor.rb +24 -0
- data/lib/devise/failure_app.rb +125 -39
- data/lib/devise/hooks/activatable.rb +7 -6
- data/lib/devise/hooks/csrf_cleaner.rb +5 -1
- data/lib/devise/hooks/forgetable.rb +2 -0
- data/lib/devise/hooks/lockable.rb +7 -2
- data/lib/devise/hooks/proxy.rb +4 -2
- data/lib/devise/hooks/rememberable.rb +4 -2
- data/lib/devise/hooks/timeoutable.rb +16 -9
- data/lib/devise/hooks/trackable.rb +3 -1
- data/lib/devise/mailers/helpers.rb +15 -12
- data/lib/devise/mapping.rb +8 -2
- data/lib/devise/models/authenticatable.rb +82 -56
- data/lib/devise/models/confirmable.rb +125 -42
- data/lib/devise/models/database_authenticatable.rb +110 -32
- data/lib/devise/models/lockable.rb +30 -17
- data/lib/devise/models/omniauthable.rb +3 -1
- data/lib/devise/models/recoverable.rb +62 -26
- data/lib/devise/models/registerable.rb +4 -0
- data/lib/devise/models/rememberable.rb +62 -33
- data/lib/devise/models/timeoutable.rb +4 -8
- data/lib/devise/models/trackable.rb +20 -4
- data/lib/devise/models/validatable.rb +16 -9
- data/lib/devise/models.rb +3 -1
- data/lib/devise/modules.rb +12 -10
- data/lib/devise/omniauth/config.rb +2 -0
- data/lib/devise/omniauth/url_helpers.rb +14 -5
- data/lib/devise/omniauth.rb +2 -0
- data/lib/devise/orm/active_record.rb +5 -1
- data/lib/devise/orm/mongoid.rb +6 -2
- data/lib/devise/parameter_filter.rb +4 -0
- data/lib/devise/parameter_sanitizer.rb +139 -65
- data/lib/devise/rails/routes.rb +147 -116
- data/lib/devise/rails/warden_compat.rb +3 -10
- data/lib/devise/rails.rb +10 -13
- data/lib/devise/secret_key_finder.rb +27 -0
- data/lib/devise/strategies/authenticatable.rb +20 -9
- data/lib/devise/strategies/base.rb +3 -1
- data/lib/devise/strategies/database_authenticatable.rb +14 -6
- data/lib/devise/strategies/rememberable.rb +15 -3
- data/lib/devise/test/controller_helpers.rb +165 -0
- data/lib/devise/test/integration_helpers.rb +63 -0
- data/lib/devise/test_helpers.rb +7 -124
- data/lib/devise/time_inflector.rb +4 -2
- data/lib/devise/token_generator.rb +3 -41
- data/lib/devise/version.rb +3 -1
- data/lib/devise.rb +111 -84
- data/lib/generators/active_record/devise_generator.rb +49 -12
- data/lib/generators/active_record/templates/migration.rb +9 -7
- data/lib/generators/active_record/templates/migration_existing.rb +9 -7
- data/lib/generators/devise/controllers_generator.rb +46 -0
- data/lib/generators/devise/devise_generator.rb +7 -5
- data/lib/generators/devise/install_generator.rb +21 -0
- data/lib/generators/devise/orm_helpers.rb +10 -21
- data/lib/generators/devise/views_generator.rb +49 -28
- data/lib/generators/mongoid/devise_generator.rb +21 -19
- data/lib/generators/templates/README +5 -12
- data/lib/generators/templates/controllers/README +14 -0
- data/lib/generators/templates/controllers/confirmations_controller.rb +30 -0
- data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +30 -0
- data/lib/generators/templates/controllers/passwords_controller.rb +34 -0
- data/lib/generators/templates/controllers/registrations_controller.rb +62 -0
- data/lib/generators/templates/controllers/sessions_controller.rb +27 -0
- data/lib/generators/templates/controllers/unlocks_controller.rb +30 -0
- data/lib/generators/templates/devise.rb +81 -36
- data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/email_changed.markerb +7 -0
- data/lib/generators/templates/markerb/password_change.markerb +3 -0
- data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
- data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +6 -2
- data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +9 -4
- data/lib/generators/templates/simple_form_for/passwords/new.html.erb +5 -2
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +14 -6
- data/lib/generators/templates/simple_form_for/registrations/new.html.erb +12 -4
- data/lib/generators/templates/simple_form_for/sessions/new.html.erb +11 -6
- data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +5 -2
- metadata +52 -280
- data/.gitignore +0 -10
- data/.travis.yml +0 -20
- data/.yardopts +0 -9
- data/CONTRIBUTING.md +0 -14
- data/Gemfile +0 -31
- data/Gemfile.lock +0 -160
- data/Rakefile +0 -35
- data/devise.gemspec +0 -27
- data/devise.png +0 -0
- data/gemfiles/Gemfile.rails-3.2.x +0 -31
- data/gemfiles/Gemfile.rails-3.2.x.lock +0 -159
- data/test/controllers/custom_strategy_test.rb +0 -62
- data/test/controllers/helpers_test.rb +0 -276
- data/test/controllers/internal_helpers_test.rb +0 -120
- data/test/controllers/passwords_controller_test.rb +0 -31
- data/test/controllers/sessions_controller_test.rb +0 -99
- data/test/controllers/url_helpers_test.rb +0 -59
- data/test/delegator_test.rb +0 -19
- data/test/devise_test.rb +0 -94
- data/test/failure_app_test.rb +0 -232
- data/test/generators/active_record_generator_test.rb +0 -103
- data/test/generators/devise_generator_test.rb +0 -39
- data/test/generators/install_generator_test.rb +0 -13
- data/test/generators/mongoid_generator_test.rb +0 -23
- data/test/generators/views_generator_test.rb +0 -67
- data/test/helpers/devise_helper_test.rb +0 -51
- data/test/integration/authenticatable_test.rb +0 -713
- data/test/integration/confirmable_test.rb +0 -284
- data/test/integration/database_authenticatable_test.rb +0 -84
- data/test/integration/http_authenticatable_test.rb +0 -105
- data/test/integration/lockable_test.rb +0 -239
- data/test/integration/omniauthable_test.rb +0 -133
- data/test/integration/recoverable_test.rb +0 -334
- data/test/integration/registerable_test.rb +0 -349
- data/test/integration/rememberable_test.rb +0 -167
- data/test/integration/timeoutable_test.rb +0 -183
- data/test/integration/trackable_test.rb +0 -92
- data/test/mailers/confirmation_instructions_test.rb +0 -115
- data/test/mailers/reset_password_instructions_test.rb +0 -96
- data/test/mailers/unlock_instructions_test.rb +0 -91
- data/test/mapping_test.rb +0 -127
- data/test/models/authenticatable_test.rb +0 -13
- data/test/models/confirmable_test.rb +0 -454
- data/test/models/database_authenticatable_test.rb +0 -249
- data/test/models/lockable_test.rb +0 -298
- data/test/models/omniauthable_test.rb +0 -7
- data/test/models/recoverable_test.rb +0 -184
- data/test/models/registerable_test.rb +0 -7
- data/test/models/rememberable_test.rb +0 -183
- data/test/models/serializable_test.rb +0 -49
- data/test/models/timeoutable_test.rb +0 -51
- data/test/models/trackable_test.rb +0 -13
- data/test/models/validatable_test.rb +0 -127
- data/test/models_test.rb +0 -144
- data/test/omniauth/config_test.rb +0 -57
- data/test/omniauth/url_helpers_test.rb +0 -54
- data/test/orm/active_record.rb +0 -10
- data/test/orm/mongoid.rb +0 -13
- data/test/parameter_sanitizer_test.rb +0 -81
- data/test/rails_app/Rakefile +0 -6
- data/test/rails_app/app/active_record/admin.rb +0 -6
- data/test/rails_app/app/active_record/shim.rb +0 -2
- data/test/rails_app/app/active_record/user.rb +0 -6
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
- data/test/rails_app/app/controllers/admins_controller.rb +0 -11
- data/test/rails_app/app/controllers/application_controller.rb +0 -9
- data/test/rails_app/app/controllers/home_controller.rb +0 -25
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
- data/test/rails_app/app/controllers/users_controller.rb +0 -31
- data/test/rails_app/app/helpers/application_helper.rb +0 -3
- data/test/rails_app/app/mailers/users/mailer.rb +0 -12
- data/test/rails_app/app/mongoid/admin.rb +0 -29
- data/test/rails_app/app/mongoid/shim.rb +0 -23
- data/test/rails_app/app/mongoid/user.rb +0 -39
- data/test/rails_app/app/views/admins/index.html.erb +0 -1
- data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
- data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
- data/test/rails_app/app/views/home/index.html.erb +0 -1
- data/test/rails_app/app/views/home/join.html.erb +0 -1
- data/test/rails_app/app/views/home/private.html.erb +0 -1
- data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
- data/test/rails_app/app/views/layouts/application.html.erb +0 -24
- data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
- data/test/rails_app/app/views/users/index.html.erb +0 -1
- data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
- data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
- data/test/rails_app/bin/bundle +0 -3
- data/test/rails_app/bin/rails +0 -4
- data/test/rails_app/bin/rake +0 -4
- data/test/rails_app/config/application.rb +0 -40
- data/test/rails_app/config/boot.rb +0 -14
- data/test/rails_app/config/database.yml +0 -18
- data/test/rails_app/config/environment.rb +0 -5
- data/test/rails_app/config/environments/development.rb +0 -30
- data/test/rails_app/config/environments/production.rb +0 -80
- data/test/rails_app/config/environments/test.rb +0 -36
- data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/rails_app/config/initializers/devise.rb +0 -181
- data/test/rails_app/config/initializers/inflections.rb +0 -2
- data/test/rails_app/config/initializers/secret_token.rb +0 -8
- data/test/rails_app/config/initializers/session_store.rb +0 -1
- data/test/rails_app/config/routes.rb +0 -104
- data/test/rails_app/config.ru +0 -4
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
- data/test/rails_app/db/schema.rb +0 -55
- data/test/rails_app/lib/shared_admin.rb +0 -17
- data/test/rails_app/lib/shared_user.rb +0 -29
- data/test/rails_app/public/404.html +0 -26
- data/test/rails_app/public/422.html +0 -26
- data/test/rails_app/public/500.html +0 -26
- data/test/rails_app/public/favicon.ico +0 -0
- data/test/routes_test.rb +0 -250
- data/test/support/assertions.rb +0 -40
- data/test/support/helpers.rb +0 -70
- data/test/support/integration.rb +0 -92
- data/test/support/locale/en.yml +0 -8
- data/test/support/webrat/integrations/rails.rb +0 -24
- data/test/test_helper.rb +0 -27
- data/test/test_helpers_test.rb +0 -173
- 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
|