Skip to content
This repository was archived by the owner on Nov 25, 2024. It is now read-only.

Commit 7bb2ba8

Browse files
committed
Implement new RoomVersionImpl API
As outlined in matrix-org/gomatrixserverlib#368
1 parent 71eeccf commit 7bb2ba8

File tree

25 files changed

+140
-65
lines changed

25 files changed

+140
-65
lines changed

federationapi/federationapi_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ func TestRoomsV3URLEscapeDoNot404(t *testing.T) {
321321
)
322322

323323
for _, tc := range testCases {
324-
ev, err := tc.roomVer.NewEventFromTrustedJSON([]byte(tc.eventJSON), false)
324+
ev, err := gomatrixserverlib.MustGetRoomVersion(tc.roomVer).NewEventFromTrustedJSON([]byte(tc.eventJSON), false)
325325
if err != nil {
326326
t.Errorf("failed to parse event: %s", err)
327327
}

federationapi/internal/perform.go

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,9 @@ func (r *FederationInternalAPI) performJoinUsingServer(
201201
if respMakeJoin.RoomVersion == "" {
202202
respMakeJoin.RoomVersion = setDefaultRoomVersionFromJoinEvent(respMakeJoin.JoinEvent)
203203
}
204-
if _, err = respMakeJoin.RoomVersion.EventFormat(); err != nil {
205-
return fmt.Errorf("respMakeJoin.RoomVersion.EventFormat: %w", err)
204+
verImpl, err := gomatrixserverlib.GetRoomVersion(respMakeJoin.RoomVersion)
205+
if err != nil {
206+
return err
206207
}
207208

208209
// Build the join event.
@@ -235,7 +236,7 @@ func (r *FederationInternalAPI) performJoinUsingServer(
235236
// contain signatures that we don't know about.
236237
if len(respSendJoin.Event) > 0 {
237238
var remoteEvent *gomatrixserverlib.Event
238-
remoteEvent, err = respMakeJoin.RoomVersion.NewEventFromUntrustedJSON(respSendJoin.Event)
239+
remoteEvent, err = verImpl.NewEventFromUntrustedJSON(respSendJoin.Event)
239240
if err == nil && isWellFormedMembershipEvent(
240241
remoteEvent, roomID, userID,
241242
) {
@@ -464,8 +465,8 @@ func (r *FederationInternalAPI) performOutboundPeekUsingServer(
464465
if respPeek.RoomVersion == "" {
465466
respPeek.RoomVersion = gomatrixserverlib.RoomVersionV1
466467
}
467-
if _, err = respPeek.RoomVersion.EventFormat(); err != nil {
468-
return fmt.Errorf("respPeek.RoomVersion.EventFormat: %w", err)
468+
if !gomatrixserverlib.KnownRoomVersion(respPeek.RoomVersion) {
469+
return fmt.Errorf("unknown room version: %s", respPeek.RoomVersion)
469470
}
470471

471472
// we have the peek state now so let's process regardless of whether upstream gives up
@@ -552,6 +553,13 @@ func (r *FederationInternalAPI) PerformLeave(
552553
continue
553554
}
554555

556+
// Work out if we support the room version that has been supplied in
557+
// the make_leave response.
558+
_, err = gomatrixserverlib.GetRoomVersion(respMakeLeave.RoomVersion)
559+
if err != nil {
560+
return err
561+
}
562+
555563
// Set all the fields to be what they should be, this should be a no-op
556564
// but it's possible that the remote server returned us something "odd"
557565
respMakeLeave.LeaveEvent.Type = spec.MRoomMember
@@ -573,12 +581,6 @@ func (r *FederationInternalAPI) PerformLeave(
573581
continue
574582
}
575583

576-
// Work out if we support the room version that has been supplied in
577-
// the make_leave response.
578-
if _, err = respMakeLeave.RoomVersion.EventFormat(); err != nil {
579-
return gomatrixserverlib.UnsupportedRoomVersionError{}
580-
}
581-
582584
// Build the leave event.
583585
event, err := respMakeLeave.LeaveEvent.Build(
584586
time.Now(),
@@ -659,8 +661,12 @@ func (r *FederationInternalAPI) PerformInvite(
659661
if err != nil {
660662
return fmt.Errorf("r.federation.SendInviteV2: failed to send invite: %w", err)
661663
}
664+
verImpl, err := gomatrixserverlib.GetRoomVersion(request.RoomVersion)
665+
if err != nil {
666+
return err
667+
}
662668

663-
inviteEvent, err := request.RoomVersion.NewEventFromUntrustedJSON(inviteRes.Event)
669+
inviteEvent, err := verImpl.NewEventFromUntrustedJSON(inviteRes.Event)
664670
if err != nil {
665671
return fmt.Errorf("r.federation.SendInviteV2 failed to decode event response: %w", err)
666672
}
@@ -779,6 +785,10 @@ func federatedAuthProvider(
779785
// to repeat the entire set of checks just for a missing event or two.
780786
return func(roomVersion gomatrixserverlib.RoomVersion, eventIDs []string) ([]*gomatrixserverlib.Event, error) {
781787
returning := []*gomatrixserverlib.Event{}
788+
verImpl, err := gomatrixserverlib.GetRoomVersion(roomVersion)
789+
if err != nil {
790+
return nil, err
791+
}
782792

783793
// See if we have retry entries for each of the supplied event IDs.
784794
for _, eventID := range eventIDs {
@@ -808,7 +818,7 @@ func federatedAuthProvider(
808818
// event ID again.
809819
for _, pdu := range tx.PDUs {
810820
// Try to parse the event.
811-
ev, everr := roomVersion.NewEventFromUntrustedJSON(pdu)
821+
ev, everr := verImpl.NewEventFromUntrustedJSON(pdu)
812822
if everr != nil {
813823
return nil, fmt.Errorf("missingAuth gomatrixserverlib.NewEventFromUntrustedJSON: %w", everr)
814824
}

federationapi/queue/queue_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func (f *stubFederationClient) P2PSendTransactionToRelay(ctx context.Context, u
105105
func mustCreatePDU(t *testing.T) *gomatrixserverlib.HeaderedEvent {
106106
t.Helper()
107107
content := `{"type":"m.room.message"}`
108-
ev, err := gomatrixserverlib.RoomVersionV10.NewEventFromTrustedJSON([]byte(content), false)
108+
ev, err := gomatrixserverlib.MustGetRoomVersion(gomatrixserverlib.RoomVersionV10).NewEventFromTrustedJSON([]byte(content), false)
109109
if err != nil {
110110
t.Fatalf("failed to create event: %v", err)
111111
}

federationapi/routing/invite.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222

2323
"github.com/matrix-org/dendrite/clientapi/jsonerror"
2424
"github.com/matrix-org/dendrite/roomserver/api"
25-
roomserverVersion "github.com/matrix-org/dendrite/roomserver/version"
2625
"github.com/matrix-org/dendrite/setup/config"
2726
"github.com/matrix-org/gomatrixserverlib"
2827
"github.com/matrix-org/gomatrixserverlib/fclient"
@@ -78,7 +77,7 @@ func InviteV1(
7877
) util.JSONResponse {
7978
roomVer := gomatrixserverlib.RoomVersionV1
8079
body := request.Content()
81-
event, err := roomVer.NewEventFromTrustedJSON(body, false)
80+
event, err := gomatrixserverlib.MustGetRoomVersion(roomVer).NewEventFromTrustedJSON(body, false)
8281
switch err.(type) {
8382
case gomatrixserverlib.BadJSONError:
8483
return util.JSONResponse{
@@ -116,7 +115,8 @@ func processInvite(
116115
) util.JSONResponse {
117116

118117
// Check that we can accept invites for this room version.
119-
if _, err := roomserverVersion.SupportedRoomVersion(roomVer); err != nil {
118+
verImpl, err := gomatrixserverlib.GetRoomVersion(roomVer)
119+
if err != nil {
120120
return util.JSONResponse{
121121
Code: http.StatusBadRequest,
122122
JSON: jsonerror.UnsupportedRoomVersion(
@@ -157,7 +157,7 @@ func processInvite(
157157
}
158158

159159
// Check that the event is signed by the server sending the request.
160-
redacted, err := event.Version().RedactEventJSON(event.JSON())
160+
redacted, err := verImpl.RedactEventJSON(event.JSON())
161161
if err != nil {
162162
return util.JSONResponse{
163163
Code: http.StatusBadRequest,

federationapi/routing/join.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,17 @@ func SendJoin(
206206
JSON: jsonerror.InternalServerError(),
207207
}
208208
}
209+
verImpl, err := gomatrixserverlib.GetRoomVersion(verRes.RoomVersion)
210+
if err != nil {
211+
return util.JSONResponse{
212+
Code: http.StatusInternalServerError,
213+
JSON: jsonerror.UnsupportedRoomVersion(
214+
fmt.Sprintf("QueryRoomVersionForRoom returned unknown room version: %s", verRes.RoomVersion),
215+
),
216+
}
217+
}
209218

210-
event, err := verRes.RoomVersion.NewEventFromUntrustedJSON(request.Content())
219+
event, err := verImpl.NewEventFromUntrustedJSON(request.Content())
211220
if err != nil {
212221
return util.JSONResponse{
213222
Code: http.StatusBadRequest,
@@ -287,7 +296,7 @@ func SendJoin(
287296
}
288297

289298
// Check that the event is signed by the server sending the request.
290-
redacted, err := event.Version().RedactEventJSON(event.JSON())
299+
redacted, err := verImpl.RedactEventJSON(event.JSON())
291300
if err != nil {
292301
logrus.WithError(err).Errorf("XXX: join.go")
293302
return util.JSONResponse{
@@ -461,9 +470,11 @@ func checkRestrictedJoin(
461470
roomVersion gomatrixserverlib.RoomVersion,
462471
roomID, userID string,
463472
) (*util.JSONResponse, string, error) {
464-
if allowRestricted, err := roomVersion.MayAllowRestrictedJoinsInEventAuth(); err != nil {
473+
verImpl, err := gomatrixserverlib.GetRoomVersion(roomVersion)
474+
if err != nil {
465475
return nil, "", err
466-
} else if !allowRestricted {
476+
}
477+
if !verImpl.MayAllowRestrictedJoinsInEventAuth() {
467478
return nil, "", nil
468479
}
469480
req := &api.QueryRestrictedJoinAllowedRequest{

federationapi/routing/leave.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,18 @@ func SendLeave(
149149
}
150150
}
151151

152+
verImpl, err := gomatrixserverlib.GetRoomVersion(verRes.RoomVersion)
153+
if err != nil {
154+
return util.JSONResponse{
155+
Code: http.StatusInternalServerError,
156+
JSON: jsonerror.UnsupportedRoomVersion(
157+
fmt.Sprintf("QueryRoomVersionForRoom returned unknown version: %s", verRes.RoomVersion),
158+
),
159+
}
160+
}
161+
152162
// Decode the event JSON from the request.
153-
event, err := verRes.RoomVersion.NewEventFromUntrustedJSON(request.Content())
163+
event, err := verImpl.NewEventFromUntrustedJSON(request.Content())
154164
switch err.(type) {
155165
case gomatrixserverlib.BadJSONError:
156166
return util.JSONResponse{
@@ -253,7 +263,7 @@ func SendLeave(
253263
}
254264

255265
// Check that the event is signed by the server sending the request.
256-
redacted, err := event.Version().RedactEventJSON(event.JSON())
266+
redacted, err := verImpl.RedactEventJSON(event.JSON())
257267
if err != nil {
258268
logrus.WithError(err).Errorf("XXX: leave.go")
259269
return util.JSONResponse{

federationapi/routing/threepid.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,12 @@ func ExchangeThirdPartyInvite(
196196
util.GetLogger(httpReq.Context()).WithError(err).Error("federation.SendInvite failed")
197197
return jsonerror.InternalServerError()
198198
}
199-
inviteEvent, err := verRes.RoomVersion.NewEventFromUntrustedJSON(signedEvent.Event)
199+
verImpl, err := gomatrixserverlib.GetRoomVersion(verRes.RoomVersion)
200+
if err != nil {
201+
util.GetLogger(httpReq.Context()).WithError(err).Errorf("unknown room version: %s", verRes.RoomVersion)
202+
return jsonerror.InternalServerError()
203+
}
204+
inviteEvent, err := verImpl.NewEventFromUntrustedJSON(signedEvent.Event)
200205
if err != nil {
201206
util.GetLogger(httpReq.Context()).WithError(err).Error("federation.SendInvite failed")
202207
return jsonerror.InternalServerError()

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ require (
2222
github.com/matrix-org/dugong v0.0.0-20210921133753-66e6b1c67e2e
2323
github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91
2424
github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530
25-
github.com/matrix-org/gomatrixserverlib v0.0.0-20230420172450-7ea8ead4a832
25+
github.com/matrix-org/gomatrixserverlib v0.0.0-20230421103805-98f1fbf26443
2626
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a
2727
github.com/matrix-org/util v0.0.0-20221111132719-399730281e66
2828
github.com/mattn/go-sqlite3 v1.14.16

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,8 @@ github.com/matrix-org/gomatrixserverlib v0.0.0-20230420165305-c51ffd14d28d h1:pS
337337
github.com/matrix-org/gomatrixserverlib v0.0.0-20230420165305-c51ffd14d28d/go.mod h1:7HTbSZe+CIdmeqVyFMekwD5dFU8khWQyngKATvd12FU=
338338
github.com/matrix-org/gomatrixserverlib v0.0.0-20230420172450-7ea8ead4a832 h1:xEUPCS8+BEJ9+JEazxkQS1+YnWyFAsHoIMp5ijA7NAY=
339339
github.com/matrix-org/gomatrixserverlib v0.0.0-20230420172450-7ea8ead4a832/go.mod h1:7HTbSZe+CIdmeqVyFMekwD5dFU8khWQyngKATvd12FU=
340+
github.com/matrix-org/gomatrixserverlib v0.0.0-20230421103805-98f1fbf26443 h1:UxYdP/B+wN67pOWpvzlNeASMn9K1reF/bPHFo1wpqXQ=
341+
github.com/matrix-org/gomatrixserverlib v0.0.0-20230421103805-98f1fbf26443/go.mod h1:7HTbSZe+CIdmeqVyFMekwD5dFU8khWQyngKATvd12FU=
340342
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a h1:awrPDf9LEFySxTLKYBMCiObelNx/cBuv/wzllvCCH3A=
341343
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a/go.mod h1:HchJX9oKMXaT2xYFs0Ha/6Zs06mxLU8k6F1ODnrGkeQ=
342344
github.com/matrix-org/util v0.0.0-20221111132719-399730281e66 h1:6z4KxomXSIGWqhHcfzExgkH3Z3UkIXry4ibJS4Aqz2Y=

internal/eventutil/events.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,11 @@ func addPrevEventsToEvent(
112112
return ErrRoomNoExists
113113
}
114114

115-
eventFormat, err := queryRes.RoomVersion.EventFormat()
115+
verImpl, err := gomatrixserverlib.GetRoomVersion(queryRes.RoomVersion)
116116
if err != nil {
117-
return fmt.Errorf("queryRes.RoomVersion.EventFormat: %w", err)
117+
return fmt.Errorf("GetRoomVersion: %w", err)
118118
}
119+
eventFormat := verImpl.EventFormat()
119120

120121
builder.Depth = queryRes.Depth
121122

0 commit comments

Comments
 (0)