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)
|