mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-07-31 13:22: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
|
@ -59,6 +59,47 @@ func NewStateResolution(db StateResolutionStorage, roomInfo *types.RoomInfo) Sta
|
|||
}
|
||||
}
|
||||
|
||||
type PowerLevelResolver interface {
|
||||
Resolve(ctx context.Context, eventID string) (*gomatrixserverlib.PowerLevelContent, error)
|
||||
}
|
||||
|
||||
func (p *StateResolution) Resolve(ctx context.Context, eventID string) (*gomatrixserverlib.PowerLevelContent, error) {
|
||||
stateEntries, err := p.LoadStateAtEvent(ctx, eventID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
wantTuple := types.StateKeyTuple{
|
||||
EventTypeNID: types.MRoomPowerLevelsNID,
|
||||
EventStateKeyNID: types.EmptyStateKeyNID,
|
||||
}
|
||||
|
||||
var plNID types.EventNID
|
||||
for _, entry := range stateEntries {
|
||||
if entry.StateKeyTuple == wantTuple {
|
||||
plNID = entry.EventNID
|
||||
break
|
||||
}
|
||||
}
|
||||
if plNID == 0 {
|
||||
return nil, fmt.Errorf("unable to find power level event")
|
||||
}
|
||||
|
||||
events, err := p.db.Events(ctx, p.roomInfo, []types.EventNID{plNID})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(events) == 0 {
|
||||
return nil, fmt.Errorf("unable to find power level event")
|
||||
}
|
||||
powerlevels, err := events[0].PowerLevels()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return powerlevels, nil
|
||||
}
|
||||
|
||||
// LoadStateAtSnapshot loads the full state of a room at a particular snapshot.
|
||||
// This is typically the state before an event or the current state of a room.
|
||||
// Returns a sorted list of state entries or an error if there was a problem talking to the database.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue