Skip to content

Commit b9ea228

Browse files
richvdhsandhose
andauthored
Add stable support for MSC4380 invite blocking. (#19431)
MSC4380 has now completed FCP, so we can add stable support for it. Co-authored-by: Quentin Gliech <[email protected]>
1 parent 9de28df commit b9ea228

File tree

7 files changed

+19
-52
lines changed

7 files changed

+19
-52
lines changed

changelog.d/19431.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add stable support for [MSC4380](https://github.com/matrix-org/matrix-spec-proposals/pull/4380) invite blocking.

synapse/api/constants.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,9 +325,7 @@ class AccountDataTypes:
325325
"org.matrix.msc4155.invite_permission_config"
326326
)
327327
# MSC4380: Invite blocking
328-
MSC4380_INVITE_PERMISSION_CONFIG: Final = (
329-
"org.matrix.msc4380.invite_permission_config"
330-
)
328+
INVITE_PERMISSION_CONFIG: Final = "m.invite_permission_config"
331329
# Synapse-specific behaviour. See "Client-Server API Extensions" documentation
332330
# in Admin API for more information.
333331
SYNAPSE_ADMIN_CLIENT_CONFIG: Final = "io.element.synapse.admin_client_config"

synapse/api/errors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class Codes(str, Enum):
138138
KEY_TOO_LARGE = "M_KEY_TOO_LARGE"
139139

140140
# Part of MSC4155/MSC4380
141-
INVITE_BLOCKED = "ORG.MATRIX.MSC4155.M_INVITE_BLOCKED"
141+
INVITE_BLOCKED = "M_INVITE_BLOCKED"
142142

143143
# Part of MSC4190
144144
APPSERVICE_LOGIN_UNSUPPORTED = "IO.ELEMENT.MSC4190.M_APPSERVICE_LOGIN_UNSUPPORTED"

synapse/config/experimental.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,3 @@ def read_config(
606606
# Note that sticky events persisted before this feature is enabled will not be
607607
# considered sticky by the local homeserver.
608608
self.msc4354_enabled: bool = experimental.get("msc4354_enabled", False)
609-
610-
# MSC4380: Invite blocking
611-
self.msc4380_enabled: bool = experimental.get("msc4380_enabled", False)

synapse/rest/client/versions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ async def on_GET(self, request: SynapseRequest) -> tuple[int, JsonDict]:
187187
# MSC4354: Sticky events
188188
"org.matrix.msc4354": self.config.experimental.msc4354_enabled,
189189
# MSC4380: Invite blocking
190-
"org.matrix.msc4380": self.config.experimental.msc4380_enabled,
190+
"org.matrix.msc4380.stable": True,
191191
},
192192
},
193193
)

synapse/storage/databases/main/account_data.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ def __init__(
109109
)
110110

111111
self._msc4155_enabled = hs.config.experimental.msc4155_enabled
112-
self._msc4380_enabled = hs.config.experimental.msc4380_enabled
113112

114113
def get_max_account_data_stream_id(self) -> int:
115114
"""Get the current max stream ID for account data stream
@@ -573,14 +572,13 @@ async def get_invite_config_for_user(self, user_id: str) -> InviteRulesConfig:
573572
Args:
574573
user_id: The user whose invite configuration should be returned.
575574
"""
576-
if self._msc4380_enabled:
577-
data = await self.get_global_account_data_by_type_for_user(
578-
user_id, AccountDataTypes.MSC4380_INVITE_PERMISSION_CONFIG
579-
)
580-
# If the user has an MSC4380-style config setting, prioritise that
581-
# above an MSC4155 one
582-
if data is not None:
583-
return MSC4380InviteRulesConfig.from_account_data(data)
575+
data = await self.get_global_account_data_by_type_for_user(
576+
user_id, AccountDataTypes.INVITE_PERMISSION_CONFIG
577+
)
578+
# If the user has an MSC4380-style config setting, prioritise that
579+
# above an MSC4155 one
580+
if data is not None:
581+
return MSC4380InviteRulesConfig.from_account_data(data)
584582

585583
if self._msc4155_enabled:
586584
data = await self.get_global_account_data_by_type_for_user(

tests/handlers/test_room_member.py

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ def test_misc4155_block_invite_local(self) -> None:
503503
SynapseError,
504504
).value
505505
self.assertEqual(f.code, 403)
506-
self.assertEqual(f.errcode, "ORG.MATRIX.MSC4155.M_INVITE_BLOCKED")
506+
self.assertEqual(f.errcode, "M_INVITE_BLOCKED")
507507

508508
@override_config({"experimental_features": {"msc4155_enabled": False}})
509509
def test_msc4155_disabled_allow_invite_local(self) -> None:
@@ -573,7 +573,7 @@ def test_msc4155_block_invite_remote(self) -> None:
573573
SynapseError,
574574
).value
575575
self.assertEqual(f.code, 403)
576-
self.assertEqual(f.errcode, "ORG.MATRIX.MSC4155.M_INVITE_BLOCKED")
576+
self.assertEqual(f.errcode, "M_INVITE_BLOCKED")
577577

578578
@override_config({"experimental_features": {"msc4155_enabled": True}})
579579
def test_msc4155_block_invite_remote_server(self) -> None:
@@ -619,7 +619,7 @@ def test_msc4155_block_invite_remote_server(self) -> None:
619619
SynapseError,
620620
).value
621621
self.assertEqual(f.code, 403)
622-
self.assertEqual(f.errcode, "ORG.MATRIX.MSC4155.M_INVITE_BLOCKED")
622+
self.assertEqual(f.errcode, "M_INVITE_BLOCKED")
623623

624624

625625
class TestMSC4380InviteBlocking(FederatingHomeserverTestCase):
@@ -642,15 +642,14 @@ def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
642642
self.bob = self.register_user("bob", "pass")
643643
self.bob_token = self.login("bob", "pass")
644644

645-
@override_config({"experimental_features": {"msc4380_enabled": True}})
646645
def test_misc4380_block_invite_local(self) -> None:
647646
"""Test that MSC4380 will block a user from being invited to a room"""
648647
room_id = self.helper.create_room_as(self.alice, tok=self.alice_token)
649648

650649
self.get_success(
651650
self.store.add_account_data_for_user(
652651
self.bob,
653-
AccountDataTypes.MSC4380_INVITE_PERMISSION_CONFIG,
652+
AccountDataTypes.INVITE_PERMISSION_CONFIG,
654653
{
655654
"default_action": "block",
656655
},
@@ -667,17 +666,16 @@ def test_misc4380_block_invite_local(self) -> None:
667666
SynapseError,
668667
).value
669668
self.assertEqual(f.code, 403)
670-
self.assertEqual(f.errcode, "ORG.MATRIX.MSC4155.M_INVITE_BLOCKED")
669+
self.assertEqual(f.errcode, "M_INVITE_BLOCKED")
671670

672-
@override_config({"experimental_features": {"msc4380_enabled": True}})
673671
def test_misc4380_non_string_setting(self) -> None:
674672
"""Test that `default_action` being set to something non-stringy is the same as "accept"."""
675673
room_id = self.helper.create_room_as(self.alice, tok=self.alice_token)
676674

677675
self.get_success(
678676
self.store.add_account_data_for_user(
679677
self.bob,
680-
AccountDataTypes.MSC4380_INVITE_PERMISSION_CONFIG,
678+
AccountDataTypes.INVITE_PERMISSION_CONFIG,
681679
{
682680
"default_action": 1,
683681
},
@@ -693,31 +691,6 @@ def test_misc4380_non_string_setting(self) -> None:
693691
)
694692
)
695693

696-
@override_config({"experimental_features": {"msc4380_enabled": False}})
697-
def test_msc4380_disabled_allow_invite_local(self) -> None:
698-
"""Test that, when MSC4380 is not enabled, invites are accepted as normal"""
699-
room_id = self.helper.create_room_as(self.alice, tok=self.alice_token)
700-
701-
self.get_success(
702-
self.store.add_account_data_for_user(
703-
self.bob,
704-
AccountDataTypes.MSC4380_INVITE_PERMISSION_CONFIG,
705-
{
706-
"default_action": "block",
707-
},
708-
)
709-
)
710-
711-
self.get_success(
712-
self.handler.update_membership(
713-
requester=create_requester(self.alice),
714-
target=UserID.from_string(self.bob),
715-
room_id=room_id,
716-
action=Membership.INVITE,
717-
),
718-
)
719-
720-
@override_config({"experimental_features": {"msc4380_enabled": True}})
721694
def test_msc4380_block_invite_remote(self) -> None:
722695
"""Test that MSC4380 will block a user from being invited to a room by a remote user."""
723696
# A remote user who sends the invite
@@ -727,7 +700,7 @@ def test_msc4380_block_invite_remote(self) -> None:
727700
self.get_success(
728701
self.store.add_account_data_for_user(
729702
self.bob,
730-
AccountDataTypes.MSC4380_INVITE_PERMISSION_CONFIG,
703+
AccountDataTypes.INVITE_PERMISSION_CONFIG,
731704
{"default_action": "block"},
732705
)
733706
)
@@ -761,4 +734,4 @@ def test_msc4380_block_invite_remote(self) -> None:
761734
SynapseError,
762735
).value
763736
self.assertEqual(f.code, 403)
764-
self.assertEqual(f.errcode, "ORG.MATRIX.MSC4155.M_INVITE_BLOCKED")
737+
self.assertEqual(f.errcode, "M_INVITE_BLOCKED")

0 commit comments

Comments
 (0)