aboutsummaryrefslogtreecommitdiff
path: root/roomserver/internal/input_membership.go
diff options
context:
space:
mode:
Diffstat (limited to 'roomserver/internal/input_membership.go')
-rw-r--r--roomserver/internal/input_membership.go24
1 files changed, 16 insertions, 8 deletions
diff --git a/roomserver/internal/input_membership.go b/roomserver/internal/input_membership.go
index 666e7ebc..af0c7f8b 100644
--- a/roomserver/internal/input_membership.go
+++ b/roomserver/internal/input_membership.go
@@ -19,7 +19,6 @@ import (
"fmt"
"github.com/matrix-org/dendrite/roomserver/api"
- "github.com/matrix-org/dendrite/roomserver/storage"
"github.com/matrix-org/dendrite/roomserver/types"
"github.com/matrix-org/gomatrixserverlib"
)
@@ -28,9 +27,8 @@ import (
// user affected by a change in the current state of the room.
// Returns a list of output events to write to the kafka log to inform the
// consumers about the invites added or retired by the change in current state.
-func updateMemberships(
+func (r *RoomserverInternalAPI) updateMemberships(
ctx context.Context,
- db storage.Database,
updater types.RoomRecentEventsUpdater,
removed, added []types.StateEntry,
) ([]api.OutputEvent, error) {
@@ -48,7 +46,7 @@ func updateMemberships(
// Load the event JSON so we can look up the "membership" key.
// TODO: Maybe add a membership key to the events table so we can load that
// key without having to load the entire event JSON?
- events, err := db.Events(ctx, eventNIDs)
+ events, err := r.DB.Events(ctx, eventNIDs)
if err != nil {
return nil, err
}
@@ -71,15 +69,16 @@ func updateMemberships(
ae = &ev.Event
}
}
- if updates, err = updateMembership(updater, targetUserNID, re, ae, updates); err != nil {
+ if updates, err = r.updateMembership(updater, targetUserNID, re, ae, updates); err != nil {
return nil, err
}
}
return updates, nil
}
-func updateMembership(
- updater types.RoomRecentEventsUpdater, targetUserNID types.EventStateKeyNID,
+func (r *RoomserverInternalAPI) updateMembership(
+ updater types.RoomRecentEventsUpdater,
+ targetUserNID types.EventStateKeyNID,
remove, add *gomatrixserverlib.Event,
updates []api.OutputEvent,
) ([]api.OutputEvent, error) {
@@ -113,7 +112,7 @@ func updateMembership(
return updates, nil
}
- mu, err := updater.MembershipUpdater(targetUserNID)
+ mu, err := updater.MembershipUpdater(targetUserNID, r.isLocalTarget(add))
if err != nil {
return nil, err
}
@@ -132,6 +131,15 @@ func updateMembership(
}
}
+func (r *RoomserverInternalAPI) isLocalTarget(event *gomatrixserverlib.Event) bool {
+ isTargetLocalUser := false
+ if statekey := event.StateKey(); statekey != nil {
+ _, domain, _ := gomatrixserverlib.SplitID('@', *statekey)
+ isTargetLocalUser = domain == r.Cfg.Matrix.ServerName
+ }
+ return isTargetLocalUser
+}
+
func updateToInviteMembership(
mu types.MembershipUpdater, add *gomatrixserverlib.Event, updates []api.OutputEvent,
roomVersion gomatrixserverlib.RoomVersion,