From 54c122a16882cc79173bf2c9600da859d3dcbe4a Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 11 Oct 2022 14:53:07 +0100 Subject: [PATCH] Fix redactions maybe --- syncapi/consumers/roomserver.go | 17 +++++++++++++++++ syncapi/storage/interface.go | 1 + syncapi/storage/shared/storage_consumer.go | 10 +++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/syncapi/consumers/roomserver.go b/syncapi/consumers/roomserver.go index 37cf09af1..5b3a2c027 100644 --- a/syncapi/consumers/roomserver.go +++ b/syncapi/consumers/roomserver.go @@ -148,6 +148,15 @@ func (s *OutputRoomEventConsumer) onRedactEvent( log.WithError(err).Error("RedactEvent error'd") return err } + + if err = s.db.RedactRelations(ctx, msg.RedactedBecause.RoomID(), msg.RedactedEventID); err != nil { + log.WithFields(log.Fields{ + "room_id": msg.RedactedBecause.RoomID(), + "event_id": msg.RedactedBecause.EventID(), + "redacted_event_id": msg.RedactedEventID, + }).WithError(err).Warn("Failed to redact relations") + } + // fake a room event so we notify clients about the redaction, as if it were // a normal event. return s.onNewRoomEvent(ctx, api.OutputNewRoomEvent{ @@ -322,6 +331,14 @@ func (s *OutputRoomEventConsumer) onOldRoomEvent( }).WithError(err).Warn("failed to index fulltext element") } + if err = s.db.UpdateRelations(ctx, ev); err != nil { + log.WithFields(log.Fields{ + "room_id": ev.RoomID(), + "event_id": ev.EventID(), + "type": ev.Type(), + }).WithError(err).Warn("Failed to update relations") + } + if pduPos, err = s.notifyJoinedPeeks(ctx, ev, pduPos); err != nil { log.WithError(err).Errorf("Failed to notifyJoinedPeeks for PDU pos %d", pduPos) return err diff --git a/syncapi/storage/interface.go b/syncapi/storage/interface.go index 9a9bf16ad..972e74f16 100644 --- a/syncapi/storage/interface.go +++ b/syncapi/storage/interface.go @@ -175,6 +175,7 @@ type Database interface { UpdateIgnoresForUser(ctx context.Context, userID string, ignores *types.IgnoredUsers) error ReIndex(ctx context.Context, limit, afterID int64) (map[int64]gomatrixserverlib.HeaderedEvent, error) UpdateRelations(ctx context.Context, event *gomatrixserverlib.HeaderedEvent) error + RedactRelations(ctx context.Context, roomID, redactedEventID string) error } type Presence interface { diff --git a/syncapi/storage/shared/storage_consumer.go b/syncapi/storage/shared/storage_consumer.go index 6406c0c46..d97ae667b 100644 --- a/syncapi/storage/shared/storage_consumer.go +++ b/syncapi/storage/shared/storage_consumer.go @@ -601,9 +601,7 @@ func (d *Database) UpdateRelations(ctx context.Context, event *gomatrixserverlib case content.Relations.RelationType == "": return nil case event.Type() == gomatrixserverlib.MRoomRedaction: - return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { - return d.Relations.DeleteRelation(ctx, txn, event.RoomID(), event.Redacts()) - }) + return nil default: return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { var err error @@ -618,3 +616,9 @@ func (d *Database) UpdateRelations(ctx context.Context, event *gomatrixserverlib }) } } + +func (d *Database) RedactRelations(ctx context.Context, roomID, redactedEventID string) error { + return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { + return d.Relations.DeleteRelation(ctx, txn, roomID, redactedEventID) + }) +}