diff options
author | Erik Johnston <erik@matrix.org> | 2019-09-11 15:39:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-11 15:39:38 +0100 |
commit | cbcbfe64a2b306f0eaff74d4ceb7f2550d8b4b6a (patch) | |
tree | 8465e03c3d60c0d76aa8c77e2eb4ecd9f503a6b8 /synapse/handlers/message.py | |
parent | Clean up some code in the retry logic (#6017) (diff) | |
parent | Update sample config (diff) | |
download | synapse-cbcbfe64a2b306f0eaff74d4ceb7f2550d8b4b6a.tar.xz |
Merge pull request #6015 from matrix-org/erikj/ratelimit_admin_redaction
Allow use of different ratelimits for admin redactions.
Diffstat (limited to 'synapse/handlers/message.py')
-rw-r--r-- | synapse/handlers/message.py | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index 111f7c7e2f..1f8272784e 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -729,7 +729,27 @@ class EventCreationHandler(object): assert not self.config.worker_app if ratelimit: - yield self.base_handler.ratelimit(requester) + # We check if this is a room admin redacting an event so that we + # can apply different ratelimiting. We do this by simply checking + # it's not a self-redaction (to avoid having to look up whether the + # user is actually admin or not). + is_admin_redaction = False + if event.type == EventTypes.Redaction: + original_event = yield self.store.get_event( + event.redacts, + check_redacted=False, + get_prev_content=False, + allow_rejected=False, + allow_none=True, + ) + + is_admin_redaction = ( + original_event and event.sender != original_event.sender + ) + + yield self.base_handler.ratelimit( + requester, is_admin_redaction=is_admin_redaction + ) yield self.base_handler.maybe_kick_guest_users(event, context) |