Skip to content

Commit db710cf

Browse files
authored
Add forget_forced_upon_leave capability as per MSC4267 (#18196)
This adds the capability from matrix-org/matrix-spec-proposals#4267 under an experimental feature. Signed-off-by: Johannes Marbach <[email protected]>
1 parent de29c13 commit db710cf

File tree

5 files changed

+50
-1
lines changed

5 files changed

+50
-1
lines changed

changelog.d/18196.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add `forget_forced_upon_leave` capability as per [MSC4267](https://github.com/matrix-org/matrix-spec-proposals/pull/4267).

synapse/config/experimental.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,5 +567,8 @@ def read_config(
567567
False,
568568
)
569569

570+
# MSC4267: Automatically forgetting rooms on leave
571+
self.msc4267_enabled: bool = experimental.get("msc4267_enabled", False)
572+
570573
# MSC4155: Invite filtering
571574
self.msc4155_enabled: bool = experimental.get("msc4155_enabled", False)

synapse/config/room.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,4 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:
8585

8686
# When enabled, users will forget rooms when they leave them, either via a
8787
# leave, kick or ban.
88-
self.forget_on_leave = config.get("forget_rooms_on_leave", False)
88+
self.forget_on_leave: bool = config.get("forget_rooms_on_leave", False)

synapse/rest/client/capabilities.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
109109
"disallowed"
110110
] = disallowed
111111

112+
if self.config.experimental.msc4267_enabled:
113+
response["capabilities"]["org.matrix.msc4267.forget_forced_upon_leave"] = {
114+
"enabled": self.config.room.forget_on_leave,
115+
}
116+
112117
return HTTPStatus.OK, response
113118

114119

tests/rest/client/test_capabilities.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,3 +264,43 @@ def test_get_get_token_login_fields_when_enabled(self) -> None:
264264

265265
self.assertEqual(channel.code, HTTPStatus.OK)
266266
self.assertTrue(capabilities["m.get_login_token"]["enabled"])
267+
268+
@override_config(
269+
{
270+
"experimental_features": {"msc4267_enabled": True},
271+
"forget_rooms_on_leave": True,
272+
}
273+
)
274+
def test_get_forget_forced_upon_leave_with_auto_forget(self) -> None:
275+
# Server auto-forgets on /leave, expect enabled client capability
276+
access_token = self.get_success(
277+
self.auth_handler.create_access_token_for_user_id(
278+
self.user, device_id=None, valid_until_ms=None
279+
)
280+
)
281+
channel = self.make_request("GET", self.url, access_token=access_token)
282+
capabilities = channel.json_body["capabilities"]
283+
self.assertEqual(channel.code, HTTPStatus.OK)
284+
self.assertTrue(
285+
capabilities["org.matrix.msc4267.forget_forced_upon_leave"]["enabled"]
286+
)
287+
288+
@override_config(
289+
{
290+
"experimental_features": {"msc4267_enabled": True},
291+
"forget_rooms_on_leave": False,
292+
}
293+
)
294+
def test_get_forget_forced_upon_leave_without_auto_forget(self) -> None:
295+
# Server doesn't auto-forget on /leave, expect disabled client capability
296+
access_token = self.get_success(
297+
self.auth_handler.create_access_token_for_user_id(
298+
self.user, device_id=None, valid_until_ms=None
299+
)
300+
)
301+
channel = self.make_request("GET", self.url, access_token=access_token)
302+
capabilities = channel.json_body["capabilities"]
303+
self.assertEqual(channel.code, HTTPStatus.OK)
304+
self.assertFalse(
305+
capabilities["org.matrix.msc4267.forget_forced_upon_leave"]["enabled"]
306+
)

0 commit comments

Comments
 (0)