From 175989e363a4f92748262efe6a0172a9112ebe0f Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 3 Aug 2022 12:15:51 +0100 Subject: [PATCH] Tweak soft-fail checking --- roomserver/internal/helpers/auth.go | 12 +++--------- roomserver/internal/input/input_events.go | 9 +++++---- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/roomserver/internal/helpers/auth.go b/roomserver/internal/helpers/auth.go index 648c50cf6..4b5b36230 100644 --- a/roomserver/internal/helpers/auth.go +++ b/roomserver/internal/helpers/auth.go @@ -30,6 +30,7 @@ import ( // the soft-fail bool. func CheckForSoftFail( ctx context.Context, + roomInfo *types.RoomInfo, db storage.Database, event *gomatrixserverlib.HeaderedEvent, stateEventIDs []string, @@ -44,18 +45,11 @@ func CheckForSoftFail( return true, fmt.Errorf("StateEntriesForEventIDs failed: %w", err) } } else { - // Work out if the room exists. - var roomInfo *types.RoomInfo - roomInfo, err = db.RoomInfo(ctx, event.RoomID()) - if err != nil { - return false, fmt.Errorf("db.RoomNID: %w", err) - } + // Then get the state entries for the current state snapshot. + // We'll use this to check if the event is allowed right now. if roomInfo == nil || roomInfo.IsStub() { 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) authStateEntries, err = roomState.LoadStateAtSnapshot(ctx, roomInfo.StateSnapshotNID()) if err != nil { diff --git a/roomserver/internal/input/input_events.go b/roomserver/internal/input/input_events.go index efec06abb..797341dcd 100644 --- a/roomserver/internal/input/input_events.go +++ b/roomserver/internal/input/input_events.go @@ -196,7 +196,7 @@ func (r *Inputer) processRoomEvent( var rejectionErr error if rejectionErr = gomatrixserverlib.Allowed(event, &authEvents); rejectionErr != nil { 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. @@ -231,9 +231,10 @@ func (r *Inputer) processRoomEvent( // Check that the event passes authentication checks based on the // current room state. 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 { - 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) } 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 } }