Add MXIDMapping for pseudoID rooms (#3112)

Add `MXIDMapping` on membership events when
creating/joining rooms.
This commit is contained in:
Till 2023-06-28 20:29:49 +02:00 committed by GitHub
parent 4722f12fab
commit 23cd7877a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
41 changed files with 593 additions and 177 deletions

View file

@ -343,9 +343,9 @@ func (s *currentRoomStateStatements) UpsertRoomState(
event.RoomID(),
event.EventID(),
event.Type(),
event.SenderID(),
event.UserID.String(),
containsURL,
*event.StateKey(),
*event.StateKeyResolved,
headeredJSON,
membership,
addedAt,

View file

@ -101,7 +101,7 @@ func (s *inviteEventsStatements) InsertInviteEvent(
ctx,
inviteEvent.RoomID(),
inviteEvent.EventID(),
*inviteEvent.StateKey(),
inviteEvent.UserID.String(),
headeredJSON,
).Scan(&streamPos)
return

View file

@ -109,7 +109,7 @@ func (s *membershipsStatements) UpsertMembership(
_, err = sqlutil.TxStmt(txn, s.upsertMembershipStmt).ExecContext(
ctx,
event.RoomID(),
*event.StateKey(),
event.StateKeyResolved,
membership,
event.EventID(),
streamPos,

View file

@ -407,7 +407,7 @@ func (s *outputRoomEventsStatements) InsertEvent(
event.EventID(),
headeredJSON,
event.Type(),
event.SenderID(),
event.UserID.String(),
containsURL,
pq.StringArray(addState),
pq.StringArray(removeState),

View file

@ -342,9 +342,9 @@ func (s *currentRoomStateStatements) UpsertRoomState(
event.RoomID(),
event.EventID(),
event.Type(),
event.SenderID(),
event.UserID.String(),
containsURL,
*event.StateKey(),
*event.StateKeyResolved,
headeredJSON,
membership,
addedAt,

View file

@ -108,7 +108,7 @@ func (s *inviteEventsStatements) InsertInviteEvent(
streamPos,
inviteEvent.RoomID(),
inviteEvent.EventID(),
*inviteEvent.StateKey(),
inviteEvent.UserID.String(),
headeredJSON,
)
return

View file

@ -112,7 +112,7 @@ func (s *membershipsStatements) UpsertMembership(
_, err = sqlutil.TxStmt(txn, s.upsertMembershipStmt).ExecContext(
ctx,
event.RoomID(),
*event.StateKey(),
event.StateKeyResolved,
membership,
event.EventID(),
streamPos,

View file

@ -348,7 +348,7 @@ func (s *outputRoomEventsStatements) InsertEvent(
event.EventID(),
headeredJSON,
event.Type(),
event.SenderID(),
event.UserID.String(),
containsURL,
string(addStateJSON),
string(removeStateJSON),

View file

@ -43,6 +43,7 @@ func MustWriteEvents(t *testing.T, db storage.Database, events []*rstypes.Header
var addStateEventIDs []string
var removeStateEventIDs []string
if ev.StateKey() != nil {
ev.StateKeyResolved = ev.StateKey()
addStateEvents = append(addStateEvents, ev)
addStateEventIDs = append(addStateEventIDs, ev.EventID())
}

View file

@ -54,7 +54,13 @@ func TestCurrentRoomStateTable(t *testing.T) {
events := room.CurrentState()
err := sqlutil.WithTransaction(db, func(txn *sql.Tx) error {
for i, ev := range events {
err := tab.UpsertRoomState(ctx, txn, ev, nil, types.StreamPosition(i))
ev.StateKeyResolved = ev.StateKey()
userID, err := spec.NewUserID(string(ev.SenderID()), true)
if err != nil {
return err
}
ev.UserID = *userID
err = tab.UpsertRoomState(ctx, txn, ev, nil, types.StreamPosition(i))
if err != nil {
return fmt.Errorf("failed to UpsertRoomState: %w", err)
}

View file

@ -80,6 +80,7 @@ func TestMembershipsTable(t *testing.T) {
defer cancel()
for _, ev := range userEvents {
ev.StateKeyResolved = ev.StateKey()
if err := table.UpsertMembership(ctx, nil, ev, types.StreamPosition(ev.Depth()), 1); err != nil {
t.Fatalf("failed to upsert membership: %s", err)
}
@ -134,6 +135,7 @@ func testUpsert(t *testing.T, ctx context.Context, table tables.Memberships, mem
ev := room.CreateAndInsert(t, user, spec.MRoomMember, map[string]interface{}{
"membership": spec.Join,
}, test.WithStateKey(user.ID))
ev.StateKeyResolved = ev.StateKey()
// Insert the same event again, but with different positions, which should get updated
if err = table.UpsertMembership(ctx, nil, ev, 2, 2); err != nil {
t.Fatalf("failed to upsert membership: %s", err)