mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-09 23:23:10 -06:00
Fix syncAPI redactions
This commit is contained in:
parent
a734b112c6
commit
2b2f88a7dd
|
|
@ -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 :(
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ func (s *OutputRoomEventConsumer) onMessage(ctx context.Context, msgs []*nats.Ms
|
|||
func (s *OutputRoomEventConsumer) onRedactEvent(
|
||||
ctx context.Context, msg api.OutputRedactedEvent,
|
||||
) error {
|
||||
err := s.db.RedactEvent(ctx, msg.RedactedEventID, msg.RedactedBecause)
|
||||
err := s.db.RedactEvent(ctx, msg.RedactedEventID, msg.RedactedBecause, s.rsAPI)
|
||||
if err != nil {
|
||||
log.WithError(err).Error("RedactEvent error'd")
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ type Database interface {
|
|||
// goes wrong.
|
||||
PutFilter(ctx context.Context, localpart string, filter *synctypes.Filter) (string, error)
|
||||
// RedactEvent wipes an event in the database and sets the unsigned.redacted_because key to the redaction event
|
||||
RedactEvent(ctx context.Context, redactedEventID string, redactedBecause *rstypes.HeaderedEvent) error
|
||||
RedactEvent(ctx context.Context, redactedEventID string, redactedBecause *rstypes.HeaderedEvent, querier api.QuerySenderIDAPI) error
|
||||
// StoreReceipt stores new receipt events
|
||||
StoreReceipt(ctx context.Context, roomId, receiptType, userId, eventId string, timestamp spec.Timestamp) (pos types.StreamPosition, err error)
|
||||
UpdateIgnoresForUser(ctx context.Context, userID string, ignores *types.IgnoredUsers) error
|
||||
|
|
|
|||
|
|
@ -364,7 +364,7 @@ func (d *Database) PutFilter(
|
|||
return filterID, err
|
||||
}
|
||||
|
||||
func (d *Database) RedactEvent(ctx context.Context, redactedEventID string, redactedBecause *rstypes.HeaderedEvent) error {
|
||||
func (d *Database) RedactEvent(ctx context.Context, redactedEventID string, redactedBecause *rstypes.HeaderedEvent, querier api.QuerySenderIDAPI) error {
|
||||
redactedEvents, err := d.Events(ctx, []string{redactedEventID})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -375,7 +375,7 @@ func (d *Database) RedactEvent(ctx context.Context, redactedEventID string, reda
|
|||
}
|
||||
eventToRedact := redactedEvents[0].PDU
|
||||
redactionEvent := redactedBecause.PDU
|
||||
if err = eventutil.RedactEvent(redactionEvent, eventToRedact); err != nil {
|
||||
if err = eventutil.RedactEvent(ctx, redactionEvent, eventToRedact, querier); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue