From 5dcf90811b83c12a60179f5dd4380dcd924f019e Mon Sep 17 00:00:00 2001 From: Till Faelligen <2353100+S7evinK@users.noreply.github.com> Date: Tue, 25 Nov 2025 19:56:57 +0100 Subject: [PATCH 1/2] Fix creating rooms when the default is set to v12 Signed-off-by: Till Faelligen <2353100+S7evinK@users.noreply.github.com> --- clientapi/routing/createroom.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clientapi/routing/createroom.go b/clientapi/routing/createroom.go index a384e0757..18ca2347d 100644 --- a/clientapi/routing/createroom.go +++ b/clientapi/routing/createroom.go @@ -200,7 +200,7 @@ func createRoom( if createRequest.Preset == spec.PresetTrustedPrivateChat { additionalCreators = createRequest.Invite } - createContent, err := roomserverAPI.GenerateCreateContent(ctx, createRequest.RoomVersion, userID.String(), createRequest.CreationContent, additionalCreators) + createContent, err := roomserverAPI.GenerateCreateContent(ctx, roomVersion, userID.String(), createRequest.CreationContent, additionalCreators) if err != nil { util.GetLogger(ctx).WithError(err).Error("GenerateCreateContent failed") return util.JSONResponse{ From 2223b612ac6a7b70a320691d10dc19b27bde6dc6 Mon Sep 17 00:00:00 2001 From: Till Faelligen <2353100+S7evinK@users.noreply.github.com> Date: Wed, 10 Dec 2025 07:30:04 +0100 Subject: [PATCH 2/2] Correctly parse roomIDs for v12 rooms --- federationapi/routing/backfill.go | 2 +- federationapi/routing/threepid.go | 3 ++- roomserver/internal/perform/perform_admin.go | 2 +- roomserver/internal/perform/perform_peek.go | 4 ++-- roomserver/internal/perform/perform_unpeek.go | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/federationapi/routing/backfill.go b/federationapi/routing/backfill.go index 945975d6f..20f5923df 100644 --- a/federationapi/routing/backfill.go +++ b/federationapi/routing/backfill.go @@ -37,7 +37,7 @@ func Backfill( var err error // Check the room ID's format. - if _, _, err = gomatrixserverlib.SplitID('!', roomID); err != nil { + if _, err = spec.NewRoomID(roomID); err != nil { return util.JSONResponse{ Code: http.StatusBadRequest, JSON: spec.MissingParam("Bad room ID: " + err.Error()), diff --git a/federationapi/routing/threepid.go b/federationapi/routing/threepid.go index c2b4fa045..efde7014a 100644 --- a/federationapi/routing/threepid.go +++ b/federationapi/routing/threepid.go @@ -394,10 +394,11 @@ func sendToRemoteServer( } // Fallback to the room's server if the sender's domain is the same as // the current server's - _, remoteServers[1], err = gomatrixserverlib.SplitID('!', inv.RoomID) + roomID, err := spec.NewRoomID(inv.RoomID) if err != nil { return } + remoteServers[1] = roomID.Domain() for _, server := range remoteServers { err = federation.ExchangeThirdPartyInvite(ctx, cfg.Matrix.ServerName, server, proto) diff --git a/roomserver/internal/perform/perform_admin.go b/roomserver/internal/perform/perform_admin.go index da8c92a6b..9e7cc865e 100644 --- a/roomserver/internal/perform/perform_admin.go +++ b/roomserver/internal/perform/perform_admin.go @@ -192,7 +192,7 @@ func (r *Admin) PerformAdminPurgeRoom( roomID string, ) error { // Validate we actually got a room ID and nothing else - if _, _, err := gomatrixserverlib.SplitID('!', roomID); err != nil { + if _, err := spec.NewRoomID(roomID); err != nil { return err } diff --git a/roomserver/internal/perform/perform_peek.go b/roomserver/internal/perform/perform_peek.go index d15a90ac3..09da37385 100644 --- a/roomserver/internal/perform/perform_peek.go +++ b/roomserver/internal/perform/perform_peek.go @@ -114,11 +114,11 @@ func (r *Peeker) performPeekRoomByID( roomID = req.RoomIDOrAlias // Get the domain part of the room ID. - _, domain, err := gomatrixserverlib.SplitID('!', roomID) + specRoomID, err := spec.NewRoomID(roomID) if err != nil { return "", api.ErrInvalidID{Err: fmt.Errorf("room ID %q is invalid: %w", roomID, err)} } - + domain := specRoomID.Domain() // handle federated peeks // FIXME: don't create an outbound peek if we already have one going. if !r.Cfg.Matrix.IsLocalServerName(domain) { diff --git a/roomserver/internal/perform/perform_unpeek.go b/roomserver/internal/perform/perform_unpeek.go index db17937ad..b1e55d049 100644 --- a/roomserver/internal/perform/perform_unpeek.go +++ b/roomserver/internal/perform/perform_unpeek.go @@ -49,7 +49,7 @@ func (r *Unpeeker) performUnpeekRoomByID( roomID, userID, deviceID string, ) (err error) { // Get the domain part of the room ID. - _, _, err = gomatrixserverlib.SplitID('!', roomID) + _, err = spec.NewRoomID(roomID) if err != nil { return api.ErrInvalidID{Err: fmt.Errorf("room ID %q is invalid: %w", roomID, err)} }