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

Commit 78a3111

Browse files
andrewdohclokepanoadragon453babolivier
authored
Return 404 or member list when getting joined_members after leaving (#13374)
Signed-off-by: Andrew Doh <andrewddo@gmail.com> Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com> Co-authored-by: Andrew Morgan <andrewm@element.io> Co-authored-by: Brendan Abolivier <babolivier@matrix.org>
1 parent 503a958 commit 78a3111

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

changelog.d/13374.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix a bug introduced in Synapse 0.24.0 that would respond with the wrong error status code to `/joined_members` requests when the requester is not a current member of the room. Contributed by @andrewdoh.

synapse/handlers/message.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,10 @@ async def get_joined_members(self, requester: Requester, room_id: str) -> dict:
324324
room_id, user_id, allow_departed_users=True
325325
)
326326
if membership != Membership.JOIN:
327-
raise NotImplementedError(
328-
"Getting joined members after leaving is not implemented"
327+
raise SynapseError(
328+
code=403,
329+
errcode=Codes.FORBIDDEN,
330+
msg="Getting joined members while not being a current member of the room is forbidden.",
329331
)
330332

331333
users_with_profile = await self.store.get_users_in_room_with_profiles(room_id)

tests/rest/admin/test_room.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1772,6 +1772,21 @@ def _set_canonical_alias(
17721772
tok=admin_user_tok,
17731773
)
17741774

1775+
def test_get_joined_members_after_leave_room(self) -> None:
1776+
"""Test that requesting room members after leaving the room raises a 403 error."""
1777+
1778+
# create the room
1779+
user = self.register_user("foo", "pass")
1780+
user_tok = self.login("foo", "pass")
1781+
room_id = self.helper.create_room_as(user, tok=user_tok)
1782+
self.helper.leave(room_id, user, tok=user_tok)
1783+
1784+
# delete the rooms and get joined roomed membership
1785+
url = f"/_matrix/client/r0/rooms/{room_id}/joined_members"
1786+
channel = self.make_request("GET", url.encode("ascii"), access_token=user_tok)
1787+
self.assertEqual(HTTPStatus.FORBIDDEN, channel.code, msg=channel.json_body)
1788+
self.assertEqual(Codes.FORBIDDEN, channel.json_body["errcode"])
1789+
17751790

17761791
class JoinAliasRoomTestCase(unittest.HomeserverTestCase):
17771792

0 commit comments

Comments
 (0)