From cc4f2c0fb9f05320ef7ecff707d02215f6655381 Mon Sep 17 00:00:00 2001 From: Adam Jedrzejewski Date: Sun, 24 Dec 2023 21:00:12 +0100 Subject: [PATCH 1/3] search non ascii display names using admin API Signed-off-by: Adam Jedrzejewski --- synapse/rest/admin/users.py | 2 +- tests/rest/admin/test_user.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/synapse/rest/admin/users.py b/synapse/rest/admin/users.py index 4059039bab7..b0f2f8d92d2 100644 --- a/synapse/rest/admin/users.py +++ b/synapse/rest/admin/users.py @@ -107,7 +107,7 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]: ) user_id = parse_string(request, "user_id") - name = parse_string(request, "name") + name = parse_string(request, "name", encoding="utf-8") guests = parse_boolean(request, "guests", default=True) if self._msc3861_enabled and guests: diff --git a/tests/rest/admin/test_user.py b/tests/rest/admin/test_user.py index 3caca98a35e..cff1f159400 100644 --- a/tests/rest/admin/test_user.py +++ b/tests/rest/admin/test_user.py @@ -1638,8 +1638,17 @@ def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None: ) ) + self.non_ascii_displayname = "ąćęłńóśżźäöüß中国日本" + self.non_ascii_user = self.register_user( + "nonascii", "nonascii", displayname=self.non_ascii_displayname + ) + self.url_prefix = "/_synapse/admin/v2/users/%s" self.url_other_user = self.url_prefix % self.other_user + self.url_non_ascii_user = ( + "/_synapse/admin/v2/users?name=%s" + % urllib.parse.quote(self.non_ascii_displayname) + ) def test_requester_is_no_admin(self) -> None: """ @@ -1790,6 +1799,20 @@ def test_get_user(self) -> None: self.assertEqual("User", channel.json_body["displayname"]) self._check_fields(channel.json_body) + def test_get_user_nonascii_displayname(self) -> None: + """ + Test get user by non-ascii display name + """ + channel = self.make_request( + "GET", + self.url_non_ascii_user, + access_token=self.admin_user_tok, + ) + + users = {user["name"]: user for user in channel.json_body["users"]} + self.assertEqual(200, channel.code, msg=channel.json_body) + self.assertIn(self.non_ascii_user, users, channel.json_body["users"]) + def test_create_server_admin(self) -> None: """ Check that a new admin user is created successfully. From ebb480435115a72f761f938b37847b4894600b3a Mon Sep 17 00:00:00 2001 From: Adam Jedrzejewski Date: Mon, 25 Dec 2023 12:42:47 +0100 Subject: [PATCH 2/3] Add changelog 16767.bugfix --- changelog.d/16767.bugfix | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelog.d/16767.bugfix diff --git a/changelog.d/16767.bugfix b/changelog.d/16767.bugfix new file mode 100644 index 00000000000..5bb4fe0b77b --- /dev/null +++ b/changelog.d/16767.bugfix @@ -0,0 +1,2 @@ +Fix a bug that prevented users from being queried by display name if it contains non-ASCII characters. + From 8c60a5ddd87a00fe00c2ee8d18fb0f55f7b7fb4f Mon Sep 17 00:00:00 2001 From: Adam Jedrzejewski Date: Mon, 25 Dec 2023 12:44:04 +0100 Subject: [PATCH 3/3] Upadte 16767.bugfix --- changelog.d/16767.bugfix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/16767.bugfix b/changelog.d/16767.bugfix index 5bb4fe0b77b..b1fa1285ef6 100644 --- a/changelog.d/16767.bugfix +++ b/changelog.d/16767.bugfix @@ -1,2 +1,2 @@ -Fix a bug that prevented users from being queried by display name if it contains non-ASCII characters. +Fixed a bug that prevented users from being queried by display name if it contains non-ASCII characters.