Clarify and fix behaviour when there are multiple aliases
2 files changed, 24 insertions, 6 deletions
diff --git a/synapse/config/room_directory.py b/synapse/config/room_directory.py
index 719892be7a..af84adf5fa 100644
--- a/synapse/config/room_directory.py
+++ b/synapse/config/room_directory.py
@@ -58,7 +58,11 @@ class RoomDirectoryConfig(Config):
# which rooms can be published in the public room list.
#
# The format of this option is the same as that for
- # `alias_creation_rules`
+ # `alias_creation_rules`.
+ #
+ # If the room has one or more aliases associated with it, the rules are
+ # run against each alias. If there are no aliases then only rules with
+ # `alias: *` match.
room_list_publication_rules:
- user_id: "*" # Matches against the user publishing the room
alias: "*" # Matches against any current local or canonical
@@ -156,11 +160,19 @@ class _RoomDirectoryRule(object):
# If we are not given any aliases then this rule only matches if the
# alias glob matches all aliases
- if not aliases and not self._alias_matches_all:
- return False
-
- for alias in aliases:
- if not self._alias_regex.match(alias):
+ matched = False
+ if not aliases:
+ if not self._alias_matches_all:
+ return False
+ else:
+ # Otherwise, we just need one alias to match
+ matched = False
+ for alias in aliases:
+ if self._alias_regex.match(alias):
+ matched = True
+ break
+
+ if not matched:
return False
if not self._room_id_regex.match(room_id):
diff --git a/tests/config/test_room_directory.py b/tests/config/test_room_directory.py
index 1d4ca0055c..3dc2631523 100644
--- a/tests/config/test_room_directory.py
+++ b/tests/config/test_room_directory.py
@@ -138,3 +138,9 @@ class RoomDirectoryConfigTestCase(unittest.TestCase):
room_id="!test-deny",
aliases=[],
))
+
+ self.assertTrue(rd_config.is_publishing_room_allowed(
+ user_id="@test:example.com",
+ room_id="!test",
+ aliases=["#unofficial_st:example.com", "#blah:example.com"],
+ ))
|