summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrendan Abolivier <babolivier@matrix.org>2019-09-26 12:07:54 +0100
committerGitHub <noreply@github.com>2019-09-26 12:07:54 +0100
commit4c6d9408d3d78ace15234cf63b3f2c6e57fc5e85 (patch)
tree6b1a9201de216971bac97fba95aec03839cec6d0
parentMerge pull request #5 from matrix-org/babolivier/get-retention-worker (diff)
parentChangelog (diff)
downloadsynapse-4c6d9408d3d78ace15234cf63b3f2c6e57fc5e85.tar.xz
Merge pull request #6 from matrix-org/babolivier/access-rules-membership
Allow membership events which membership isn't join or invite in restricted rooms
Diffstat (limited to '')
-rw-r--r--changelog.d/6.bugfix1
-rw-r--r--synapse/third_party_rules/access_rules.py10
2 files changed, 10 insertions, 1 deletions
diff --git a/changelog.d/6.bugfix b/changelog.d/6.bugfix
new file mode 100644

index 0000000000..43ab65cc95 --- /dev/null +++ b/changelog.d/6.bugfix
@@ -0,0 +1 @@ +Don't forbid membership events which membership isn't 'join' or 'invite' in restricted rooms, so that users who got into these rooms before the access rules started to be enforced can leave them. diff --git a/synapse/third_party_rules/access_rules.py b/synapse/third_party_rules/access_rules.py
index 55b59fba8d..bd79de845f 100644 --- a/synapse/third_party_rules/access_rules.py +++ b/synapse/third_party_rules/access_rules.py
@@ -17,7 +17,7 @@ import email.utils from twisted.internet import defer -from synapse.api.constants import EventTypes, JoinRules, RoomCreationPreset +from synapse.api.constants import EventTypes, JoinRules, Membership, RoomCreationPreset from synapse.api.errors import SynapseError from synapse.config._base import ConfigError from synapse.types import get_domain_from_id @@ -336,6 +336,14 @@ class RoomAccessRules(object): # called before check_event_allowed. if event.type == EventTypes.ThirdPartyInvite: return True + + # We only need to process "join" and "invite" memberships, in order to be backward + # compatible, e.g. if a user from a blacklisted server joined a restricted room + # before the rules started being enforced on the server, that user must be able to + # leave it. + if event.membership not in [Membership.JOIN, Membership.INVITE]: + return True + invitee_domain = get_domain_from_id(event.state_key) return invitee_domain not in self.domains_forbidden_when_restricted