Browse Source

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.
Andrew Morgan 3 years ago
parent
commit
63c767ac10
2 changed files with 34 additions and 8 deletions
  1. 11 0
      docs/sample_config.yaml
  2. 23 8
      synapse/config/api.py

+ 11 - 0
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
 #

+ 23 - 8
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)
         )