diff options
author | Erik Johnston <erik@matrix.org> | 2019-05-21 17:08:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-21 17:08:14 +0100 |
commit | 9526aa96a6ffa4f32508a3f2430d424ffcc5e203 (patch) | |
tree | 288f030777ba7fe838fe788cfedbec11c0787c10 /synapse/handlers/message.py | |
parent | Introduce room v4 which updates event ID format. (#5217) (diff) | |
parent | Fix words (diff) | |
download | synapse-9526aa96a6ffa4f32508a3f2430d424ffcc5e203.tar.xz |
Merge pull request #5212 from matrix-org/erikj/deny_multiple_reactions
Block attempts to annotate the same event twice
Diffstat (limited to 'synapse/handlers/message.py')
-rw-r--r-- | synapse/handlers/message.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index 7b2c33a922..792edc7579 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -22,7 +22,7 @@ from canonicaljson import encode_canonical_json, json from twisted.internet import defer from twisted.internet.defer import succeed -from synapse.api.constants import EventTypes, Membership +from synapse.api.constants import EventTypes, Membership, RelationTypes from synapse.api.errors import ( AuthError, Codes, @@ -601,6 +601,20 @@ class EventCreationHandler(object): self.validator.validate_new(event) + # If this event is an annotation then we check that that the sender + # can't annotate the same way twice (e.g. stops users from liking an + # event multiple times). + relation = event.content.get("m.relates_to", {}) + if relation.get("rel_type") == RelationTypes.ANNOTATION: + relates_to = relation["event_id"] + aggregation_key = relation["key"] + + already_exists = yield self.store.has_user_annotated_event( + relates_to, event.type, aggregation_key, event.sender, + ) + if already_exists: + raise SynapseError(400, "Can't send same reaction twice") + logger.debug( "Created event %s", event.event_id, |