forked from MirrorHub/synapse
Merge pull request #2502 from matrix-org/dbkr/allow_dms_to_admins
Spam checking: add the invitee to user_may_invite
This commit is contained in:
commit
5de926d66f
3 changed files with 10 additions and 8 deletions
|
@ -46,7 +46,7 @@ class SpamChecker(object):
|
||||||
|
|
||||||
return self.spam_checker.check_event_for_spam(event)
|
return self.spam_checker.check_event_for_spam(event)
|
||||||
|
|
||||||
def user_may_invite(self, userid, room_id):
|
def user_may_invite(self, inviter_userid, invitee_userid, room_id):
|
||||||
"""Checks if a given user may send an invite
|
"""Checks if a given user may send an invite
|
||||||
|
|
||||||
If this method returns false, the invite will be rejected.
|
If this method returns false, the invite will be rejected.
|
||||||
|
@ -60,7 +60,7 @@ class SpamChecker(object):
|
||||||
if self.spam_checker is None:
|
if self.spam_checker is None:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return self.spam_checker.user_may_invite(userid, room_id)
|
return self.spam_checker.user_may_invite(inviter_userid, invitee_userid, room_id)
|
||||||
|
|
||||||
def user_may_create_room(self, userid):
|
def user_may_create_room(self, userid):
|
||||||
"""Checks if a given user may create a room
|
"""Checks if a given user may create a room
|
||||||
|
|
|
@ -1071,6 +1071,9 @@ class FederationHandler(BaseHandler):
|
||||||
"""
|
"""
|
||||||
event = pdu
|
event = pdu
|
||||||
|
|
||||||
|
if event.state_key is None:
|
||||||
|
raise SynapseError(400, "The invite event did not have a state key")
|
||||||
|
|
||||||
is_blocked = yield self.store.is_room_blocked(event.room_id)
|
is_blocked = yield self.store.is_room_blocked(event.room_id)
|
||||||
if is_blocked:
|
if is_blocked:
|
||||||
raise SynapseError(403, "This room has been blocked on this server")
|
raise SynapseError(403, "This room has been blocked on this server")
|
||||||
|
@ -1078,9 +1081,11 @@ class FederationHandler(BaseHandler):
|
||||||
if self.hs.config.block_non_admin_invites:
|
if self.hs.config.block_non_admin_invites:
|
||||||
raise SynapseError(403, "This server does not accept room invites")
|
raise SynapseError(403, "This server does not accept room invites")
|
||||||
|
|
||||||
if not self.spam_checker.user_may_invite(event.sender, event.room_id):
|
if not self.spam_checker.user_may_invite(
|
||||||
|
event.sender, event.state_key, event.room_id,
|
||||||
|
):
|
||||||
raise SynapseError(
|
raise SynapseError(
|
||||||
403, "This user is not permitted to send invites to this server"
|
403, "This user is not permitted to send invites to this server/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
membership = event.content.get("membership")
|
membership = event.content.get("membership")
|
||||||
|
@ -1091,9 +1096,6 @@ class FederationHandler(BaseHandler):
|
||||||
if sender_domain != origin:
|
if sender_domain != origin:
|
||||||
raise SynapseError(400, "The invite event was not from the server sending it")
|
raise SynapseError(400, "The invite event was not from the server sending it")
|
||||||
|
|
||||||
if event.state_key is None:
|
|
||||||
raise SynapseError(400, "The invite event did not have a state key")
|
|
||||||
|
|
||||||
if not self.is_mine_id(event.state_key):
|
if not self.is_mine_id(event.state_key):
|
||||||
raise SynapseError(400, "The invite event must be for this server")
|
raise SynapseError(400, "The invite event must be for this server")
|
||||||
|
|
||||||
|
|
|
@ -225,7 +225,7 @@ class RoomMemberHandler(BaseHandler):
|
||||||
block_invite = True
|
block_invite = True
|
||||||
|
|
||||||
if not self.spam_checker.user_may_invite(
|
if not self.spam_checker.user_may_invite(
|
||||||
requester.user.to_string(), room_id,
|
requester.user.to_string(), target.to_string(), room_id,
|
||||||
):
|
):
|
||||||
logger.info("Blocking invite due to spam checker")
|
logger.info("Blocking invite due to spam checker")
|
||||||
block_invite = True
|
block_invite = True
|
||||||
|
|
Loading…
Reference in a new issue