diff --git a/app/password_reset.rb b/app/password_reset.rb index 1e98ab23..4113d4aa 100644 --- a/app/password_reset.rb +++ b/app/password_reset.rb @@ -70,6 +70,13 @@ get '/password_reset_confirm' do redirect '/' end + if reset_site.is_deleted + unless reset_site.undelete! + flash[:error] = "Sorry, we cannot restore this account." + redirect '/' + end + end + reset_site.password_reset_confirmed = true reset_site.save_changes diff --git a/tests/acceptance/password_reset_tests.rb b/tests/acceptance/password_reset_tests.rb index 1a8391a8..3d9ffad0 100644 --- a/tests/acceptance/password_reset_tests.rb +++ b/tests/acceptance/password_reset_tests.rb @@ -91,6 +91,38 @@ describe '/password_reset' do _(@site.password_reset_confirmed).must_equal false end + it 'works for deleted site' do + @site = Fabricate :site + @site.destroy + visit '/password_reset' + fill_in 'email', with: @site.email + click_button 'Send Reset Token' + + _(body).must_match /We sent an e-mail with password reset instructions/ + _(@site.reload.password_reset_token.blank?).must_equal false + _(EmailWorker.jobs.first['args'].first['body']).must_match /#{Rack::Utils.build_query(username: @site.username, token: @site.password_reset_token)}/ + + visit "/password_reset_confirm?#{Rack::Utils.build_query username: @site.username, token: @site.reload.password_reset_token}" + + _(@site.reload.password_reset_token).wont_be_nil + _(@site.password_reset_confirmed).must_equal true + + _(page.current_url).must_match /.+\/settings#password/ + + fill_in 'new_password', with: 'n3wp4s$' + fill_in 'new_password_confirm', with: 'n3wp4s$' + click_button 'Change Password' + + _(page.current_url).must_match /.+\/settings#password/ + _(page).must_have_content 'Successfully changed password' + _(Site.valid_login?(@site.username, 'n3wp4s$')).must_equal true + _(page.get_rack_session['id']).must_equal @site.id + _(@site.reload.password_reset_token).must_be_nil + _(@site.password_reset_confirmed).must_equal false + end + + + it 'fails if timestamp is too old' do @site = Fabricate :site visit '/password_reset' diff --git a/views/settings/account/password.erb b/views/settings/account/password.erb index 4867b74c..48b6442d 100644 --- a/views/settings/account/password.erb +++ b/views/settings/account/password.erb @@ -13,5 +13,5 @@

Confirm New Password:

- +