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.py19
-rw-r--r--synapse/storage/directory.py2
3 files changed, 24 insertions, 1 deletions
diff --git a/synapse/config/registration.py b/synapse/config/registration.py
index 0fb964eb67..dcf2374ed2 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..01cf7ab58e 100644
--- a/synapse/handlers/register.py
+++ b/synapse/handlers/register.py
@@ -220,8 +220,26 @@ class RegistrationHandler(BaseHandler):
 
         # auto-join the user to any rooms we're supposed to dump them into
         fake_requester = create_requester(user_id)
+
+        # try to create the room if we're the first user on the server
+        if self.hs.config.autocreate_auto_join_rooms:
+            count = yield self.store.count_all_users()
+            auto_create_rooms = count == 1
+
         for r in self.hs.config.auto_join_rooms:
             try:
+                if auto_create_rooms and RoomAlias.is_valid(r):
+                    room_creation_handler = self.hs.get_room_creation_handler()
+                    # create room expects the localpart of the room alias
+                    room_alias_localpart = RoomAlias.from_string(r).localpart
+                    yield room_creation_handler.create_room(
+                        fake_requester,
+                        config={
+                            "preset": "public_chat",
+                            "room_alias_name": room_alias_localpart
+                        },
+                        ratelimit=False,
+                    )
                 yield self._join_user_to_room(fake_requester, r)
             except Exception as e:
                 logger.error("Failed to join new user to %r: %r", r, e)
@@ -513,6 +531,7 @@ class RegistrationHandler(BaseHandler):
 
     @defer.inlineCallbacks
     def _join_user_to_room(self, requester, room_identifier):
+
         room_id = None
         room_member_handler = self.hs.get_room_member_handler()
         if RoomID.is_valid(room_identifier):
diff --git a/synapse/storage/directory.py b/synapse/storage/directory.py
index cfb687cb53..61a029a53c 100644
--- a/synapse/storage/directory.py
+++ b/synapse/storage/directory.py
@@ -90,7 +90,7 @@ class DirectoryWorkerStore(SQLBaseStore):
 class DirectoryStore(DirectoryWorkerStore):
     @defer.inlineCallbacks
     def create_room_alias_association(self, room_alias, room_id, servers, creator=None):
-        """ Creates an associatin between  a room alias and room_id/servers
+        """ Creates an association between a room alias and room_id/servers
 
         Args:
             room_alias (RoomAlias)