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

Default to private room visibility rather than public when a client does not specify one, according to spec. #12350

Merged
merged 4 commits into from
Apr 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/12350.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Default to `private` room visibility rather than `public` when a client does not specify one, according to spec.
4 changes: 3 additions & 1 deletion synapse/handlers/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -771,7 +771,9 @@ async def create_room(
% (user_id,),
)

visibility = config.get("visibility", None)
# The spec says rooms should default to private visibility if
# `visibility` is not specified.
visibility = config.get("visibility", "private")
is_public = visibility == "public"

room_id = await self._generate_room_id(
Expand Down
2 changes: 1 addition & 1 deletion tests/module_api/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ def test_public_rooms(self):
# Create a user and room to play with
user_id = self.register_user("kermit", "monkey")
tok = self.login("kermit", "monkey")
room_id = self.helper.create_room_as(user_id, tok=tok)
room_id = self.helper.create_room_as(user_id, tok=tok, is_public=False)

# The room should not currently be in the public rooms directory
is_in_public_rooms = self.get_success(
Expand Down
11 changes: 7 additions & 4 deletions tests/rest/client/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ def create_room_as(
def create_room_as(
self,
room_creator: Optional[str] = None,
is_public: Optional[bool] = None,
is_public: Optional[bool] = True,
room_version: Optional[str] = None,
tok: Optional[str] = None,
expect_code: int = HTTPStatus.OK,
Expand All @@ -101,9 +101,12 @@ def create_room_as(
Args:
room_creator: The user ID to create the room with.
is_public: If True, the `visibility` parameter will be set to
"public". If False, it will be set to "private". If left
unspecified, the server will set it to an appropriate default
(which should be "private" as per the CS spec).
"public". If False, it will be set to "private".
If None, doesn't specify the `visibility` parameter in which
case the server is supposed to make the room private according to
the CS API.
Defaults to public, since that is commonly needed in tests
for convenience where room privacy is not a problem.
room_version: The room version to create the room as. Defaults to Synapse's
default room version.
tok: The access token to use in the request.
Expand Down
4 changes: 3 additions & 1 deletion tests/storage/test_cleanup_extrems.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,9 @@ def prepare(self, reactor, clock, homeserver):
self.user = UserID.from_string(self.register_user("user1", "password"))
self.token1 = self.login("user1", "password")
self.requester = create_requester(self.user)
info, _ = self.get_success(self.room_creator.create_room(self.requester, {}))
info, _ = self.get_success(
self.room_creator.create_room(self.requester, {"visibility": "public"})
)
self.room_id = info["room_id"]
self.event_creator = homeserver.get_event_creation_handler()
homeserver.config.consent.user_consent_version = self.CONSENT_VERSION
Expand Down