mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-15 10:03:09 -06:00
Fix statekey usage in syncapi/storage_consumer
This commit is contained in:
parent
12375bb026
commit
199e1f0c59
|
|
@ -507,8 +507,20 @@ func (d *Database) CleanSendToDeviceUpdates(
|
||||||
|
|
||||||
// getMembershipFromEvent returns the value of content.membership iff the event is a state event
|
// getMembershipFromEvent returns the value of content.membership iff the event is a state event
|
||||||
// with type 'm.room.member' and state_key of userID. Otherwise, an empty string is returned.
|
// with type 'm.room.member' and state_key of userID. Otherwise, an empty string is returned.
|
||||||
func getMembershipFromEvent(ev gomatrixserverlib.PDU, userID string) (string, string) {
|
func getMembershipFromEvent(ctx context.Context, ev gomatrixserverlib.PDU, userID string, rsAPI api.SyncRoomserverAPI) (string, string) {
|
||||||
if ev.Type() != "m.room.member" || !ev.StateKeyEquals(userID) {
|
if ev.StateKey() == nil || *ev.StateKey() == "" {
|
||||||
|
return "", ""
|
||||||
|
}
|
||||||
|
fullUser, err := spec.NewUserID(userID, true)
|
||||||
|
if err != nil {
|
||||||
|
return "", ""
|
||||||
|
}
|
||||||
|
senderID, err := rsAPI.QuerySenderIDForUser(ctx, ev.RoomID(), *fullUser)
|
||||||
|
if err != nil {
|
||||||
|
return "", ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if ev.Type() != "m.room.member" || !ev.StateKeyEquals(string(senderID)) {
|
||||||
return "", ""
|
return "", ""
|
||||||
}
|
}
|
||||||
membership, err := ev.Membership()
|
membership, err := ev.Membership()
|
||||||
|
|
|
||||||
|
|
@ -430,7 +430,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
|
||||||
for _, ev := range stateStreamEvents {
|
for _, ev := range stateStreamEvents {
|
||||||
// Look for our membership in the state events and skip over any
|
// Look for our membership in the state events and skip over any
|
||||||
// membership events that are not related to us.
|
// membership events that are not related to us.
|
||||||
membership, prevMembership := getMembershipFromEvent(ev.PDU, userID)
|
membership, prevMembership := getMembershipFromEvent(ctx, ev.PDU, userID, rsAPI)
|
||||||
if membership == "" {
|
if membership == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
@ -556,7 +556,7 @@ func (d *DatabaseTransaction) GetStateDeltasForFullStateSync(
|
||||||
|
|
||||||
for roomID, stateStreamEvents := range state {
|
for roomID, stateStreamEvents := range state {
|
||||||
for _, ev := range stateStreamEvents {
|
for _, ev := range stateStreamEvents {
|
||||||
if membership, _ := getMembershipFromEvent(ev.PDU, userID); membership != "" {
|
if membership, _ := getMembershipFromEvent(ctx, ev.PDU, userID, rsAPI); membership != "" {
|
||||||
if membership != spec.Join { // We've already added full state for all joined rooms above.
|
if membership != spec.Join { // We've already added full state for all joined rooms above.
|
||||||
deltas[roomID] = types.StateDelta{
|
deltas[roomID] = types.StateDelta{
|
||||||
Membership: membership,
|
Membership: membership,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue