aboutsummaryrefslogtreecommitdiff
path: root/internal/eventutil
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2023-06-28 10:05:00 +0200
committerGitHub <noreply@github.com>2023-06-28 10:05:00 +0200
commita5ea928d0fc52f0efb6607791ac59e18103b57de (patch)
tree2f73666fcee8ed0f16987c15aa494835f0b943dc /internal/eventutil
parent45082d4dcefadceada1b4374f3876365887cfd4a (diff)
Fix syncAPI redactions (#3118)
Previously we were setting `redacted_because` to the PDU event, but as per the spec it should really be a client event. This fixes it.
Diffstat (limited to 'internal/eventutil')
-rw-r--r--internal/eventutil/events.go14
1 files changed, 12 insertions, 2 deletions
diff --git a/internal/eventutil/events.go b/internal/eventutil/events.go
index 0f73db2d..56ee576a 100644
--- a/internal/eventutil/events.go
+++ b/internal/eventutil/events.go
@@ -22,6 +22,7 @@ import (
"github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/types"
+ "github.com/matrix-org/dendrite/syncapi/synctypes"
"github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
@@ -169,13 +170,22 @@ func truncateAuthAndPrevEvents(auth, prev []string) (
// RedactEvent redacts the given event and sets the unsigned field appropriately. This should be used by
// downstream components to the roomserver when an OutputTypeRedactedEvent occurs.
-func RedactEvent(redactionEvent, redactedEvent gomatrixserverlib.PDU) error {
+func RedactEvent(ctx context.Context, redactionEvent, redactedEvent gomatrixserverlib.PDU, querier api.QuerySenderIDAPI) error {
// sanity check
if redactionEvent.Type() != spec.MRoomRedaction {
return fmt.Errorf("RedactEvent: redactionEvent isn't a redaction event, is '%s'", redactionEvent.Type())
}
redactedEvent.Redact()
- if err := redactedEvent.SetUnsignedField("redacted_because", redactionEvent); err != nil {
+ validRoomID, err := spec.NewRoomID(redactionEvent.RoomID())
+ if err != nil {
+ return err
+ }
+ senderID, err := querier.QueryUserIDForSender(ctx, *validRoomID, redactionEvent.SenderID())
+ if err != nil {
+ return err
+ }
+ redactedBecause := synctypes.ToClientEvent(redactionEvent, synctypes.FormatSync, *senderID, redactionEvent.StateKey())
+ if err := redactedEvent.SetUnsignedField("redacted_because", redactedBecause); err != nil {
return err
}
// NOTSPEC: sytest relies on this unspecced field existing :(