mirror of
https://github.com/matrix-org/sliding-sync.git
synced 2025-03-10 13:37:11 +00:00
Check for unstable prefix in MSC4115
This commit is contained in:
parent
abf5aeff82
commit
0af85096aa
@ -274,6 +274,7 @@ func (h *Handler) Accumulate(ctx context.Context, userID, deviceID, roomID strin
|
|||||||
for i := range timeline.Events {
|
for i := range timeline.Events {
|
||||||
// Delete MSC4115 field as it isn't accurate when we reuse the same event for >1 user
|
// Delete MSC4115 field as it isn't accurate when we reuse the same event for >1 user
|
||||||
timeline.Events[i], _ = sjson.DeleteBytes(timeline.Events[i], "unsigned.membership")
|
timeline.Events[i], _ = sjson.DeleteBytes(timeline.Events[i], "unsigned.membership")
|
||||||
|
timeline.Events[i], _ = sjson.DeleteBytes(timeline.Events[i], `unsigned.io\.element\.msc4115\.membership`)
|
||||||
parsed := gjson.ParseBytes(timeline.Events[i])
|
parsed := gjson.ParseBytes(timeline.Events[i])
|
||||||
eventID := parsed.Get("event_id").Str
|
eventID := parsed.Get("event_id").Str
|
||||||
|
|
||||||
@ -376,6 +377,7 @@ func (h *Handler) Accumulate(ctx context.Context, userID, deviceID, roomID strin
|
|||||||
func (h *Handler) Initialise(ctx context.Context, roomID string, state []json.RawMessage) error {
|
func (h *Handler) Initialise(ctx context.Context, roomID string, state []json.RawMessage) error {
|
||||||
for i := range state { // Delete MSC4115 field as it isn't accurate when we reuse the same event for >1 user
|
for i := range state { // Delete MSC4115 field as it isn't accurate when we reuse the same event for >1 user
|
||||||
state[i], _ = sjson.DeleteBytes(state[i], "unsigned.membership")
|
state[i], _ = sjson.DeleteBytes(state[i], "unsigned.membership")
|
||||||
|
state[i], _ = sjson.DeleteBytes(state[i], `unsigned.io\.element\.msc4115\.membership`)
|
||||||
}
|
}
|
||||||
res, err := h.Store.Initialise(roomID, state)
|
res, err := h.Store.Initialise(roomID, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -2,6 +2,7 @@ package syncv3
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -364,6 +365,15 @@ func TestBumpEventTypesOnStartup(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteMSC4115Field(t *testing.T) {
|
func TestDeleteMSC4115Field(t *testing.T) {
|
||||||
|
t.Run("stable prefix", func(t *testing.T) {
|
||||||
|
testDeleteMSC4115Field(t, "membership")
|
||||||
|
})
|
||||||
|
t.Run("unstable prefix", func(t *testing.T) {
|
||||||
|
testDeleteMSC4115Field(t, "io.element.msc4115.membership")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func testDeleteMSC4115Field(t *testing.T, fieldName string) {
|
||||||
rig := NewTestRig(t)
|
rig := NewTestRig(t)
|
||||||
defer rig.Finish()
|
defer rig.Finish()
|
||||||
roomID := "!TestDeleteMSC4115Field:localhost"
|
roomID := "!TestDeleteMSC4115Field:localhost"
|
||||||
@ -390,11 +400,11 @@ func TestDeleteMSC4115Field(t *testing.T) {
|
|||||||
|
|
||||||
// ensure live events remove the field.
|
// ensure live events remove the field.
|
||||||
liveEvent := testutils.NewMessageEvent(t, alice, "live event", testutils.WithUnsigned(map[string]interface{}{
|
liveEvent := testutils.NewMessageEvent(t, alice, "live event", testutils.WithUnsigned(map[string]interface{}{
|
||||||
"membership": "join",
|
fieldName: "join",
|
||||||
}))
|
}))
|
||||||
liveEventWithoutMembership := make(json.RawMessage, len(liveEvent))
|
liveEventWithoutMembership := make(json.RawMessage, len(liveEvent))
|
||||||
copy(liveEventWithoutMembership, liveEvent)
|
copy(liveEventWithoutMembership, liveEvent)
|
||||||
liveEventWithoutMembership, err := sjson.DeleteBytes(liveEventWithoutMembership, "unsigned.membership")
|
liveEventWithoutMembership, err := sjson.DeleteBytes(liveEventWithoutMembership, "unsigned."+strings.ReplaceAll(fieldName, ".", `\.`))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to delete unsigned.membership field")
|
t.Fatalf("failed to delete unsigned.membership field")
|
||||||
}
|
}
|
||||||
@ -411,11 +421,11 @@ func TestDeleteMSC4115Field(t *testing.T) {
|
|||||||
stateEvent := testutils.NewStateEvent(t, "m.room.name", "", alice, map[string]interface{}{
|
stateEvent := testutils.NewStateEvent(t, "m.room.name", "", alice, map[string]interface{}{
|
||||||
"name": "Room Name",
|
"name": "Room Name",
|
||||||
}, testutils.WithUnsigned(map[string]interface{}{
|
}, testutils.WithUnsigned(map[string]interface{}{
|
||||||
"membership": "join",
|
fieldName: "join",
|
||||||
}))
|
}))
|
||||||
stateEventWithoutMembership := make(json.RawMessage, len(stateEvent))
|
stateEventWithoutMembership := make(json.RawMessage, len(stateEvent))
|
||||||
copy(stateEventWithoutMembership, stateEvent)
|
copy(stateEventWithoutMembership, stateEvent)
|
||||||
stateEventWithoutMembership, err = sjson.DeleteBytes(stateEventWithoutMembership, "unsigned.membership")
|
stateEventWithoutMembership, err = sjson.DeleteBytes(stateEventWithoutMembership, "unsigned."+strings.ReplaceAll(fieldName, ".", `\.`))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to delete unsigned.membership field")
|
t.Fatalf("failed to delete unsigned.membership field")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user