From 0dc87d16490e3484ba877f3a265b16047b5096e0 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 20 Jul 2021 16:14:10 +0100 Subject: [PATCH 1/8] Send unstable-prefixed room_type in store-invite IS API requests Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- synapse/handlers/identity.py | 3 +++ synapse/handlers/room_member.py | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/synapse/handlers/identity.py b/synapse/handlers/identity.py index 0961dec5ab5c..ee97d12717e7 100644 --- a/synapse/handlers/identity.py +++ b/synapse/handlers/identity.py @@ -824,6 +824,7 @@ async def ask_id_server_for_third_party_invite( room_avatar_url: str, room_join_rules: str, room_name: str, + room_type: str, inviter_display_name: str, inviter_avatar_url: str, id_access_token: Optional[str] = None, @@ -843,6 +844,7 @@ async def ask_id_server_for_third_party_invite( notifications. room_join_rules: The join rules of the email (e.g. "public"). room_name: The m.room.name of the room. + room_type: The type of the room from its m.room.create event (e.g "m.space"). inviter_display_name: The current display name of the inviter. inviter_avatar_url: The URL of the inviter's avatar. @@ -868,6 +870,7 @@ async def ask_id_server_for_third_party_invite( "sender": inviter_user_id, "sender_display_name": inviter_display_name, "sender_avatar_url": inviter_avatar_url, + "org.matrix.mscxxxx.room_type": room_type, # MSCXXXX } # If a custom web client location is available, include it in the request. if self._web_client_location: diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index 11925916094b..e05878843fec 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -1138,6 +1138,11 @@ async def _make_and_store_3pid_invite( if room_name_event: room_name = room_name_event.content.get("name", "") + room_type = "" + room_create_event = room_state.get((EventTypes.Create, "")) + if room_create_event: + room_type = room_create_event.content.get("type", "") + room_join_rules = "" join_rules_event = room_state.get((EventTypes.JoinRules, "")) if join_rules_event: @@ -1164,6 +1169,7 @@ async def _make_and_store_3pid_invite( room_avatar_url=room_avatar_url, room_join_rules=room_join_rules, room_name=room_name, + room_type=room_type, inviter_display_name=inviter_display_name, inviter_avatar_url=inviter_avatar_url, id_access_token=id_access_token, From 25a76bd83c67e86d3610d15fcf6cfcadf5b2855f Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 20 Jul 2021 17:23:48 +0100 Subject: [PATCH 2/8] Update reference to MSC3288 Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- synapse/handlers/identity.py | 2 +- synapse/handlers/room_member.py | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/synapse/handlers/identity.py b/synapse/handlers/identity.py index ee97d12717e7..0c1546672d2d 100644 --- a/synapse/handlers/identity.py +++ b/synapse/handlers/identity.py @@ -870,7 +870,7 @@ async def ask_id_server_for_third_party_invite( "sender": inviter_user_id, "sender_display_name": inviter_display_name, "sender_avatar_url": inviter_avatar_url, - "org.matrix.mscxxxx.room_type": room_type, # MSCXXXX + "org.matrix.msc3288.room_type": room_type, # MSC3288 } # If a custom web client location is available, include it in the request. if self._web_client_location: diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index e05878843fec..80766b005c6a 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -19,7 +19,12 @@ from typing import TYPE_CHECKING, Iterable, List, Optional, Tuple from synapse import types -from synapse.api.constants import AccountDataTypes, EventTypes, Membership +from synapse.api.constants import ( + AccountDataTypes, + EventContentFields, + EventTypes, + Membership, +) from synapse.api.errors import ( AuthError, Codes, @@ -1141,7 +1146,7 @@ async def _make_and_store_3pid_invite( room_type = "" room_create_event = room_state.get((EventTypes.Create, "")) if room_create_event: - room_type = room_create_event.content.get("type", "") + room_type = room_create_event.content.get(EventContentFields.ROOM_TYPE, "") room_join_rules = "" join_rules_event = room_state.get((EventTypes.JoinRules, "")) From 1b0af90140a32d7c91201d9ee92744dd8294086b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 21 Jul 2021 17:52:04 +0100 Subject: [PATCH 3/8] Add newsfragment Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- changelog.d/10435.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/10435.feature diff --git a/changelog.d/10435.feature b/changelog.d/10435.feature new file mode 100644 index 000000000000..9bddfc361710 --- /dev/null +++ b/changelog.d/10435.feature @@ -0,0 +1 @@ +Initial support for MSC3288, sending room_type to the identity server for 3pid invites over the /store-invite API. \ No newline at end of file From ca0202b14012006f9d8d1664b35e173d2e6e6418 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@googlemail.com> Date: Thu, 22 Jul 2021 09:20:06 +0100 Subject: [PATCH 4/8] Update changelog.d/10435.feature Co-authored-by: Patrick Cloke --- changelog.d/10435.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/10435.feature b/changelog.d/10435.feature index 9bddfc361710..f93ef5b41554 100644 --- a/changelog.d/10435.feature +++ b/changelog.d/10435.feature @@ -1 +1 @@ -Initial support for MSC3288, sending room_type to the identity server for 3pid invites over the /store-invite API. \ No newline at end of file +Experimental support for [MSC3288](https://github.com/matrix-org/matrix-doc/pull/3288), sending `room_type` to the identity server for 3pid invites over the `/store-invite` API. From 2d283850eaa5d73e0e7e67fccafb364f26f5bfa7 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 29 Jul 2021 10:40:49 +0100 Subject: [PATCH 5/8] Only send MSC3288 room type field if it exists in the m.room.create event Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- synapse/handlers/identity.py | 7 +++++-- synapse/handlers/room_member.py | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/synapse/handlers/identity.py b/synapse/handlers/identity.py index 0c1546672d2d..8ffeabacf975 100644 --- a/synapse/handlers/identity.py +++ b/synapse/handlers/identity.py @@ -824,7 +824,7 @@ async def ask_id_server_for_third_party_invite( room_avatar_url: str, room_join_rules: str, room_name: str, - room_type: str, + room_type: Optional[str], inviter_display_name: str, inviter_avatar_url: str, id_access_token: Optional[str] = None, @@ -870,8 +870,11 @@ async def ask_id_server_for_third_party_invite( "sender": inviter_user_id, "sender_display_name": inviter_display_name, "sender_avatar_url": inviter_avatar_url, - "org.matrix.msc3288.room_type": room_type, # MSC3288 } + + if room_type is not None: + invite_config["org.matrix.msc3288.room_type"] = room_type + # If a custom web client location is available, include it in the request. if self._web_client_location: invite_config["org.matrix.web_client_location"] = self._web_client_location diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index 80766b005c6a..2b55b36e540c 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -1143,10 +1143,10 @@ async def _make_and_store_3pid_invite( if room_name_event: room_name = room_name_event.content.get("name", "") - room_type = "" + room_type = None room_create_event = room_state.get((EventTypes.Create, "")) if room_create_event: - room_type = room_create_event.content.get(EventContentFields.ROOM_TYPE, "") + room_type = room_create_event.content.get(EventContentFields.ROOM_TYPE, None) room_join_rules = "" join_rules_event = room_state.get((EventTypes.JoinRules, "")) From 5284094514f05e1998b1aacf00a727279d7045dd Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 29 Jul 2021 10:50:46 +0100 Subject: [PATCH 6/8] delint Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- synapse/handlers/room_member.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index 37fee30b9949..f5e561a9fe5e 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -1245,7 +1245,9 @@ async def _make_and_store_3pid_invite( room_type = None room_create_event = room_state.get((EventTypes.Create, "")) if room_create_event: - room_type = room_create_event.content.get(EventContentFields.ROOM_TYPE, None) + room_type = room_create_event.content.get( + EventContentFields.ROOM_TYPE, None + ) room_join_rules = "" join_rules_event = room_state.get((EventTypes.JoinRules, "")) From 7b9ed99fcd1022b754919f87df92c848364cd802 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@googlemail.com> Date: Thu, 29 Jul 2021 17:02:09 +0100 Subject: [PATCH 7/8] Update synapse/handlers/room_member.py Co-authored-by: James Salter --- synapse/handlers/room_member.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index f5e561a9fe5e..6ed9b93981ad 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -1246,7 +1246,7 @@ async def _make_and_store_3pid_invite( room_create_event = room_state.get((EventTypes.Create, "")) if room_create_event: room_type = room_create_event.content.get( - EventContentFields.ROOM_TYPE, None + EventContentFields.ROOM_TYPE ) room_join_rules = "" From 1fd6ef0190dbbe37dfca60ce924877dc5181d46b Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 29 Jul 2021 12:08:53 -0400 Subject: [PATCH 8/8] Lint --- synapse/handlers/room_member.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index 6ed9b93981ad..ba131962185f 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -1245,9 +1245,7 @@ async def _make_and_store_3pid_invite( room_type = None room_create_event = room_state.get((EventTypes.Create, "")) if room_create_event: - room_type = room_create_event.content.get( - EventContentFields.ROOM_TYPE - ) + room_type = room_create_event.content.get(EventContentFields.ROOM_TYPE) room_join_rules = "" join_rules_event = room_state.get((EventTypes.JoinRules, ""))