summary refs log tree commit diff
path: root/synapse/rulecheck/domain_rule_checker.py
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/rulecheck/domain_rule_checker.py')
-rw-r--r--synapse/rulecheck/domain_rule_checker.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/synapse/rulecheck/domain_rule_checker.py b/synapse/rulecheck/domain_rule_checker.py

index 410757041b..bcec465ef4 100644 --- a/synapse/rulecheck/domain_rule_checker.py +++ b/synapse/rulecheck/domain_rule_checker.py
@@ -46,6 +46,9 @@ class DomainRuleChecker(object): # domain mapping rules above. can_only_invite_during_room_creation: false + # Allow third party invites + can_invite_by_third_party_id: true + Don't forget to consider if you can invite users from your own domain. """ @@ -62,19 +65,30 @@ class DomainRuleChecker(object): self.can_only_invite_during_room_creation = config.get( "can_only_invite_during_room_creation", False, ) + self.can_invite_by_third_party_id = config.get( + "can_invite_by_third_party_id", True, + ) def check_event_for_spam(self, event): """Implements synapse.events.SpamChecker.check_event_for_spam """ return False - def user_may_invite(self, inviter_userid, invitee_userid, room_id, - new_room): + def user_may_invite(self, inviter_userid, invitee_userid, third_party_invite, + room_id, new_room): """Implements synapse.events.SpamChecker.user_may_invite """ if self.can_only_invite_during_room_creation and not new_room: return False + if not self.can_invite_by_third_party_id and third_party_invite: + return False + + # This is a third party invite (without a bound mxid), so unless we have + # banned all third party invites (above) we allow it. + if not invitee_userid: + return True + inviter_domain = self._get_domain_from_id(inviter_userid) invitee_domain = self._get_domain_from_id(invitee_userid) @@ -83,14 +97,20 @@ class DomainRuleChecker(object): return invitee_domain in self.domain_mapping[inviter_domain] - def user_may_create_room(self, userid, invite_list, cloning): + def user_may_create_room(self, userid, invite_list, third_party_invite_list, + cloning): """Implements synapse.events.SpamChecker.user_may_create_room """ if cloning: return True - if self.can_only_create_one_to_one_rooms and len(invite_list) != 1: + if not self.can_invite_by_third_party_id and third_party_invite_list: + return False + + number_of_invites = len(invite_list) + len(third_party_invite_list) + + if self.can_only_create_one_to_one_rooms and number_of_invites != 1: return False return True