summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndrew Morgan <andrew@amorgan.xyz>2020-11-02 16:06:38 +0000
committerAndrew Morgan <andrew@amorgan.xyz>2020-11-11 16:46:17 +0000
commit63c767ac10f110c159f841b6b77ff74a9ac66b70 (patch)
treee5208137119b3f4f23f87e18a47374386cc48327
parentAdd CS /_matrix/client/r0/knock/{roomIdOrAlias} endpoint (diff)
downloadsynapse-63c767ac10f110c159f841b6b77ff74a9ac66b70.tar.xz
Add room_knock_state_types config option
This option serves the same purpose as the existing
room_invite_state_types option, which defines what state events are sent
over to a user that is invited to a room. This information is necessary
for the user - who isn't in the room yet - to get some metadata about
the room in order to display it in a pretty fashion in the user's
pending-invites list.

It includes information such as the room's name, avatar, topic,
canonical alias, room encryption state etc. as well as the invite
membership event which the invited user's homeserver can reference.

This new option is the exact same, but is sent by a homeserver in the
room to the knocker during the knock process. This option will actually
be utilised in a later commit.
-rw-r--r--docs/sample_config.yaml11
-rw-r--r--synapse/config/api.py31
2 files changed, 34 insertions, 8 deletions
diff --git a/docs/sample_config.yaml b/docs/sample_config.yaml
index 7e2cf97c3e..9c77271333 100644
--- a/docs/sample_config.yaml
+++ b/docs/sample_config.yaml
@@ -1395,6 +1395,17 @@ metrics_flags:
 #  - "m.room.encryption"
 #  - "m.room.name"
 
+# A list of event types from a room that will be given to users when they
+# knock on the room. This allows clients to display information about the
+# room that they've knocked on, without actually being in the room yet.
+#
+#room_knock_state_types:
+#  - "m.room.join_rules"
+#  - "m.room.canonical_alias"
+#  - "m.room.avatar"
+#  - "m.room.encryption"
+#  - "m.room.name"
+
 
 # A list of application service config files to use
 #
diff --git a/synapse/config/api.py b/synapse/config/api.py
index 74cd53a8ed..7604993b63 100644
--- a/synapse/config/api.py
+++ b/synapse/config/api.py
@@ -1,4 +1,5 @@
 # Copyright 2015, 2016 OpenMarket Ltd
+# Copyright 2020 The Matrix.org Foundation C.I.C.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -21,15 +22,18 @@ class ApiConfig(Config):
     section = "api"
 
     def read_config(self, config, **kwargs):
+        default_room_state_types = [
+            EventTypes.JoinRules,
+            EventTypes.CanonicalAlias,
+            EventTypes.RoomAvatar,
+            EventTypes.RoomEncryption,
+            EventTypes.Name,
+        ]
         self.room_invite_state_types = config.get(
-            "room_invite_state_types",
-            [
-                EventTypes.JoinRules,
-                EventTypes.CanonicalAlias,
-                EventTypes.RoomAvatar,
-                EventTypes.RoomEncryption,
-                EventTypes.Name,
-            ],
+            "room_invite_state_types", default_room_state_types
+        )
+        self.room_knock_state_types = config.get(
+            "room_knock_state_types", default_room_state_types
         )
 
     def generate_config_section(cls, **kwargs):
@@ -44,6 +48,17 @@ class ApiConfig(Config):
         #  - "{RoomAvatar}"
         #  - "{RoomEncryption}"
         #  - "{Name}"
+
+        # A list of event types from a room that will be given to users when they
+        # knock on the room. This allows clients to display information about the
+        # room that they've knocked on, without actually being in the room yet.
+        #
+        #room_knock_state_types:
+        #  - "{JoinRules}"
+        #  - "{CanonicalAlias}"
+        #  - "{RoomAvatar}"
+        #  - "{RoomEncryption}"
+        #  - "{Name}"
         """.format(
             **vars(EventTypes)
         )