Add an option to disable autojoin for guest accounts (#6637)

Fixes https://github.com/matrix-org/synapse/issues/3177
This commit is contained in:
Travis Ralston 2020-06-05 11:18:15 -06:00 committed by GitHub
parent 1bc00fd76d
commit 09099313e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 33 additions and 1 deletions

1
changelog.d/6637.feature Normal file
View file

@ -0,0 +1 @@
Add an option to disable autojoining rooms for guest accounts.

View file

@ -1223,6 +1223,13 @@ account_threepid_delegates:
# #
#autocreate_auto_join_rooms: true #autocreate_auto_join_rooms: true
# When auto_join_rooms is specified, setting this flag to false prevents
# guest accounts from being automatically joined to the rooms.
#
# Defaults to true.
#
#auto_join_rooms_for_guests: false
## Metrics ### ## Metrics ###

View file

@ -128,6 +128,7 @@ class RegistrationConfig(Config):
if not RoomAlias.is_valid(room_alias): if not RoomAlias.is_valid(room_alias):
raise ConfigError("Invalid auto_join_rooms entry %s" % (room_alias,)) raise ConfigError("Invalid auto_join_rooms entry %s" % (room_alias,))
self.autocreate_auto_join_rooms = config.get("autocreate_auto_join_rooms", True) self.autocreate_auto_join_rooms = config.get("autocreate_auto_join_rooms", True)
self.auto_join_rooms_for_guests = config.get("auto_join_rooms_for_guests", True)
self.enable_set_displayname = config.get("enable_set_displayname", True) self.enable_set_displayname = config.get("enable_set_displayname", True)
self.enable_set_avatar_url = config.get("enable_set_avatar_url", True) self.enable_set_avatar_url = config.get("enable_set_avatar_url", True)
@ -368,6 +369,13 @@ class RegistrationConfig(Config):
# users cannot be auto-joined since they do not exist. # users cannot be auto-joined since they do not exist.
# #
#autocreate_auto_join_rooms: true #autocreate_auto_join_rooms: true
# When auto_join_rooms is specified, setting this flag to false prevents
# guest accounts from being automatically joined to the rooms.
#
# Defaults to true.
#
#auto_join_rooms_for_guests: false
""" """
% locals() % locals()
) )

View file

@ -244,6 +244,12 @@ class RegistrationHandler(BaseHandler):
fail_count += 1 fail_count += 1
if not self.hs.config.user_consent_at_registration: if not self.hs.config.user_consent_at_registration:
if not self.hs.config.auto_join_rooms_for_guests and make_guest:
logger.info(
"Skipping auto-join for %s because auto-join for guests is disabled",
user_id,
)
else:
yield defer.ensureDeferred(self._auto_join_rooms(user_id)) yield defer.ensureDeferred(self._auto_join_rooms(user_id))
else: else:
logger.info( logger.info(

View file

@ -135,6 +135,16 @@ class RegistrationTestCase(unittest.HomeserverTestCase):
self.handler.register_user(localpart="local_part"), ResourceLimitError self.handler.register_user(localpart="local_part"), ResourceLimitError
) )
def test_auto_join_rooms_for_guests(self):
room_alias_str = "#room:test"
self.hs.config.auto_join_rooms = [room_alias_str]
self.hs.config.auto_join_rooms_for_guests = False
user_id = self.get_success(
self.handler.register_user(localpart="jeff", make_guest=True),
)
rooms = self.get_success(self.store.get_rooms_for_user(user_id))
self.assertEqual(len(rooms), 0)
def test_auto_create_auto_join_rooms(self): def test_auto_create_auto_join_rooms(self):
room_alias_str = "#room:test" room_alias_str = "#room:test"
self.hs.config.auto_join_rooms = [room_alias_str] self.hs.config.auto_join_rooms = [room_alias_str]