mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-08-01 13:52:46 +00:00
Make redaction check easier to read (#2995)
We need to check the redaction PL in Dendrite, if we do it in GMSL, we end up not sending the event to the output stream because it will be rejected. --------- Co-authored-by: kegsay <kegan@matrix.org>
This commit is contained in:
parent
7cde99a7a7
commit
9bcd0a2105
6 changed files with 285 additions and 28 deletions
|
@ -26,14 +26,14 @@ import (
|
|||
|
||||
"github.com/tidwall/gjson"
|
||||
|
||||
"github.com/matrix-org/dendrite/roomserver/internal/helpers"
|
||||
|
||||
"github.com/matrix-org/gomatrixserverlib"
|
||||
"github.com/matrix-org/util"
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/matrix-org/dendrite/roomserver/internal/helpers"
|
||||
|
||||
userAPI "github.com/matrix-org/dendrite/userapi/api"
|
||||
|
||||
fedapi "github.com/matrix-org/dendrite/federationapi/api"
|
||||
|
@ -275,10 +275,8 @@ func (r *Inputer) processRoomEvent(
|
|||
|
||||
// Check if the event is allowed by its auth events. If it isn't then
|
||||
// we consider the event to be "rejected" — it will still be persisted.
|
||||
redactAllowed := true
|
||||
if err = gomatrixserverlib.Allowed(event, &authEvents); err != nil {
|
||||
isRejected = true
|
||||
redactAllowed = false
|
||||
rejectionErr = err
|
||||
logger.WithError(rejectionErr).Warnf("Event %s not allowed by auth events", event.EventID())
|
||||
}
|
||||
|
@ -358,22 +356,6 @@ func (r *Inputer) processRoomEvent(
|
|||
return fmt.Errorf("updater.StoreEvent: %w", err)
|
||||
}
|
||||
|
||||
// if storing this event results in it being redacted then do so.
|
||||
var (
|
||||
redactedEventID string
|
||||
redactionEvent *gomatrixserverlib.Event
|
||||
redactedEvent *gomatrixserverlib.Event
|
||||
)
|
||||
if !isRejected && !isCreateEvent {
|
||||
redactionEvent, redactedEvent, err = r.DB.MaybeRedactEvent(ctx, roomInfo, eventNID, event, redactAllowed)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if redactedEvent != nil {
|
||||
redactedEventID = redactedEvent.EventID()
|
||||
}
|
||||
}
|
||||
|
||||
// For outliers we can stop after we've stored the event itself as it
|
||||
// doesn't have any associated state to store and we don't need to
|
||||
// notify anyone about it.
|
||||
|
@ -402,6 +384,24 @@ func (r *Inputer) processRoomEvent(
|
|||
}
|
||||
}
|
||||
|
||||
// if storing this event results in it being redacted then do so.
|
||||
// we do this after calculating state for this event as we may need to get power levels
|
||||
var (
|
||||
redactedEventID string
|
||||
redactionEvent *gomatrixserverlib.Event
|
||||
redactedEvent *gomatrixserverlib.Event
|
||||
)
|
||||
if !isRejected && !isCreateEvent {
|
||||
resolver := state.NewStateResolution(r.DB, roomInfo)
|
||||
redactionEvent, redactedEvent, err = r.DB.MaybeRedactEvent(ctx, roomInfo, eventNID, event, &resolver)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if redactedEvent != nil {
|
||||
redactedEventID = redactedEvent.EventID()
|
||||
}
|
||||
}
|
||||
|
||||
// We stop here if the event is rejected: We've stored it but won't update
|
||||
// forward extremities or notify downstream components about it.
|
||||
switch {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue