From 7bd49a32222045c34098f925fbd494461ab67ccd Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 29 Dec 2018 12:26:23 +0300 Subject: [PATCH] [#483] User.get_by_nickname/1: ensured case-insensitive matching for local FQN. Added tests. --- lib/pleroma/user.ex | 2 +- test/user_test.exs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d4a6b13fb..1f6d4cc5e 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -388,7 +388,7 @@ def get_cached_by_nickname(nickname) do def get_by_nickname(nickname) do Repo.get_by(User, nickname: nickname) || - if String.ends_with?(nickname, "@" <> Pleroma.Web.Endpoint.host()) do + if Regex.match?(~r(@#{Pleroma.Web.Endpoint.host()})i, nickname) do [local_nickname, _] = String.split(nickname, "@") Repo.get_by(User, nickname: local_nickname) end diff --git a/test/user_test.exs b/test/user_test.exs index 6a081c5c5..8225453ab 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -278,6 +278,25 @@ test "gets an existing user, case insensitive" do assert user == fetched_user end + + test "gets an existing user by fully qualified nickname" do + user = insert(:user) + + fetched_user = + User.get_or_fetch_by_nickname(user.nickname <> "@" <> Pleroma.Web.Endpoint.host()) + + assert user == fetched_user + end + + test "gets an existing user by fully qualified nickname, case insensitive" do + user = insert(:user, nickname: "nick") + casing_altered_fqn = String.upcase(user.nickname <> "@" <> Pleroma.Web.Endpoint.host()) + + fetched_user = User.get_or_fetch_by_nickname(casing_altered_fqn) + + assert user == fetched_user + end + test "fetches an external user via ostatus if no user exists" do fetched_user = User.get_or_fetch_by_nickname("shp@social.heldscal.la") assert fetched_user.nickname == "shp@social.heldscal.la"