Skip to content

Commit 74e2f02

Browse files
authored
Fix admin redaction endpoint not redacting encrypted messages (#18434)
1 parent 0afdc0f commit 74e2f02

3 files changed

Lines changed: 56 additions & 2 deletions

File tree

changelog.d/18434.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix admin redaction endpoint not redacting encrypted messages.

synapse/handlers/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ async def _redact_all_events(
445445
user_id,
446446
room,
447447
limit,
448-
["m.room.member", "m.room.message"],
448+
["m.room.member", "m.room.message", "m.room.encrypted"],
449449
)
450450
if not event_ids:
451451
# nothing to redact in this room

tests/rest/admin/test_user.py

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@
3636
from twisted.web.resource import Resource
3737

3838
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+
)
4046
from synapse.api.errors import Codes, HttpResponseException, ResourceLimitError
4147
from synapse.api.room_versions import RoomVersions
4248
from synapse.media.filepath import MediaFilePaths
@@ -5467,6 +5473,53 @@ def test_redactions_for_remote_user_succeed_with_admin_priv_in_room(self) -> Non
54675473
# we originally sent 5 messages so 5 should be redacted
54685474
self.assertEqual(len(original_message_ids), 0)
54695475

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+
54705523

54715524
class UserRedactionBackgroundTaskTestCase(BaseMultiWorkerStreamTestCase):
54725525
servlets = [

0 commit comments

Comments
 (0)