From 952bebc5a1a435762f6df4b957752eb3603323ff Mon Sep 17 00:00:00 2001 From: Andrei Prigorshnev Date: Tue, 21 Dec 2021 18:09:55 +0100 Subject: [PATCH] FIX: fallback to `anonymous` not `user` when suggesting usernames for anonymous users (#15354) --- app/services/anonymous_shadow_creator.rb | 9 ++++++++- spec/services/anonymous_shadow_creator_spec.rb | 12 +++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/services/anonymous_shadow_creator.rb b/app/services/anonymous_shadow_creator.rb index 385413feb58..77d353b2f97 100644 --- a/app/services/anonymous_shadow_creator.rb +++ b/app/services/anonymous_shadow_creator.rb @@ -42,7 +42,7 @@ class AnonymousShadowCreator private def create_shadow! - username = UserNameSuggester.suggest(I18n.t(:anonymous).downcase) + username = resolve_username User.transaction do shadow = User.create!( @@ -76,4 +76,11 @@ class AnonymousShadowCreator shadow end end + + def resolve_username + username = I18n.t("anonymous").downcase + username = "anonymous" unless UserNameSuggester.sanitize_username(username).present? + + UserNameSuggester.suggest(username) + end end diff --git a/spec/services/anonymous_shadow_creator_spec.rb b/spec/services/anonymous_shadow_creator_spec.rb index cca0fe66975..1cbcc28d2ed 100644 --- a/spec/services/anonymous_shadow_creator_spec.rb +++ b/spec/services/anonymous_shadow_creator_spec.rb @@ -78,6 +78,16 @@ describe AnonymousShadowCreator do expect { AnonymousShadowCreator.get(user) }.to_not raise_error end - end + it "falls back to username 'anonymous' if the translation for 'anonymous' consists entirely of disallowed characters" do + # use russian locale but do not allow russian characters: + I18n.locale = :ru + SiteSetting.unicode_usernames = true + SiteSetting.allowed_unicode_username_characters = "[äöü]" + + shadow = AnonymousShadowCreator.get(user) + + expect(shadow.username).to eq("anonymous") + end + end end