Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Add room creation checks to spam checker #2495

Merged
merged 3 commits into from
Oct 4, 2017
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions synapse/events/spamcheck.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,35 @@ def user_may_invite(self, userid, room_id):
return True

return self.spam_checker.user_may_invite(userid, room_id)

def user_may_create_room(self, userid):
"""Checks if a given user may create a room

If this method returns false, the creation request will be rejected.

Args:
userid (string): The sender's user ID

Returns:
bool: True if the user may create a room, otherwise False
"""
if self.spam_checker is None:
return True

return self.spam_checker.user_may_create_room(userid)

def user_may_create_room_alias(self, userid, room_alias):
"""Checks if a given user may create a room alias

If this method returns false, the association request will be rejected.

Args:
userid (string): The sender's user ID

Returns:
bool: True if the user may create a room alias, otherwise False
"""
if self.spam_checker is None:
return True

return self.spam_checker.user_may_create_room_alias(userid, room_alias)
7 changes: 7 additions & 0 deletions synapse/handlers/directory.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ def __init__(self, hs):
"directory", self.on_directory_query
)

self.spam_checker = hs.get_spam_checker()

@defer.inlineCallbacks
def _create_association(self, room_alias, room_id, servers=None, creator=None):
# general association creation for both human users and app services
Expand Down Expand Up @@ -73,6 +75,11 @@ def create_association(self, user_id, room_alias, room_id, servers=None):
# association creation for human users
# TODO(erikj): Do user auth.

if not self.spam_checker.user_may_create_room_alias(user_id, room_alias):
raise SynapseError(
403, "This user is not permitted to create this alias",
)

can_create = yield self.can_modify_alias(
room_alias,
user_id=user_id
Expand Down
8 changes: 8 additions & 0 deletions synapse/handlers/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ class RoomCreationHandler(BaseHandler):
},
}

def __init__(self, hs):
super(RoomCreationHandler, self).__init__(hs)

self.spam_checker = hs.get_spam_checker()

@defer.inlineCallbacks
def create_room(self, requester, config, ratelimit=True):
""" Creates a new room.
Expand All @@ -75,6 +80,9 @@ def create_room(self, requester, config, ratelimit=True):
"""
user_id = requester.user.to_string()

if not self.spam_checker.user_may_create_room(user_id):
raise SynapseError(403, "You are not permitted to create rooms")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

double indent


if ratelimit:
yield self.ratelimit(requester)

Expand Down