[Users] Redirect to name changes when name is invalid

The more or less unintrusive message has been there for a few months now.
Start forcing a name change when accessing through a browser, ignore api for now
This commit is contained in:
Earlopain 2024-04-05 17:33:09 +02:00
parent e397370498
commit d9a055d058
No known key found for this signature in database
GPG Key ID: 48860312319ADF61
5 changed files with 64 additions and 19 deletions

View File

@ -10,6 +10,7 @@ class ApplicationController < ActionController::Base
before_action :normalize_search
before_action :api_check
before_action :enable_cors
before_action :check_valid_username
after_action :reset_current_user
layout "default"
@ -30,6 +31,14 @@ class ApplicationController < ActionController::Base
response.headers["Access-Control-Allow-Headers"] = "Authorization"
end
def check_valid_username
return if params[:controller] == "user_name_change_requests"
if request.format.html? && CurrentUser.user.name_error
redirect_to new_user_name_change_request_path
end
end
protected
def api_check

View File

@ -30,13 +30,6 @@
<div id="page">
<%= render "news_updates/notice", news_update: NewsUpdate.recent %>
<% if CurrentUser.is_member? && (name_error = CurrentUser.name_error) %>
<div class="ui-state-highlight site-notice">
<p>Your current username '<%= CurrentUser.pretty_name %>' is invalid. Please change it <%= link_to "here", new_user_name_change_request_path %>.<p>
Error: <%= name_error %>
</div>
<% end %>
<% if CurrentUser.user.is_banned? %>
<%= render "users/ban_notice" %>
<% end %>

View File

@ -1,5 +1,12 @@
<div id="c-user-name-change-requests">
<div id="a-new">
<% if CurrentUser.is_member? && (name_error = CurrentUser.user.name_error) %>
<div class="ui-state-highlight site-notice">
<p>Your current username '<%= CurrentUser.user.pretty_name %>' is invalid. You must change it to continue using the site.<p>
Error: <%= name_error %>
</div>
<% end %>
<h1>Name Change Request</h1>
<p>You can request a name change once per week.</p>

View File

@ -143,5 +143,22 @@ class ApplicationControllerTest < ActionDispatch::IntegrationTest
assert_equal("s", post.reload.rating)
end
end
context "when the user has an invalid username" do
setup do
@user = build(:user, name: "12345")
@user.save(validate: false)
end
should "redirect for html requests" do
get_auth posts_path, @user, params: { format: :html }
assert_redirected_to new_user_name_change_request_path
end
should "not redirect for json requests" do
get_auth posts_path, @user, params: { format: :json }
assert_response :success
end
end
end
end

View File

@ -7,14 +7,6 @@ class UserNameChangeRequestsControllerTest < ActionDispatch::IntegrationTest
setup do
@user = create(:privileged_user)
@admin = create(:admin_user)
as(@user) do
@change_request = UserNameChangeRequest.create!(
:user_id => @user.id,
:original_name => @user.name,
:desired_name => "abc",
:change_reason => "hello"
)
end
end
context "new action" do
@ -22,16 +14,43 @@ class UserNameChangeRequestsControllerTest < ActionDispatch::IntegrationTest
get_auth new_user_name_change_request_path, @user
assert_response :success
end
end
context "create action" do
should "work" do
post_auth user_name_change_requests_path, @user, params: { user_name_change_request: { desired_name: "zun" }}
should "render for a user with a currently invalid username" do
@user.update_columns(name: "12345")
get_auth new_user_name_change_request_path, @user
assert_response :success
end
end
context "create action" do
should "work" do
post_auth user_name_change_requests_path, @user, params: { user_name_change_request: { desired_name: "zun" } }
change_request = UserNameChangeRequest.last
assert_redirected_to user_name_change_request_path(change_request)
assert_equal("zun", @user.reload.name)
end
should "work for a user with a currently invalid name" do
@user.update_columns(name: "12345")
post_auth user_name_change_requests_path, @user, params: { user_name_change_request: { desired_name: "zun" } }
change_request = UserNameChangeRequest.last
assert_redirected_to user_name_change_request_path(change_request)
assert_equal("zun", @user.reload.name)
end
end
context "show action" do
setup do
as(@user) do
@change_request = UserNameChangeRequest.create!(
user_id: @user.id,
original_name: @user.name,
desired_name: "abc",
change_reason: "hello",
)
end
end
should "render" do
get_auth user_name_change_request_path(@change_request), @user
assert_response :success