diff --git a/federationapi/routing/leave.go b/federationapi/routing/leave.go index 49c777124..636ade748 100644 --- a/federationapi/routing/leave.go +++ b/federationapi/routing/leave.go @@ -165,8 +165,32 @@ func SendLeave( } } - event, err := gomatrixserverlib.HandleSendLeave( - httpReq.Context(), request.Content(), request.Origin(), roomVersion, eventID, roomID, rsAPI, keys, + verImpl, err := gomatrixserverlib.GetRoomVersion(roomVersion) + if err != nil { + return util.JSONResponse{ + Code: http.StatusBadRequest, + JSON: spec.UnsupportedRoomVersion(err.Error()), + } + } + + // Decode the incomingEvent JSON from the request. + incomingEvent, err := verImpl.NewEventFromUntrustedJSON(request.Content()) + switch err.(type) { + case gomatrixserverlib.BadJSONError: + return util.JSONResponse{ + Code: http.StatusBadRequest, + JSON: spec.BadJSON(err.Error()), + } + case nil: + default: + return util.JSONResponse{ + Code: http.StatusBadRequest, + JSON: spec.NotJSON("The request body could not be decoded into valid JSON. " + err.Error()), + } + } + + leaveEvent, err := verImpl.HandleSendLeave( + httpReq.Context(), incomingEvent, request.Origin(), eventID, roomID, rsAPI, keys, ) switch e := err.(type) { @@ -211,7 +235,7 @@ func SendLeave( InputRoomEvents: []api.InputRoomEvent{ { Kind: api.KindNew, - Event: &types.HeaderedEvent{PDU: event}, + Event: &types.HeaderedEvent{PDU: leaveEvent}, SendAsServer: string(cfg.Matrix.ServerName), TransactionID: nil, }, diff --git a/go.mod b/go.mod index 8906b8c66..d206c91ed 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/matrix-org/dugong v0.0.0-20210921133753-66e6b1c67e2e github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91 github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530 - github.com/matrix-org/gomatrixserverlib v0.0.0-20230601112942-5d099f949e82 + github.com/matrix-org/gomatrixserverlib v0.0.0-20230602105922-540062a7516d github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a github.com/matrix-org/util v0.0.0-20221111132719-399730281e66 github.com/mattn/go-sqlite3 v1.14.16 diff --git a/go.sum b/go.sum index 0060419f2..a551bc5a4 100644 --- a/go.sum +++ b/go.sum @@ -323,8 +323,8 @@ github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91 h1:s7fexw github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91/go.mod h1:e+cg2q7C7yE5QnAXgzo512tgFh1RbQLC0+jozuegKgo= github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530 h1:kHKxCOLcHH8r4Fzarl4+Y3K5hjothkVW5z7T1dUM11U= github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530/go.mod h1:/gBX06Kw0exX1HrwmoBibFA98yBk/jxKpGVeyQbff+s= -github.com/matrix-org/gomatrixserverlib v0.0.0-20230601112942-5d099f949e82 h1:VC9MCGI47z3ksNQt/sTcnwO//syibxgyz/6ckD6BjkY= -github.com/matrix-org/gomatrixserverlib v0.0.0-20230601112942-5d099f949e82/go.mod h1:H9V9N3Uqn1bBJqYJNGK1noqtgJTaCEhtTdcH/mp50uU= +github.com/matrix-org/gomatrixserverlib v0.0.0-20230602105922-540062a7516d h1:7zP85gTIeoHb/GG0qRVi5uhwfnbSpt7G8SwDvGw7mUE= +github.com/matrix-org/gomatrixserverlib v0.0.0-20230602105922-540062a7516d/go.mod h1:H9V9N3Uqn1bBJqYJNGK1noqtgJTaCEhtTdcH/mp50uU= github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a h1:awrPDf9LEFySxTLKYBMCiObelNx/cBuv/wzllvCCH3A= github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a/go.mod h1:HchJX9oKMXaT2xYFs0Ha/6Zs06mxLU8k6F1ODnrGkeQ= github.com/matrix-org/util v0.0.0-20221111132719-399730281e66 h1:6z4KxomXSIGWqhHcfzExgkH3Z3UkIXry4ibJS4Aqz2Y=