-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Remove the ability to query relations when the original event was redacted. #5629
Conversation
Codecov Report
@@ Coverage Diff @@
## develop matrix-org/synapse#5629 +/- ##
===========================================
- Coverage 63.25% 63.18% -0.08%
===========================================
Files 328 328
Lines 35877 35951 +74
Branches 5915 5919 +4
===========================================
+ Hits 22695 22715 +20
- Misses 11555 11608 +53
- Partials 1627 1628 +1 |
Codecov Report
@@ Coverage Diff @@
## develop matrix-org/synapse#5629 +/- ##
===========================================
- Coverage 63.26% 63.24% -0.02%
===========================================
Files 328 328
Lines 35850 35858 +8
Branches 5908 5910 +2
===========================================
Hits 22679 22679
- Misses 11547 11555 +8
Partials 1624 1624 |
* develop: Update ModuleApi to avoid register(generate_token=True) (#5640) Factor out some redundant code in the login impl (#5639) Move get_or_create_user to test code (#5628) Add a few more common environment directory names to black exclusion (#5630) Add default push rule to ignore reactions (#5623) Add origin_server_ts and sender fields to m.replace (#5613) Remove support for invite_3pid_guest. (#5625) remove dead transaction persist code (#5622) Fixes to the federation rate limiter (#5621)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this logic should probably go in the Handler layer rather than the Rest layer (the general idea is that one day we might replace the Rest layer with some other API).
More generally, I'm a bit worried about how this interface will work in practice:
- What if there is an event with 100 edits - do we create 101 redaction events?
- If we do want to create 101 redaction events, we'll have to do something about the rate-limiter, otherwise we'll send out 5 and then fail.
Is it possible for a server which receives a redaction for the original event to know that should apply to later edits as well?
Basically I think I'd like someone like erik or matthew who have been involved with the design of reactions to comment on whether this is the best approach.
synapse/rest/client/v1/room.py
Outdated
relation_chunk = yield self.store.get_relations_for_event( | ||
event_id, relation_type="m.replace", event_type="m.room.message" | ||
) | ||
relation_chunk_dict = relation_chunk.to_dict() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do we do this?
synapse/rest/client/v1/room.py
Outdated
@@ -740,6 +741,30 @@ def on_POST(self, request, room_id, event_id, txn_id=None): | |||
txn_id=txn_id, | |||
) | |||
|
|||
# Redact any m.replace relations of this event | |||
relation_chunk = yield self.store.get_relations_for_event( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this looks like it is only handling the 5 most recent edits of an event. is that deliberate?
synapse/rest/client/v1/room.py
Outdated
relation_ids = [x["event_id"] for x in relation_chunk_dict.get("chunk", [])] | ||
|
||
for relation_id in relation_ids: | ||
yield self.event_creation_handler.create_and_send_nonmember_event( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is going to hit the ratelimiter, and then the whole request will fail.
@@ -153,6 +153,12 @@ def on_GET(self, request, room_id, parent_id, relation_type=None, event_type=Non | |||
from_token = parse_string(request, "from") | |||
to_token = parse_string(request, "to") | |||
|
|||
# Check if the event is redacted, and if so return an empty chunk | |||
# list and zero tokens | |||
if "redacted_because" in event.unsigned: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this pattern used anywhere else? I'm not sure it is the best way to check if an event is redacted
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wasn't sure either, but it is used elsewhere.
synapse/tests/storage/test_redaction.py
Line 135 in 32e7c9e
self.assertFalse("redacted_because" in event.unsigned) |
Might be best to create a method is_event_redacted
, though not sure how it would check that otherwise.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This has now been replaced with internal_metadata
.
@erikjohnston @ara4n I mentioned this here. Where you want to hash this out is up to you. For reference I suggested in there adding an event that could redact multiple events. |
After IRL'ing with @erikjohnston we've decided to just prevent But not actually send out a redaction event per relation. So the scope of this PR is to leave relations unredacted for now. |
* develop: Remove access-token support from RegistrationStore.register (#5642) Don't bundle aggregations when retrieving the original event (#5654) Add a linting script (#5627) Correct pep517 flag in readme (#5651) remove unused and unnecessary check for FederationDeniedError (#5645) Changelog Lint Use application/json when querying the IS's /store-invite endpoint
@erikjohnston Where was the db query you mentioned should also update the |
synapse/synapse/events/utils.py Lines 37 to 57 in 32e7c9e
|
@erikjohnston Oh, that's where I have it in the PR atm. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
generally looks sensible but I'm worried that some of this stuff isn't specced :/
# Check if the event is redacted, and if so return an empty chunk | ||
# list and zero tokens | ||
if event.internal_metadata.is_redacted(): | ||
res = {"chunk": []} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm struggling to understand the existing behaviour here (get_relations_for_event returns a pagination structure, which we then overwrite with different contents?), but it seems to return an original_event
, which I can't find mentioned in the MSC. It's therefore hard to know if it is safe to not return it in this case.
I'm generally rather uneasy about unspecced behaviour which clients will come to rely on.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After replacing things with PaginationChunk
, original_event
is now included in the response whether the event is redacted or not.
Not including it was an oversight on my part.
this doesn't seem to be true (any more)? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this looks much nicer now.
LGTM modulo the slightly confusing comment. Can you clarify it, then merge?
v1.2.0rc1 Features -------- - Add support for opentracing. ([\#5544](#5544), [\#5712](#5712)) - Add ability to pull all locally stored events out of synapse that a particular user can see. ([\#5589](#5589)) - Add a basic admin command app to allow server operators to run Synapse admin commands separately from the main production instance. ([\#5597](#5597)) - Add `sender` and `origin_server_ts` fields to `m.replace`. ([\#5613](#5613)) - Add default push rule to ignore reactions. ([\#5623](#5623)) - Include the original event when asking for its relations. ([\#5626](#5626)) - Implement `session_lifetime` configuration option, after which access tokens will expire. ([\#5660](#5660)) - Return "This account has been deactivated" when a deactivated user tries to login. ([\#5674](#5674)) - Enable aggregations support by default ([\#5714](#5714)) Bugfixes -------- - Fix 'utime went backwards' errors on daemonization. ([\#5609](#5609)) - Various minor fixes to the federation request rate limiter. ([\#5621](#5621)) - Forbid viewing relations on an event once it has been redacted. ([\#5629](#5629)) - Fix requests to the `/store_invite` endpoint of identity servers being sent in the wrong format. ([\#5638](#5638)) - Fix newly-registered users not being able to lookup their own profile without joining a room. ([\#5644](#5644)) - Fix bug in #5626 that prevented the original_event field from actually having the contents of the original event in a call to `/relations`. ([\#5654](#5654)) - Fix 3PID bind requests being sent to identity servers as `application/x-form-www-urlencoded` data, which is deprecated. ([\#5658](#5658)) - Fix some problems with authenticating redactions in recent room versions. ([\#5699](#5699), [\#5700](#5700), [\#5707](#5707)) - Ignore redactions of m.room.create events. ([\#5701](#5701)) Updates to the Docker image --------------------------- - Base Docker image on a newer Alpine Linux version (3.8 -> 3.10). ([\#5619](#5619)) - Add missing space in default logging file format generated by the Docker image. ([\#5620](#5620)) Improved Documentation ---------------------- - Add information about nginx normalisation to reverse_proxy.rst. Contributed by @skalarproduktraum - thanks! ([\#5397](#5397)) - --no-pep517 should be --no-use-pep517 in the documentation to setup the development environment. ([\#5651](#5651)) - Improvements to Postgres setup instructions. Contributed by @Lrizika - thanks! ([\#5661](#5661)) - Minor tweaks to postgres documentation. ([\#5675](#5675)) Deprecations and Removals ------------------------- - Remove support for the `invite_3pid_guest` configuration setting. ([\#5625](#5625)) Internal Changes ---------------- - Move logging code out of `synapse.util` and into `synapse.logging`. ([\#5606](#5606), [\#5617](#5617)) - Add a blacklist file to the repo to blacklist certain sytests from failing CI. ([\#5611](#5611)) - Make runtime errors surrounding password reset emails much clearer. ([\#5616](#5616)) - Remove dead code for persiting outgoing federation transactions. ([\#5622](#5622)) - Add `lint.sh` to the scripts-dev folder which will run all linting steps required by CI. ([\#5627](#5627)) - Move RegistrationHandler.get_or_create_user to test code. ([\#5628](#5628)) - Add some more common python virtual-environment paths to the black exclusion list. ([\#5630](#5630)) - Some counter metrics exposed over Prometheus have been renamed, with the old names preserved for backwards compatibility and deprecated. See `docs/metrics-howto.rst` for details. ([\#5636](#5636)) - Unblacklist some user_directory sytests. ([\#5637](#5637)) - Factor out some redundant code in the login implementation. ([\#5639](#5639)) - Update ModuleApi to avoid register(generate_token=True). ([\#5640](#5640)) - Remove access-token support from `RegistrationHandler.register`, and rename it. ([\#5641](#5641)) - Remove access-token support from `RegistrationStore.register`, and rename it. ([\#5642](#5642)) - Improve logging for auto-join when a new user is created. ([\#5643](#5643)) - Remove unused and unnecessary check for FederationDeniedError in _exception_to_failure. ([\#5645](#5645)) - Fix a small typo in a code comment. ([\#5655](#5655)) - Clean up exception handling around client access tokens. ([\#5656](#5656)) - Add a mechanism for per-test homeserver configuration in the unit tests. ([\#5657](#5657)) - Inline issue_access_token. ([\#5659](#5659)) - Update the sytest BuildKite configuration to checkout Synapse in `/src`. ([\#5664](#5664)) - Add a `docker` type to the towncrier configuration. ([\#5673](#5673)) - Convert `synapse.federation.transport.server` to `async`. Might improve some stack traces. ([\#5689](#5689)) - Documentation for opentracing. ([\#5703](#5703))
Fixes matrix-org/matrix-spec#1328
Forbid viewing relations on an event once it has been redacted.