rate limiting for message sending

This commit is contained in:
Mark Haines 2014-09-02 18:22:15 +01:00
parent 0a1260b03a
commit 780548b577
4 changed files with 7 additions and 4 deletions

View File

@ -12,10 +12,10 @@ class RatelimitConfig(Config):
super(RatelimitConfig, cls).add_arguments(parser) super(RatelimitConfig, cls).add_arguments(parser)
rc_group = parser.add_argument_group("ratelimiting") rc_group = parser.add_argument_group("ratelimiting")
rc_group.add_argument( rc_group.add_argument(
"--rc-messages-per-second", type=float, default=0.2 "--rc-messages-per-second", type=float, default=0.2,
help="number of messages a client can send per second" help="number of messages a client can send per second"
) )
rc_group.add_argument( rc_group.add_argument(
"--rc_messsage_burst_count", type=float, default=10 "--rc-message-burst-count", type=float, default=10,
help="number of message a client can send before being throttled" help="number of message a client can send before being throttled"
) )

View File

@ -35,12 +35,12 @@ class BaseHandler(object):
allowed, time_allowed = self.ratelimiter.send_message( allowed, time_allowed = self.ratelimiter.send_message(
user_id, time_now, user_id, time_now,
msg_rate_hz=self.hs.config.rc_messages_per_second, msg_rate_hz=self.hs.config.rc_messages_per_second,
burst_count=self.hs.config.rc_messsage_burst_count, burst_count=self.hs.config.rc_message_burst_count,
) )
if not allowed: if not allowed:
raise cs_error( raise cs_error(
"Limit exceeded", "Limit exceeded",
Codes.M_LIMIT_EXCEEDED, Codes.LIMIT_EXCEEDED,
retry_after_ms=1000*(time_allowed - time_now), retry_after_ms=1000*(time_allowed - time_now),
) )

View File

@ -76,6 +76,8 @@ class MessageHandler(BaseRoomHandler):
Raises: Raises:
SynapseError if something went wrong. SynapseError if something went wrong.
""" """
self.ratelimit(event.user_id)
# TODO(paul): Why does 'event' not have a 'user' object? # TODO(paul): Why does 'event' not have a 'user' object?
user = self.hs.parse_userid(event.user_id) user = self.hs.parse_userid(event.user_id)
assert user.is_mine, "User must be our own: %s" % (user,) assert user.is_mine, "User must be our own: %s" % (user,)

View File

@ -49,6 +49,7 @@ class RoomCreationHandler(BaseRoomHandler):
SynapseError if the room ID was taken, couldn't be stored, or SynapseError if the room ID was taken, couldn't be stored, or
something went horribly wrong. something went horribly wrong.
""" """
self.ratelimit(user_id)
if "room_alias_name" in config: if "room_alias_name" in config:
room_alias = RoomAlias.create_local( room_alias = RoomAlias.create_local(