Tweak soft-fail checking

This commit is contained in:
Neil Alexander 2022-08-03 12:15:51 +01:00
parent c69c189a64
commit 175989e363
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
2 changed files with 8 additions and 13 deletions

View file

@ -30,6 +30,7 @@ import (
// the soft-fail bool. // the soft-fail bool.
func CheckForSoftFail( func CheckForSoftFail(
ctx context.Context, ctx context.Context,
roomInfo *types.RoomInfo,
db storage.Database, db storage.Database,
event *gomatrixserverlib.HeaderedEvent, event *gomatrixserverlib.HeaderedEvent,
stateEventIDs []string, stateEventIDs []string,
@ -44,18 +45,11 @@ func CheckForSoftFail(
return true, fmt.Errorf("StateEntriesForEventIDs failed: %w", err) return true, fmt.Errorf("StateEntriesForEventIDs failed: %w", err)
} }
} else { } else {
// Work out if the room exists. // Then get the state entries for the current state snapshot.
var roomInfo *types.RoomInfo // We'll use this to check if the event is allowed right now.
roomInfo, err = db.RoomInfo(ctx, event.RoomID())
if err != nil {
return false, fmt.Errorf("db.RoomNID: %w", err)
}
if roomInfo == nil || roomInfo.IsStub() { if roomInfo == nil || roomInfo.IsStub() {
return false, nil return false, nil
} }
// Then get the state entries for the current state snapshot.
// We'll use this to check if the event is allowed right now.
roomState := state.NewStateResolution(db, roomInfo) roomState := state.NewStateResolution(db, roomInfo)
authStateEntries, err = roomState.LoadStateAtSnapshot(ctx, roomInfo.StateSnapshotNID()) authStateEntries, err = roomState.LoadStateAtSnapshot(ctx, roomInfo.StateSnapshotNID())
if err != nil { if err != nil {

View file

@ -196,7 +196,7 @@ func (r *Inputer) processRoomEvent(
var rejectionErr error var rejectionErr error
if rejectionErr = gomatrixserverlib.Allowed(event, &authEvents); rejectionErr != nil { if rejectionErr = gomatrixserverlib.Allowed(event, &authEvents); rejectionErr != nil {
isRejected = true isRejected = true
logger.WithError(rejectionErr).Warnf("Event %s not allowed by auth events", event.EventID()) logger.WithError(rejectionErr).Warnf("Event %s rejected by auth events", event.EventID())
} }
// Accumulate the auth event NIDs. // Accumulate the auth event NIDs.
@ -231,9 +231,10 @@ func (r *Inputer) processRoomEvent(
// Check that the event passes authentication checks based on the // Check that the event passes authentication checks based on the
// current room state. // current room state.
var err error var err error
softfail, err = helpers.CheckForSoftFail(ctx, r.DB, headered, input.StateEventIDs) softfail, err = helpers.CheckForSoftFail(ctx, roomInfo, r.DB, headered, input.StateEventIDs)
if err != nil { if err != nil {
logger.WithError(err).Warn("Error authing soft-failed event") logger.WithError(err).Warnf("Event %s rejected by current room state", event.EventID())
rejectionErr = fmt.Errorf("rejected by current room state: %w", err)
} }
} }
@ -307,7 +308,7 @@ func (r *Inputer) processRoomEvent(
return fmt.Errorf("r.processStateBefore: %w", err) return fmt.Errorf("r.processStateBefore: %w", err)
} }
if rejectionErr != nil { if rejectionErr != nil {
rejectionErr = fmt.Errorf("rejected by state before event: %w", rejectionErr) logger.WithError(err).Warnf("Event %s rejected by state before event", event.EventID())
isRejected = true isRejected = true
} }
} }