From 8f967e5f52599be5b35f7dce3b9044de90f9b87a Mon Sep 17 00:00:00 2001 From: Till Faelligen <2353100+S7evinK@users.noreply.github.com> Date: Thu, 15 Jun 2023 13:23:07 +0200 Subject: [PATCH] Partially working pseudo IDs --- federationapi/internal/perform.go | 2 +- .../internal/perform/perform_create_room.go | 23 ++++++++++--------- roomserver/internal/perform/perform_join.go | 4 ++-- roomserver/internal/query/query.go | 2 +- syncapi/consumers/roomserver.go | 3 ++- syncapi/routing/search_test.go | 2 +- 6 files changed, 19 insertions(+), 17 deletions(-) diff --git a/federationapi/internal/perform.go b/federationapi/internal/perform.go index 74d9e1af5..5a98cd218 100644 --- a/federationapi/internal/perform.go +++ b/federationapi/internal/perform.go @@ -176,7 +176,7 @@ func (r *FederationInternalAPI) performJoinUsingServer( return "", keyErr } - return spec.SenderID(spec.Base64Bytes(key).Encode()), nil + return spec.SenderIDFromPseudoIDKey(key), nil }, } response, joinErr := gomatrixserverlib.PerformJoin(ctx, r, joinInput) diff --git a/roomserver/internal/perform/perform_create_room.go b/roomserver/internal/perform/perform_create_room.go index 965c128a6..9316c1290 100644 --- a/roomserver/internal/perform/perform_create_room.go +++ b/roomserver/internal/perform/perform_create_room.go @@ -65,6 +65,16 @@ func (c *Creator) PerformCreateRoom(ctx context.Context, userID spec.UserID, roo } } } + + _, err = c.DB.AssignRoomNID(ctx, roomID, createRequest.RoomVersion) + if err != nil { + util.GetLogger(ctx).WithError(err).Error("failed to assign roomNID") + return "", &util.JSONResponse{ + Code: http.StatusInternalServerError, + JSON: spec.InternalServerError{}, + } + } + var senderID spec.SenderID if createRequest.RoomVersion == gomatrixserverlib.RoomVersionPseudoIDs { // create user room key if needed @@ -76,7 +86,7 @@ func (c *Creator) PerformCreateRoom(ctx context.Context, userID spec.UserID, roo JSON: spec.InternalServerError{}, } } - senderID = spec.SenderID(spec.Base64Bytes(key).Encode()) + senderID = spec.SenderIDFromPseudoIDKey(key) } else { senderID = spec.SenderID(userID.String()) } @@ -102,15 +112,6 @@ func (c *Creator) PerformCreateRoom(ctx context.Context, userID spec.UserID, roo } } - _, err = c.DB.AssignRoomNID(ctx, roomID, createRequest.RoomVersion) - if err != nil { - util.GetLogger(ctx).WithError(err).Error("failed to assign roomNID") - return "", &util.JSONResponse{ - Code: http.StatusInternalServerError, - JSON: spec.InternalServerError{}, - } - } - var guestsCanJoin bool switch createRequest.StatePreset { case spec.PresetPrivateChat: @@ -179,7 +180,7 @@ func (c *Creator) PerformCreateRoom(ctx context.Context, userID spec.UserID, roo } mapping := &gomatrixserverlib.MXIDMapping{ - UserRoomKey: spec.UserRoomKey(pseudoIDKey), + UserRoomKey: spec.SenderIDFromPseudoIDKey(pseudoIDKey), UserID: userID.String(), } diff --git a/roomserver/internal/perform/perform_join.go b/roomserver/internal/perform/perform_join.go index 759c577b0..092567ca6 100644 --- a/roomserver/internal/perform/perform_join.go +++ b/roomserver/internal/perform/perform_join.go @@ -211,7 +211,7 @@ func (r *Joiner) performJoinRoomByID( util.GetLogger(ctx).WithError(keyErr).Error("GetOrCreateUserRoomPrivateKey failed") return "", "", fmt.Errorf("GetOrCreateUserRoomPrivateKey failed: %w", keyErr) } - senderID = spec.SenderID(spec.Base64Bytes(key).Encode()) + senderID = spec.SenderIDFromPseudoIDKey(key) } default: checkInvitePending = true @@ -300,7 +300,7 @@ func (r *Joiner) performJoinRoomByID( } mapping := &gomatrixserverlib.MXIDMapping{ - UserRoomKey: spec.UserRoomKey(pseudoIDKey), + UserRoomKey: spec.SenderIDFromPseudoIDKey(pseudoIDKey), UserID: userID.String(), } diff --git a/roomserver/internal/query/query.go b/roomserver/internal/query/query.go index 918619e5e..1b5637266 100644 --- a/roomserver/internal/query/query.go +++ b/roomserver/internal/query/query.go @@ -1029,7 +1029,7 @@ func (r *Queryer) QueryUserIDForSender(ctx context.Context, roomID spec.RoomID, } if userKeys, ok := result[roomID]; ok { - if userID, ok := userKeys[string(senderID)]; ok { + if userID, ok := userKeys[string(bytes)]; ok { return spec.NewUserID(userID, true) } } diff --git a/syncapi/consumers/roomserver.go b/syncapi/consumers/roomserver.go index 785676755..6f6cda0aa 100644 --- a/syncapi/consumers/roomserver.go +++ b/syncapi/consumers/roomserver.go @@ -570,7 +570,8 @@ func (s *OutputRoomEventConsumer) updateStateEvent(event *rstypes.HeaderedEvent) if event.StateKey() != nil { if *event.StateKey() != "" { - sku, err := s.rsAPI.QueryUserIDForSender(s.ctx, *validRoomID, spec.SenderID(stateKey)) + var sku *spec.UserID + sku, err = s.rsAPI.QueryUserIDForSender(s.ctx, *validRoomID, spec.SenderID(stateKey)) if err == nil && sku != nil { sKey := sku.String() event.StateKeyResolved = &sKey diff --git a/syncapi/routing/search_test.go b/syncapi/routing/search_test.go index c70abbd1b..939650a95 100644 --- a/syncapi/routing/search_test.go +++ b/syncapi/routing/search_test.go @@ -231,7 +231,7 @@ func TestSearch(t *testing.T) { stateEventIDs = append(stateEventIDs, x.EventID()) } - sp, err = db.WriteEvent(processCtx.Context(), x, spec.UserID{}, stateEvents, stateEventIDs, nil, nil, false, gomatrixserverlib.HistoryVisibilityShared) + sp, err = db.WriteEvent(processCtx.Context(), x, stateEvents, stateEventIDs, nil, nil, false, gomatrixserverlib.HistoryVisibilityShared) assert.NoError(t, err) if x.Type() != "m.room.message" { continue