|
36 | 36 | from twisted.web.resource import Resource |
37 | 37 |
|
38 | 38 | import synapse.rest.admin |
39 | | -from synapse.api.constants import ApprovalNoticeMedium, EventTypes, LoginType, UserTypes |
| 39 | +from synapse.api.constants import ( |
| 40 | + ApprovalNoticeMedium, |
| 41 | + EventContentFields, |
| 42 | + EventTypes, |
| 43 | + LoginType, |
| 44 | + UserTypes, |
| 45 | +) |
40 | 46 | from synapse.api.errors import Codes, HttpResponseException, ResourceLimitError |
41 | 47 | from synapse.api.room_versions import RoomVersions |
42 | 48 | from synapse.media.filepath import MediaFilePaths |
@@ -5467,6 +5473,53 @@ def test_redactions_for_remote_user_succeed_with_admin_priv_in_room(self) -> Non |
5467 | 5473 | # we originally sent 5 messages so 5 should be redacted |
5468 | 5474 | self.assertEqual(len(original_message_ids), 0) |
5469 | 5475 |
|
| 5476 | + def test_redact_redacts_encrypted_messages(self) -> None: |
| 5477 | + """ |
| 5478 | + Test that user's encrypted messages are redacted |
| 5479 | + """ |
| 5480 | + encrypted_room = self.helper.create_room_as( |
| 5481 | + self.admin, tok=self.admin_tok, room_version="7" |
| 5482 | + ) |
| 5483 | + self.helper.send_state( |
| 5484 | + encrypted_room, |
| 5485 | + EventTypes.RoomEncryption, |
| 5486 | + {EventContentFields.ENCRYPTION_ALGORITHM: "m.megolm.v1.aes-sha2"}, |
| 5487 | + tok=self.admin_tok, |
| 5488 | + ) |
| 5489 | + # join room send some messages |
| 5490 | + originals = [] |
| 5491 | + join = self.helper.join(encrypted_room, self.bad_user, tok=self.bad_user_tok) |
| 5492 | + originals.append(join["event_id"]) |
| 5493 | + for _ in range(15): |
| 5494 | + res = self.helper.send_event( |
| 5495 | + encrypted_room, "m.room.encrypted", {}, tok=self.bad_user_tok |
| 5496 | + ) |
| 5497 | + originals.append(res["event_id"]) |
| 5498 | + |
| 5499 | + # redact user's events |
| 5500 | + channel = self.make_request( |
| 5501 | + "POST", |
| 5502 | + f"/_synapse/admin/v1/user/{self.bad_user}/redact", |
| 5503 | + content={"rooms": []}, |
| 5504 | + access_token=self.admin_tok, |
| 5505 | + ) |
| 5506 | + self.assertEqual(channel.code, 200) |
| 5507 | + |
| 5508 | + matched = [] |
| 5509 | + filter = json.dumps({"types": [EventTypes.Redaction]}) |
| 5510 | + channel = self.make_request( |
| 5511 | + "GET", |
| 5512 | + f"rooms/{encrypted_room}/messages?filter={filter}&limit=50", |
| 5513 | + access_token=self.admin_tok, |
| 5514 | + ) |
| 5515 | + self.assertEqual(channel.code, 200) |
| 5516 | + |
| 5517 | + for event in channel.json_body["chunk"]: |
| 5518 | + for event_id in originals: |
| 5519 | + if event["type"] == "m.room.redaction" and event["redacts"] == event_id: |
| 5520 | + matched.append(event_id) |
| 5521 | + self.assertEqual(len(matched), len(originals)) |
| 5522 | + |
5470 | 5523 |
|
5471 | 5524 | class UserRedactionBackgroundTaskTestCase(BaseMultiWorkerStreamTestCase): |
5472 | 5525 | servlets = [ |
|
0 commit comments