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

Commit 9e5ab6d

Browse files
authored
Remove the experimental flag for knocking and use stable prefixes / endpoints. (#10167)
* Room version 7 for knocking. * Stable prefixes and endpoints (both client and federation) for knocking. * Removes the experimental configuration flag.
1 parent aac2c49 commit 9e5ab6d

File tree

13 files changed

+33
-96
lines changed

13 files changed

+33
-96
lines changed

changelog.d/10167.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Implement "room knocking" as per [MSC2403](https://github.com/matrix-org/matrix-doc/pull/2403). Contributed by Sorunome and anoa.

synapse/api/constants.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class Membership:
4141

4242
INVITE = "invite"
4343
JOIN = "join"
44-
KNOCK = "xyz.amorgan.knock"
44+
KNOCK = "knock"
4545
LEAVE = "leave"
4646
BAN = "ban"
4747
LIST = (INVITE, JOIN, KNOCK, LEAVE, BAN)
@@ -58,7 +58,7 @@ class PresenceState:
5858

5959
class JoinRules:
6060
PUBLIC = "public"
61-
KNOCK = "xyz.amorgan.knock"
61+
KNOCK = "knock"
6262
INVITE = "invite"
6363
PRIVATE = "private"
6464
# As defined for MSC3083.

synapse/api/room_versions.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,9 @@ class RoomVersions:
180180
msc3083_join_rules=True,
181181
msc2403_knocking=False,
182182
)
183-
MSC2403 = RoomVersion(
184-
"xyz.amorgan.knock",
185-
RoomDisposition.UNSTABLE,
183+
V7 = RoomVersion(
184+
"7",
185+
RoomDisposition.STABLE,
186186
EventFormatVersions.V3,
187187
StateResolutionVersions.V2,
188188
enforce_key_validity=True,
@@ -206,6 +206,7 @@ class RoomVersions:
206206
RoomVersions.V6,
207207
RoomVersions.MSC2176,
208208
RoomVersions.MSC3083,
209+
RoomVersions.V7,
209210
)
210211
# Note that we do not include MSC2043 here unless it is enabled in the config.
211212
} # type: Dict[str, RoomVersion]

synapse/config/experimental.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS, RoomVersions
1615
from synapse.config._base import Config
1716
from synapse.types import JsonDict
1817

@@ -30,9 +29,3 @@ def read_config(self, config: JsonDict, **kwargs):
3029

3130
# MSC3026 (busy presence state)
3231
self.msc3026_enabled = experimental.get("msc3026_enabled", False) # type: bool
33-
34-
# MSC2403 (room knocking)
35-
self.msc2403_enabled = experimental.get("msc2403_enabled", False) # type: bool
36-
if self.msc2403_enabled:
37-
# Enable the MSC2403 unstable room version
38-
KNOWN_ROOM_VERSIONS[RoomVersions.MSC2403.identifier] = RoomVersions.MSC2403

synapse/federation/federation_client.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ def __init__(self, hs: "HomeServer"):
9090
self._clock.looping_call(self._clear_tried_cache, 60 * 1000)
9191
self.state = hs.get_state_handler()
9292
self.transport_layer = hs.get_federation_transport_client()
93-
self._msc2403_enabled = hs.config.experimental.msc2403_enabled
9493

9594
self.hostname = hs.hostname
9695
self.signing_key = hs.signing_key
@@ -621,11 +620,7 @@ async def make_membership_event(
621620
SynapseError: if the chosen remote server returns a 300/400 code, or
622621
no servers successfully handle the request.
623622
"""
624-
valid_memberships = {Membership.JOIN, Membership.LEAVE}
625-
626-
# Allow knocking if the feature is enabled
627-
if self._msc2403_enabled:
628-
valid_memberships.add(Membership.KNOCK)
623+
valid_memberships = {Membership.JOIN, Membership.LEAVE, Membership.KNOCK}
629624

630625
if membership not in valid_memberships:
631626
raise RuntimeError(
@@ -989,7 +984,7 @@ async def send_request(destination: str) -> JsonDict:
989984
return await self._do_send_knock(destination, pdu)
990985

991986
return await self._try_destination_list(
992-
"xyz.amorgan.knock/send_knock", destinations, send_request
987+
"send_knock", destinations, send_request
993988
)
994989

995990
async def _do_send_knock(self, destination: str, pdu: EventBase) -> JsonDict:

synapse/federation/transport/client.py

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ class TransportLayerClient:
4747
def __init__(self, hs):
4848
self.server_name = hs.hostname
4949
self.client = hs.get_federation_http_client()
50-
self._msc2403_enabled = hs.config.experimental.msc2403_enabled
5150

5251
@log_function
5352
def get_room_state_ids(self, destination, room_id, event_id):
@@ -221,29 +220,14 @@ async def make_membership_event(
221220
Fails with ``FederationDeniedError`` if the remote destination
222221
is not in our federation whitelist
223222
"""
224-
valid_memberships = {Membership.JOIN, Membership.LEAVE}
225-
226-
# Allow knocking if the feature is enabled
227-
if self._msc2403_enabled:
228-
valid_memberships.add(Membership.KNOCK)
223+
valid_memberships = {Membership.JOIN, Membership.LEAVE, Membership.KNOCK}
229224

230225
if membership not in valid_memberships:
231226
raise RuntimeError(
232227
"make_membership_event called with membership='%s', must be one of %s"
233228
% (membership, ",".join(valid_memberships))
234229
)
235-
236-
# Knock currently uses an unstable prefix
237-
if membership == Membership.KNOCK:
238-
# Create a path in the form of /unstable/xyz.amorgan.knock/make_knock/...
239-
path = _create_path(
240-
FEDERATION_UNSTABLE_PREFIX + "/xyz.amorgan.knock",
241-
"/make_knock/%s/%s",
242-
room_id,
243-
user_id,
244-
)
245-
else:
246-
path = _create_v1_path("/make_%s/%s/%s", membership, room_id, user_id)
230+
path = _create_v1_path("/make_%s/%s/%s", membership, room_id, user_id)
247231

248232
ignore_backoff = False
249233
retry_on_dns_fail = False
@@ -366,12 +350,7 @@ async def send_knock_v1(
366350
367351
The list of state events may be empty.
368352
"""
369-
path = _create_path(
370-
FEDERATION_UNSTABLE_PREFIX + "/xyz.amorgan.knock",
371-
"/send_knock/%s/%s",
372-
room_id,
373-
event_id,
374-
)
353+
path = _create_v1_path("/send_knock/%s/%s", room_id, event_id)
375354

376355
return await self.client.put_json(
377356
destination=destination, path=path, data=content

synapse/federation/transport/server.py

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -567,8 +567,6 @@ async def on_PUT(self, origin, content, query, room_id, event_id):
567567
class FederationMakeKnockServlet(BaseFederationServerServlet):
568568
PATH = "/make_knock/(?P<room_id>[^/]*)/(?P<user_id>[^/]*)"
569569

570-
PREFIX = FEDERATION_UNSTABLE_PREFIX + "/xyz.amorgan.knock"
571-
572570
async def on_GET(self, origin, content, query, room_id, user_id):
573571
try:
574572
# Retrieve the room versions the remote homeserver claims to support
@@ -585,8 +583,6 @@ async def on_GET(self, origin, content, query, room_id, user_id):
585583
class FederationV1SendKnockServlet(BaseFederationServerServlet):
586584
PATH = "/send_knock/(?P<room_id>[^/]*)/(?P<event_id>[^/]*)"
587585

588-
PREFIX = FEDERATION_UNSTABLE_PREFIX + "/xyz.amorgan.knock"
589-
590586
async def on_PUT(self, origin, content, query, room_id, event_id):
591587
content = await self.handler.on_send_knock_request(origin, content, room_id)
592588
return 200, content
@@ -1610,6 +1606,8 @@ async def on_GET(self, origin, content, query, room_id):
16101606
FederationVersionServlet,
16111607
RoomComplexityServlet,
16121608
FederationSpaceSummaryServlet,
1609+
FederationV1SendKnockServlet,
1610+
FederationMakeKnockServlet,
16131611
) # type: Tuple[Type[BaseFederationServlet], ...]
16141612

16151613
OPENID_SERVLET_CLASSES = (
@@ -1652,12 +1650,6 @@ async def on_GET(self, origin, content, query, room_id):
16521650
) # type: Tuple[Type[BaseFederationServlet], ...]
16531651

16541652

1655-
MSC2403_SERVLET_CLASSES = (
1656-
FederationV1SendKnockServlet,
1657-
FederationMakeKnockServlet,
1658-
)
1659-
1660-
16611653
DEFAULT_SERVLET_GROUPS = (
16621654
"federation",
16631655
"room_list",
@@ -1700,16 +1692,6 @@ def register_servlets(
17001692
server_name=hs.hostname,
17011693
).register(resource)
17021694

1703-
# Register msc2403 (knocking) servlets if the feature is enabled
1704-
if hs.config.experimental.msc2403_enabled:
1705-
for servletclass in MSC2403_SERVLET_CLASSES:
1706-
servletclass(
1707-
hs=hs,
1708-
authenticator=authenticator,
1709-
ratelimiter=ratelimiter,
1710-
server_name=hs.hostname,
1711-
).register(resource)
1712-
17131695
if "openid" in servlet_groups:
17141696
for servletclass in OPENID_SERVLET_CLASSES:
17151697
servletclass(

synapse/handlers/federation.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,8 +2009,7 @@ async def on_make_knock_request(
20092009
"""
20102010
if get_domain_from_id(user_id) != origin:
20112011
logger.info(
2012-
"Get /xyz.amorgan.knock/make_knock request for user %r"
2013-
"from different origin %s, ignoring",
2012+
"Get /make_knock request for user %r from different origin %s, ignoring",
20142013
user_id,
20152014
origin,
20162015
)
@@ -2077,8 +2076,7 @@ async def on_send_knock_request(
20772076

20782077
if get_domain_from_id(event.sender) != origin:
20792078
logger.info(
2080-
"Got /xyz.amorgan.knock/send_knock request for user %r "
2081-
"from different origin %s",
2079+
"Got /send_knock request for user %r from different origin %s",
20822080
event.sender,
20832081
origin,
20842082
)

synapse/handlers/room_member.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -707,10 +707,7 @@ async def update_membership_locked(
707707
knock.event_id, txn_id, requester, content
708708
)
709709

710-
elif (
711-
self.config.experimental.msc2403_enabled
712-
and effective_membership_state == Membership.KNOCK
713-
):
710+
elif effective_membership_state == Membership.KNOCK:
714711
if not is_host_in_room:
715712
# The knock needs to be sent over federation instead
716713
remote_room_hosts.append(get_domain_from_id(room_id))

synapse/rest/__init__.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,7 @@ def register_servlets(client_resource, hs):
121121
account_validity.register_servlets(hs, client_resource)
122122
relations.register_servlets(hs, client_resource)
123123
password_policy.register_servlets(hs, client_resource)
124-
125-
# Register msc2403 (knocking) servlets if the feature is enabled
126-
if hs.config.experimental.msc2403_enabled:
127-
knock.register_servlets(hs, client_resource)
124+
knock.register_servlets(hs, client_resource)
128125

129126
# moving to /_synapse/admin
130127
admin.register_servlets_for_client_rest_resource(hs, client_resource)

0 commit comments

Comments
 (0)