summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
Diffstat (limited to 'synapse')
-rw-r--r--synapse/config/registration.py4
-rw-r--r--synapse/handlers/register.py18
2 files changed, 22 insertions, 0 deletions
diff --git a/synapse/config/registration.py b/synapse/config/registration.py
index 0fb964eb67..686c7fa9f7 100644
--- a/synapse/config/registration.py
+++ b/synapse/config/registration.py
@@ -44,6 +44,7 @@ class RegistrationConfig(Config):
         )
 
         self.auto_join_rooms = config.get("auto_join_rooms", [])
+        self.autocreate_auto_join_rooms = config.get("autocreate_auto_join_rooms", true)
 
     def default_config(self, **kwargs):
         registration_shared_secret = random_string_with_symbols(50)
@@ -98,6 +99,9 @@ class RegistrationConfig(Config):
         # to these rooms
         #auto_join_rooms:
         #    - "#example:example.com"
+
+        # Have first user on server autocreate autojoin rooms
+        autocreate_auto_join_rooms: true
         """ % locals()
 
     def add_arguments(self, parser):
diff --git a/synapse/handlers/register.py b/synapse/handlers/register.py
index da914c46ff..0e5337d26c 100644
--- a/synapse/handlers/register.py
+++ b/synapse/handlers/register.py
@@ -50,6 +50,8 @@ class RegistrationHandler(BaseHandler):
         self._auth_handler = hs.get_auth_handler()
         self.profile_handler = hs.get_profile_handler()
         self.user_directory_handler = hs.get_user_directory_handler()
+        self._room_creation_handler = hs.get_room_creation_handler()
+        self._directory_handler = hs.get_handlers().directory_handler
         self.captcha_client = CaptchaServerHttpClient(hs)
 
         self._next_generated_user_id = None
@@ -513,6 +515,22 @@ class RegistrationHandler(BaseHandler):
 
     @defer.inlineCallbacks
     def _join_user_to_room(self, requester, room_identifier):
+
+        # try to create the room if we're the first user on the server
+        if self.config.autocreate_auto_join_rooms:
+            count = yield self.store.count_all_users()
+            if count == 1 and RoomAlias.is_valid(room_identifier):
+                info = yield self._room_creation_handler.create_room(
+                    requester,
+                    config={
+                        "preset": "public_chat",
+                    },
+                    ratelimit=False,
+                )
+                room_id = info["room_id"]
+
+                yield create_association(self, requester.user, room_identifier, room_id)
+
         room_id = None
         room_member_handler = self.hs.get_room_member_handler()
         if RoomID.is_valid(room_identifier):