From 00e719f7e7a2cab4a624960dbdbac72847114d59 Mon Sep 17 00:00:00 2001 From: Devon Hudson Date: Fri, 2 Jun 2023 16:36:11 -0600 Subject: [PATCH] Refine SenderID/UserID usage --- clientapi/routing/directory.go | 4 ++-- roomserver/api/api.go | 2 +- roomserver/internal/input/input_events.go | 12 +++++++----- roomserver/internal/perform/perform_backfill.go | 4 ++-- roomserver/internal/perform/perform_invite.go | 4 ++-- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/clientapi/routing/directory.go b/clientapi/routing/directory.go index f1f729cc3..bc8ef6d65 100644 --- a/clientapi/routing/directory.go +++ b/clientapi/routing/directory.go @@ -189,7 +189,7 @@ func SetLocalAlias( } } - deviceSenderID, err := rsAPI.QuerySenderIDForRoom(req.Context(), alias, *userID) + deviceSenderID, err := rsAPI.QuerySenderIDForUser(req.Context(), alias, *userID) if err != nil { return util.JSONResponse{ Code: http.StatusInternalServerError, @@ -238,7 +238,7 @@ func RemoveLocalAlias( } } - deviceSenderID, err := rsAPI.QuerySenderIDForRoom(req.Context(), alias, *userID) + deviceSenderID, err := rsAPI.QuerySenderIDForUser(req.Context(), alias, *userID) if err != nil { return util.JSONResponse{ Code: http.StatusInternalServerError, diff --git a/roomserver/api/api.go b/roomserver/api/api.go index be0e9b16e..99ec53719 100644 --- a/roomserver/api/api.go +++ b/roomserver/api/api.go @@ -67,7 +67,7 @@ type InputRoomEventsAPI interface { type QuerySenderIDAPI interface { // Accepts either roomID or alias - QuerySenderIDForRoom(ctx context.Context, roomAliasOrID string, userID spec.UserID) (string, error) + QuerySenderIDForUser(ctx context.Context, roomAliasOrID string, userID spec.UserID) (string, error) } // Query the latest events and state for a room from the room server. diff --git a/roomserver/internal/input/input_events.go b/roomserver/internal/input/input_events.go index e203ebf3a..7fb5bfc13 100644 --- a/roomserver/internal/input/input_events.go +++ b/roomserver/internal/input/input_events.go @@ -128,7 +128,7 @@ func (r *Inputer) processRoomEvent( if roomInfo == nil && !isCreateEvent { return fmt.Errorf("room %s does not exist for event %s", event.RoomID(), event.EventID()) } - _, senderDomain, err := gomatrixserverlib.SplitID('@', event.SenderID()) + sender, err := event.UserID() if err != nil { return fmt.Errorf("event has invalid sender %q", event.SenderID()) } @@ -193,9 +193,9 @@ func (r *Inputer) processRoomEvent( serverRes.ServerNames = append(serverRes.ServerNames, input.Origin) delete(servers, input.Origin) } - if senderDomain != input.Origin && senderDomain != r.Cfg.Matrix.ServerName { - serverRes.ServerNames = append(serverRes.ServerNames, senderDomain) - delete(servers, senderDomain) + if sender.Domain() != input.Origin && sender.Domain() != r.Cfg.Matrix.ServerName { + serverRes.ServerNames = append(serverRes.ServerNames, sender.Domain()) + delete(servers, sender.Domain()) } for server := range servers { serverRes.ServerNames = append(serverRes.ServerNames, server) @@ -451,7 +451,7 @@ func (r *Inputer) processRoomEvent( } // Handle remote room upgrades, e.g. remove published room - if event.Type() == "m.room.tombstone" && event.StateKeyEquals("") && !r.Cfg.Matrix.IsLocalServerName(senderDomain) { + if event.Type() == "m.room.tombstone" && event.StateKeyEquals("") && !r.Cfg.Matrix.IsLocalServerName(sender.Domain()) { if err = r.handleRemoteRoomUpgrade(ctx, event); err != nil { return fmt.Errorf("failed to handle remote room upgrade: %w", err) } @@ -828,11 +828,13 @@ func (r *Inputer) kickGuests(ctx context.Context, event gomatrixserverlib.PDU, r continue } + // TODO: pseudoIDs: get userID for room using state key (which is now senderID) localpart, senderDomain, err := gomatrixserverlib.SplitID('@', *memberEvent.StateKey()) if err != nil { continue } + // TODO: pseudoIDs: query account by state key (which is now senderID) accountRes := &userAPI.QueryAccountByLocalpartResponse{} if err = r.UserAPI.QueryAccountByLocalpart(ctx, &userAPI.QueryAccountByLocalpartRequest{ Localpart: localpart, diff --git a/roomserver/internal/perform/perform_backfill.go b/roomserver/internal/perform/perform_backfill.go index 9b6d7f678..686bcc164 100644 --- a/roomserver/internal/perform/perform_backfill.go +++ b/roomserver/internal/perform/perform_backfill.go @@ -484,8 +484,8 @@ FindSuccessor: // Store the server names in a temporary map to avoid duplicates. serverSet := make(map[spec.ServerName]bool) for _, event := range memberEvents { - if _, senderDomain, err := gomatrixserverlib.SplitID('@', event.SenderID()); err == nil { - serverSet[senderDomain] = true + if sender, err := event.UserID(); err == nil { + serverSet[sender.Domain()] = true } } var servers []spec.ServerName diff --git a/roomserver/internal/perform/perform_invite.go b/roomserver/internal/perform/perform_invite.go index bb41e0dfc..7a12bc2cf 100644 --- a/roomserver/internal/perform/perform_invite.go +++ b/roomserver/internal/perform/perform_invite.go @@ -125,9 +125,9 @@ func (r *Inviter) PerformInvite( ) error { event := req.Event - sender, err := spec.NewUserID(event.SenderID(), true) + sender, err := event.UserID() if err != nil { - return spec.InvalidParam("The user ID is invalid") + return spec.InvalidParam("The sender user ID is invalid") } if !r.Cfg.Matrix.IsLocalServerName(sender.Domain()) { return api.ErrInvalidID{Err: fmt.Errorf("the invite must be from a local user")}