Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Allow Synapse Admin API's Room Search to accept non-ASCII characters (#…
Browse files Browse the repository at this point in the history
…10859)

* add tests for checking if room search works with non-ascii char

* change encoding on parse_string to UTF-8

* lints

* properly encode search term

* lints

* add changelog file

* update changelog number

* set changelog entry filetype to .bugfix

* Revert "set changelog entry filetype to .bugfix"

This reverts commit be8e5a3.

* update changelog message and file type

* change parse_string default encoding back to ascii and update room search admin api calll to parse string

* refactor tests

* Update tests/rest/admin/test_room.py

Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>

Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
  • Loading branch information
H-Shay and clokep authored Sep 21, 2021
1 parent ee557b5 commit 5fca3c8
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
1 change: 1 addition & 0 deletions changelog.d/10859.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix a bug in Unicode support of the room search admin API. It is now possible to search for rooms with non-ASCII characters.
2 changes: 1 addition & 1 deletion synapse/rest/admin/rooms.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
errcode=Codes.INVALID_PARAM,
)

search_term = parse_string(request, "search_term")
search_term = parse_string(request, "search_term", encoding="utf-8")
if search_term == "":
raise SynapseError(
400,
Expand Down
27 changes: 27 additions & 0 deletions tests/rest/admin/test_room.py
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,33 @@ def _search_test(
_search_test(None, "bar")
_search_test(None, "", expected_http_code=400)

def test_search_term_non_ascii(self):
"""Test that searching for a room with non-ASCII characters works correctly"""

# Create test room
room_id = self.helper.create_room_as(self.admin_user, tok=self.admin_user_tok)
room_name = "ж"

# Set the name for the room
self.helper.send_state(
room_id,
"m.room.name",
{"name": room_name},
tok=self.admin_user_tok,
)

# make the request and test that the response is what we wanted
search_term = urllib.parse.quote("ж", "utf-8")
url = "/_synapse/admin/v1/rooms?search_term=%s" % (search_term,)
channel = self.make_request(
"GET",
url.encode("ascii"),
access_token=self.admin_user_tok,
)
self.assertEqual(200, channel.code, msg=channel.json_body)
self.assertEqual(room_id, channel.json_body.get("rooms")[0].get("room_id"))
self.assertEqual("ж", channel.json_body.get("rooms")[0].get("name"))

def test_single_room(self):
"""Test that a single room can be requested correctly"""
# Create two test rooms
Expand Down

0 comments on commit 5fca3c8

Please sign in to comment.