Skip to content

Commit 526b875

Browse files
Make the Make Room Admin API choose to puppet the room creator in v12 rooms (#18805)
1 parent 3db9fa3 commit 526b875

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

changelog.d/18805.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix bug where the [Make Room Admin API](https://element-hq.github.io/synapse/latest/admin_api/rooms.html#make-room-admin-api) would not treat a room v12's creator power level as the highest in room.

synapse/rest/admin/rooms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ async def on_POST(
634634
for creator in creators:
635635
if self.is_mine_id(creator):
636636
# include the creator as they won't be in the PL users map.
637-
admin_users.insert(0, creator)
637+
admin_users.append(creator)
638638

639639
if not admin_users:
640640
raise SynapseError(

tests/rest/admin/test_room.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2917,6 +2917,39 @@ def test_v12_room(self) -> None:
29172917
)
29182918
self.assertEquals(pl["users"][self.admin_user], 100)
29192919

2920+
def test_v12_room_with_many_user_pls(self) -> None:
2921+
"""Test that you can be promoted to the admin user's PL in v12 rooms that contain a range of user PLs."""
2922+
room_id = self.helper.create_room_as(
2923+
self.creator,
2924+
tok=self.creator_tok,
2925+
room_version=RoomVersions.V12.identifier,
2926+
is_public=True,
2927+
extra_content={
2928+
"power_level_content_override": {
2929+
"users": {
2930+
self.second_user_id: 50,
2931+
},
2932+
},
2933+
},
2934+
)
2935+
2936+
self.helper.join(room_id, self.admin_user, tok=self.admin_user_tok)
2937+
self.helper.join(room_id, self.second_user_id, tok=self.second_tok)
2938+
2939+
channel = self.make_request(
2940+
"POST",
2941+
f"/_synapse/admin/v1/rooms/{room_id}/make_room_admin",
2942+
content={},
2943+
access_token=self.admin_user_tok,
2944+
)
2945+
2946+
self.assertEqual(200, channel.code, msg=channel.json_body)
2947+
2948+
pl = self.helper.get_state(
2949+
room_id, EventTypes.PowerLevels, tok=self.creator_tok
2950+
)
2951+
self.assertEquals(pl["users"][self.admin_user], 100)
2952+
29202953

29212954
class BlockRoomTestCase(unittest.HomeserverTestCase):
29222955
servlets = [

0 commit comments

Comments
 (0)