Merge remote-tracking branch 'upstream/pull/2496'

This commit is contained in:
Tom Hughes 2020-01-09 10:06:25 +00:00
commit 6ed8624851
5 changed files with 65 additions and 27 deletions

View file

@ -269,7 +269,7 @@ class UsersController < ApplicationController
def logout
@title = t "users.logout.title"
if params[:session] == session.id
if request.post?
if session[:token]
token = UserToken.find_by(:token => session[:token])
token&.destroy

View file

@ -102,7 +102,7 @@
<%= yield :greeting %>
</li>
<li>
<%= link_to t("layouts.logout"), logout_path(:session => session.id, :referer => request.fullpath), :class => "geolink" %>
<%= link_to t("layouts.logout"), logout_path(:referer => request.fullpath), :method => "post", :class => "geolink" %>
</li>
</ul>
</div>

View file

@ -4,6 +4,5 @@
<%= form_tag :action => "logout" do %>
<%= hidden_field_tag("referer", h(params[:referer])) %>
<%= hidden_field_tag("session", session.id) %>
<%= submit_tag t(".logout_button") %>
<% end %>

View file

@ -344,29 +344,29 @@ class UsersControllerTest < ActionController::TestCase
end
def test_logout_without_referer
get :logout
assert_response :success
assert_template :logout
assert_select "input[name=referer][value=?]", ""
session_id = assert_select("input[name=session]").first["value"]
get :logout, :params => { :session => session_id }
post :logout
assert_response :redirect
assert_redirected_to root_path
end
def test_logout_with_referer
post :logout, :params => { :referer => "/test" }
assert_response :redirect
assert_redirected_to "/test"
end
def test_logout_fallback_without_referer
get :logout
assert_response :success
assert_template :logout
assert_select "input[name=referer][value=?]", ""
end
def test_logout_fallback_with_referer
get :logout, :params => { :referer => "/test" }
assert_response :success
assert_template :logout
assert_select "input[name=referer][value=?]", "/test"
session_id = assert_select("input[name=session]").first["value"]
get :logout, :params => { :session => session_id, :referer => "/test" }
assert_response :redirect
assert_redirected_to "/test"
end
def test_logout_with_token
@ -374,16 +374,7 @@ class UsersControllerTest < ActionController::TestCase
session[:token] = token.token
get :logout
assert_response :success
assert_template :logout
assert_select "input[name=referer][value=?]", ""
assert_equal token.token, session[:token]
assert_not_nil UserToken.where(:id => token.id).first
session_id = assert_select("input[name=session]").first["value"]
get :logout, :params => { :session => session_id }
post :logout
assert_response :redirect
assert_redirected_to root_path
assert_nil session[:token]

View file

@ -0,0 +1,48 @@
require "application_system_test_case"
class UserLogoutTest < ApplicationSystemTestCase
test "Sign out via link" do
user = create(:user)
sign_in_as(user)
assert_not page.has_content? "Log In"
click_on user.display_name
click_on "Log Out"
assert page.has_content? "Log In"
end
test "Sign out via link with referer" do
user = create(:user)
sign_in_as(user)
visit traces_path
assert_not page.has_content? "Log In"
click_on user.display_name
click_on "Log Out"
assert page.has_content? "Log In"
assert page.has_content? "Public GPS traces"
end
test "Sign out via fallback page" do
sign_in_as(create(:user))
assert_not page.has_content? "Log In"
visit logout_path
assert page.has_content? "Logout from OpenStreetMap"
click_button "Logout"
assert page.has_content? "Log In"
end
test "Sign out via fallback page with referer" do
sign_in_as(create(:user))
assert_not page.has_content? "Log In"
visit logout_path(:referer => "/traces")
assert page.has_content? "Logout from OpenStreetMap"
click_button "Logout"
assert page.has_content? "Log In"
assert page.has_content? "Public GPS traces"
end
end