Skip to content

Commit 98f1fbf

Browse files
committed
Add RoomVersionImpl and use it in a bunch of places
This removes the need for err checking so much.
1 parent f6e33af commit 98f1fbf

23 files changed

+248
-242
lines changed

authchain_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func TestVerifyEventAuthChain(t *testing.T) {
1616
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":2,"event_id":"$xOJZshi3NeKKJiCf:baba.is.you","hashes":{"sha256":"lu5fF5HE090AXdu/+NpJ/RjRVRk/2tWCUozUc5t7Ru4"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"5KoVSLOBesqH9vciKXDExdu95lKFDtK1I72Hq1GG/UeEsH9jx7wL3V4jGYSKDnX2aLYp/VPiBQje7DFjde+hDQ"}},"type":"m.room.message"}`),
1717
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":3,"event_id":"$4Kp0G1yWZ6tNpeI7:baba.is.you","hashes":{"sha256":"B+MjcGZRh72iaGOgyNbIxgFkHDJo6NO8NQDgiKDKDBA"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$xOJZshi3NeKKJiCf:baba.is.you",{"sha256":"5PGENImHC863Yz9sO6IJX+bIQthZFI2RMhFZyFy+bC0"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"rP+Ybp17GPCqQBrTQ3yz+q6PihdaMWvNY3SngV8aDLHv8wdDlH4ULGnjsB+Az7trqYdCE3rZVo9M7Hy5tOObDg"}},"type":"m.room.message"}`),
1818
}
19-
testEvent, _ := gomatrixserverlib.RoomVersionV1.NewEventFromTrustedJSON(testEvents[len(testEvents)-1], false)
19+
testEvent, _ := gomatrixserverlib.MustGetRoomVersion(gomatrixserverlib.RoomVersionV1).NewEventFromTrustedJSON(testEvents[len(testEvents)-1], false)
2020
if err := gomatrixserverlib.VerifyEventAuthChain(ctx, testEvent.Headered(gomatrixserverlib.RoomVersionV1), provideEvents(t, testEvents)); err != nil {
2121
t.Fatalf("Expected event to pass auth chain checks, but failed: %s", err)
2222
}
@@ -31,7 +31,7 @@ func TestVerifyEventAuthChainMissing(t *testing.T) {
3131
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":2,"event_id":"$xOJZshi3NeKKJiCf:baba.is.you","hashes":{"sha256":"lu5fF5HE090AXdu/+NpJ/RjRVRk/2tWCUozUc5t7Ru4"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"5KoVSLOBesqH9vciKXDExdu95lKFDtK1I72Hq1GG/UeEsH9jx7wL3V4jGYSKDnX2aLYp/VPiBQje7DFjde+hDQ"}},"type":"m.room.message"}`),
3232
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":3,"event_id":"$4Kp0G1yWZ6tNpeI7:baba.is.you","hashes":{"sha256":"B+MjcGZRh72iaGOgyNbIxgFkHDJo6NO8NQDgiKDKDBA"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$xOJZshi3NeKKJiCf:baba.is.you",{"sha256":"5PGENImHC863Yz9sO6IJX+bIQthZFI2RMhFZyFy+bC0"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"rP+Ybp17GPCqQBrTQ3yz+q6PihdaMWvNY3SngV8aDLHv8wdDlH4ULGnjsB+Az7trqYdCE3rZVo9M7Hy5tOObDg"}},"type":"m.room.message"}`),
3333
}
34-
testEvent, _ := gomatrixserverlib.RoomVersionV1.NewEventFromTrustedJSON(testEvents[len(testEvents)-1], false)
34+
testEvent, _ := gomatrixserverlib.MustGetRoomVersion(gomatrixserverlib.RoomVersionV1).NewEventFromTrustedJSON(testEvents[len(testEvents)-1], false)
3535
if err := gomatrixserverlib.VerifyEventAuthChain(ctx, testEvent.Headered(gomatrixserverlib.RoomVersionV1), provideEvents(t, testEvents)); err == nil {
3636
t.Fatalf("Expected event to fail auth chain checks, but passed")
3737
}
@@ -47,7 +47,7 @@ func TestVerifyEventAuthChainLying(t *testing.T) {
4747
// modified to remove $fnwGrQEpiOIUoDU2 from auth_events
4848
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}]],"content":{"body":"Test Message"},"depth":3,"event_id":"$4Kp0G1yWZ6tNpeI7:baba.is.you","hashes":{"sha256":"B+MjcGZRh72iaGOgyNbIxgFkHDJo6NO8NQDgiKDKDBA"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$xOJZshi3NeKKJiCf:baba.is.you",{"sha256":"5PGENImHC863Yz9sO6IJX+bIQthZFI2RMhFZyFy+bC0"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"rP+Ybp17GPCqQBrTQ3yz+q6PihdaMWvNY3SngV8aDLHv8wdDlH4ULGnjsB+Az7trqYdCE3rZVo9M7Hy5tOObDg"}},"type":"m.room.message"}`),
4949
}
50-
testEvent, _ := gomatrixserverlib.RoomVersionV1.NewEventFromTrustedJSON(testEvents[len(testEvents)-1], false)
50+
testEvent, _ := gomatrixserverlib.MustGetRoomVersion(gomatrixserverlib.RoomVersionV1).NewEventFromTrustedJSON(testEvents[len(testEvents)-1], false)
5151
if err := gomatrixserverlib.VerifyEventAuthChain(ctx, testEvent.Headered(gomatrixserverlib.RoomVersionV1), provideEvents(t, testEvents)); err == nil {
5252
t.Fatalf("Expected event to fail auth chain checks, but passed")
5353
}
@@ -64,7 +64,7 @@ func TestVerifyEventAuthChainCascadeFailure(t *testing.T) {
6464
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":2,"event_id":"$xOJZshi3NeKKJiCf:baba.is.you","hashes":{"sha256":"lu5fF5HE090AXdu/+NpJ/RjRVRk/2tWCUozUc5t7Ru4"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"5KoVSLOBesqH9vciKXDExdu95lKFDtK1I72Hq1GG/UeEsH9jx7wL3V4jGYSKDnX2aLYp/VPiBQje7DFjde+hDQ"}},"type":"m.room.message"}`),
6565
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":3,"event_id":"$4Kp0G1yWZ6tNpeI7:baba.is.you","hashes":{"sha256":"B+MjcGZRh72iaGOgyNbIxgFkHDJo6NO8NQDgiKDKDBA"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$xOJZshi3NeKKJiCf:baba.is.you",{"sha256":"5PGENImHC863Yz9sO6IJX+bIQthZFI2RMhFZyFy+bC0"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"rP+Ybp17GPCqQBrTQ3yz+q6PihdaMWvNY3SngV8aDLHv8wdDlH4ULGnjsB+Az7trqYdCE3rZVo9M7Hy5tOObDg"}},"type":"m.room.message"}`),
6666
}
67-
testEvent, _ := gomatrixserverlib.RoomVersionV1.NewEventFromTrustedJSON(testEvents[len(testEvents)-1], false)
67+
testEvent, _ := gomatrixserverlib.MustGetRoomVersion(gomatrixserverlib.RoomVersionV1).NewEventFromTrustedJSON(testEvents[len(testEvents)-1], false)
6868
if err := gomatrixserverlib.VerifyEventAuthChain(ctx, testEvent.Headered(gomatrixserverlib.RoomVersionV1), provideEvents(t, testEvents)); err == nil {
6969
t.Fatalf("Expected event to fail auth chain checks, but passed")
7070
}
@@ -73,7 +73,7 @@ func TestVerifyEventAuthChainCascadeFailure(t *testing.T) {
7373
func provideEvents(t *testing.T, events [][]byte) gomatrixserverlib.AuthChainProvider {
7474
eventMap := make(map[string]*gomatrixserverlib.Event)
7575
for _, eventBytes := range events {
76-
ev, err := gomatrixserverlib.RoomVersionV1.NewEventFromTrustedJSON(eventBytes, false)
76+
ev, err := gomatrixserverlib.MustGetRoomVersion(gomatrixserverlib.RoomVersionV1).NewEventFromTrustedJSON(eventBytes, false)
7777
if err != nil {
7878
t.Fatalf("Failed to load event: %s", err)
7979
}

authstate.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,13 @@ func (p *FederatedStateProvider) StateBeforeEvent(ctx context.Context, roomVer R
8181
if err != nil {
8282
return nil, err
8383
}
84+
roomVerImpl, err := GetRoomVersion(roomVer)
85+
if err != nil {
86+
return nil, err
87+
}
8488
if p.RememberAuthEvents {
8589
for _, js := range res.GetAuthEvents() {
86-
event, err := roomVer.NewEventFromUntrustedJSON(js)
90+
event, err := roomVerImpl.NewEventFromUntrustedJSON(js)
8791
if err != nil {
8892
continue
8993
}
@@ -93,7 +97,7 @@ func (p *FederatedStateProvider) StateBeforeEvent(ctx context.Context, roomVer R
9397

9498
result := make(map[string]*Event)
9599
for _, js := range res.GetStateEvents() {
96-
event, err := roomVer.NewEventFromUntrustedJSON(js)
100+
event, err := roomVerImpl.NewEventFromUntrustedJSON(js)
97101
if err != nil {
98102
continue
99103
}

authstate_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func TestVerifyAuthRulesAtStateValidate(t *testing.T) {
3535
}
3636
eventToVerify, err := newEventFromTrustedJSON(
3737
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":2,"event_id":"$xOJZshi3NeKKJiCf:baba.is.you","hashes":{"sha256":"lu5fF5HE090AXdu/+NpJ/RjRVRk/2tWCUozUc5t7Ru4"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"5KoVSLOBesqH9vciKXDExdu95lKFDtK1I72Hq1GG/UeEsH9jx7wL3V4jGYSKDnX2aLYp/VPiBQje7DFjde+hDQ"}},"type":"m.room.message"}`),
38-
false, RoomVersionV1,
38+
false, MustGetRoomVersion(RoomVersionV1),
3939
)
4040
if err != nil {
4141
t.Fatalf("Failed to load test event: %s", err)
@@ -63,7 +63,7 @@ func TestVerifyAuthRulesAtStateVerify(t *testing.T) {
6363
}
6464
eventToVerify, err := newEventFromTrustedJSON(
6565
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":2,"event_id":"$xOJZshi3NeKKJiCf:baba.is.you","hashes":{"sha256":"lu5fF5HE090AXdu/+NpJ/RjRVRk/2tWCUozUc5t7Ru4"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"5KoVSLOBesqH9vciKXDExdu95lKFDtK1I72Hq1GG/UeEsH9jx7wL3V4jGYSKDnX2aLYp/VPiBQje7DFjde+hDQ"}},"type":"m.room.message"}`),
66-
false, RoomVersionV1,
66+
false, MustGetRoomVersion(RoomVersionV1),
6767
)
6868
if err != nil {
6969
t.Fatalf("Failed to load test event: %s", err)
@@ -92,7 +92,7 @@ func TestVerifyAuthRulesAtStateVerifyFailure(t *testing.T) {
9292
}
9393
eventToVerify, err := newEventFromTrustedJSON(
9494
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":2,"event_id":"$xOJZshi3NeKKJiCf:baba.is.you","hashes":{"sha256":"lu5fF5HE090AXdu/+NpJ/RjRVRk/2tWCUozUc5t7Ru4"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"5KoVSLOBesqH9vciKXDExdu95lKFDtK1I72Hq1GG/UeEsH9jx7wL3V4jGYSKDnX2aLYp/VPiBQje7DFjde+hDQ"}},"type":"m.room.message"}`),
95-
false, RoomVersionV1,
95+
false, MustGetRoomVersion(RoomVersionV1),
9696
)
9797
if err != nil {
9898
t.Fatalf("Failed to load test event: %s", err)
@@ -126,7 +126,7 @@ func TestVerifyAuthRulesAtStateBadAuthRuleButValidState(t *testing.T) {
126126
}
127127
eventToVerify, err := newEventFromTrustedJSON(
128128
[]byte(`{"auth_events":[["$WCraVpPZe5TtHAqs:baba.is.you",{"sha256":"gBxQI2xzDLMoyIjkrpCJFBXC5NnrSemepc7SninSARI"}],["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"content":{"body":"Test Message"},"depth":2,"event_id":"$xOJZshi3NeKKJiCf:baba.is.you","hashes":{"sha256":"lu5fF5HE090AXdu/+NpJ/RjRVRk/2tWCUozUc5t7Ru4"},"origin":"baba.is.you","origin_server_ts":0,"prev_events":[["$fnwGrQEpiOIUoDU2:baba.is.you",{"sha256":"gUr26K5Tt7GQlNs8BlUup92gOzAZHbT8WNEobkrEIqk"}]],"room_id":"!roomid:baba.is.you","sender":"@userid:baba.is.you","signatures":{"baba.is.you":{"ed25519:auto":"5KoVSLOBesqH9vciKXDExdu95lKFDtK1I72Hq1GG/UeEsH9jx7wL3V4jGYSKDnX2aLYp/VPiBQje7DFjde+hDQ"}},"type":"m.room.message"}`),
129-
false, RoomVersionV1,
129+
false, MustGetRoomVersion(RoomVersionV1),
130130
)
131131
if err != nil {
132132
t.Fatalf("Failed to load test event: %s", err)
@@ -142,7 +142,7 @@ func TestVerifyAuthRulesAtStateBadAuthRuleButValidState(t *testing.T) {
142142

143143
func makeEvents(t *testing.T, in [][]byte) (out []*Event) {
144144
for _, raw := range in {
145-
ev, err := newEventFromTrustedJSON(raw, false, RoomVersionV1)
145+
ev, err := newEventFromTrustedJSON(raw, false, MustGetRoomVersion(RoomVersionV1))
146146
if err != nil {
147147
t.Fatalf("makeEvent failed: %s", err)
148148
}

backfill_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func (t *testBackfillRequester) Backfill(ctx context.Context, origin, server spe
4545
func (t *testBackfillRequester) ProvideEvents(roomVer RoomVersion, eventIDs []string) (result []*Event, err error) {
4646
eventMap := make(map[string]*Event)
4747
for _, eventBytes := range t.authEventsToProvide {
48-
ev, err := newEventFromTrustedJSON(eventBytes, false, RoomVersionV1)
48+
ev, err := newEventFromTrustedJSON(eventBytes, false, MustGetRoomVersion(RoomVersionV1))
4949
if err != nil {
5050
panic("Failed to load event: " + err.Error())
5151
}

event.go

Lines changed: 28 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -244,20 +244,13 @@ func (eb *EventBuilder) Build(
244244
now time.Time, origin spec.ServerName, keyID KeyID,
245245
privateKey ed25519.PrivateKey, roomVersion RoomVersion,
246246
) (result *Event, err error) {
247-
if !KnownRoomVersion(roomVersion) {
248-
return nil, UnsupportedRoomVersionError{
249-
Version: roomVersion,
250-
}
251-
}
252-
253-
eventFormat, err := roomVersion.EventFormat()
254-
if err != nil {
255-
return result, err
256-
}
257-
eventIDFormat, err := roomVersion.EventIDFormat()
247+
verImpl, err := GetRoomVersion(roomVersion)
258248
if err != nil {
259-
return result, err
249+
return nil, err
260250
}
251+
252+
eventFormat := verImpl.EventFormat()
253+
eventIDFormat := verImpl.EventIDFormat()
261254
var event struct {
262255
EventBuilder
263256
EventID string `json:"event_id"`
@@ -369,37 +362,22 @@ func (eb *EventBuilder) Build(
369362
// This checks that the event is valid JSON.
370363
// It also checks the content hashes to ensure the event has not been tampered with.
371364
// This should be used when receiving new events from remote servers.
372-
func newEventFromUntrustedJSON(eventJSON []byte, roomVersion RoomVersion) (result *Event, err error) {
373-
if !KnownRoomVersion(roomVersion) {
374-
return nil, UnsupportedRoomVersionError{
375-
Version: roomVersion,
376-
}
377-
}
378-
365+
func newEventFromUntrustedJSON(eventJSON []byte, roomVersion RoomVersionImpl) (result *Event, err error) {
379366
if r := gjson.GetBytes(eventJSON, "_*"); r.Exists() {
380367
err = fmt.Errorf("gomatrixserverlib NewEventFromUntrustedJSON: %w", UnexpectedHeaderedEvent{})
381368
return
382369
}
383-
384-
var enforceCanonicalJSON bool
385-
if enforceCanonicalJSON, err = roomVersion.EnforceCanonicalJSON(); err != nil {
386-
return
387-
}
388-
if enforceCanonicalJSON {
370+
if roomVersion.EnforceCanonicalJSON() {
389371
if err = verifyEnforcedCanonicalJSON(eventJSON); err != nil {
390372
err = BadJSONError{err}
391373
return
392374
}
393375
}
394376

395377
result = &Event{}
396-
result.roomVersion = roomVersion
378+
result.roomVersion = roomVersion.ver
397379

398-
var eventFormat EventFormat
399-
eventFormat, err = result.roomVersion.EventFormat()
400-
if err != nil {
401-
return
402-
}
380+
eventFormat := roomVersion.EventFormat()
403381

404382
if eventJSON, err = sjson.DeleteBytes(eventJSON, "unsigned"); err != nil {
405383
return
@@ -457,15 +435,9 @@ func newEventFromUntrustedJSON(eventJSON []byte, roomVersion RoomVersion) (resul
457435
// newEventFromTrustedJSON loads a new event from some JSON that must be valid.
458436
// This will be more efficient than NewEventFromUntrustedJSON since it can skip cryptographic checks.
459437
// This can be used when loading matrix events from a local database.
460-
func newEventFromTrustedJSON(eventJSON []byte, redacted bool, roomVersion RoomVersion) (result *Event, err error) {
461-
if !KnownRoomVersion(roomVersion) {
462-
return nil, UnsupportedRoomVersionError{
463-
Version: roomVersion,
464-
}
465-
}
466-
438+
func newEventFromTrustedJSON(eventJSON []byte, redacted bool, roomVersion RoomVersionImpl) (result *Event, err error) {
467439
result = &Event{}
468-
result.roomVersion = roomVersion
440+
result.roomVersion = roomVersion.ver
469441
result.redacted = redacted
470442
err = result.populateFieldsFromJSON("", eventJSON) // "" -> event ID not known
471443
return
@@ -476,15 +448,9 @@ func newEventFromTrustedJSON(eventJSON []byte, redacted bool, roomVersion RoomVe
476448
// an event from the database and NEVER when accepting an event over federation.
477449
// This will be more efficient than NewEventFromTrustedJSON since, if the event
478450
// ID is known, we skip all the reference hash and canonicalisation work.
479-
func newEventFromTrustedJSONWithEventID(eventID string, eventJSON []byte, redacted bool, roomVersion RoomVersion) (result *Event, err error) {
480-
if !KnownRoomVersion(roomVersion) {
481-
return nil, UnsupportedRoomVersionError{
482-
Version: roomVersion,
483-
}
484-
}
485-
451+
func newEventFromTrustedJSONWithEventID(eventID string, eventJSON []byte, redacted bool, roomVersion RoomVersionImpl) (result *Event, err error) {
486452
result = &Event{}
487-
result.roomVersion = roomVersion
453+
result.roomVersion = roomVersion.ver
488454
result.redacted = redacted
489455
err = result.populateFieldsFromJSON(eventID, eventJSON)
490456
return
@@ -497,9 +463,12 @@ func newEventFromTrustedJSONWithEventID(eventID string, eventJSON []byte, redact
497463
// calculations etc as they are expensive operations. If the event
498464
// ID isn't known, pass an empty string and we'll work it out.
499465
func (e *Event) populateFieldsFromJSON(eventIDIfKnown string, eventJSON []byte) error {
466+
verImpl, err := GetRoomVersion(e.roomVersion)
467+
if err != nil {
468+
return err
469+
}
500470
// Work out the format of the event from the room version.
501-
var eventFormat EventFormat
502-
eventFormat, err := e.roomVersion.EventFormat()
471+
eventFormat := verImpl.EventFormat()
503472
if err != nil {
504473
return err
505474
}
@@ -557,7 +526,11 @@ func (e *Event) Redact() {
557526
if e.redacted {
558527
return
559528
}
560-
eventJSON, err := e.roomVersion.RedactEventJSON(e.eventJSON)
529+
verImpl, err := GetRoomVersion(e.roomVersion)
530+
if err != nil {
531+
panic(fmt.Errorf("gomatrixserverlib: invalid event %v", err))
532+
}
533+
eventJSON, err := verImpl.RedactEventJSON(e.eventJSON)
561534
if err != nil {
562535
// This is unreachable for events created with EventBuilder.Build or NewEventFromUntrustedJSON
563536
panic(fmt.Errorf("gomatrixserverlib: invalid event %v", err))
@@ -806,11 +779,11 @@ func checkID(id, kind string, sigil byte) (err error) {
806779
}
807780

808781
func (e *Event) generateEventID() (eventID string, err error) {
809-
var eventFormat EventFormat
810-
eventFormat, err = e.roomVersion.EventFormat()
782+
verImpl, err := GetRoomVersion(e.roomVersion)
811783
if err != nil {
812-
return
784+
return "", err
813785
}
786+
eventFormat := verImpl.EventFormat()
814787
switch eventFormat {
815788
case EventFormatV1:
816789
eventID = e.fields.(eventFormatV1Fields).EventID
@@ -943,10 +916,11 @@ func (e *Event) PrevEventIDs() []string {
943916
}
944917

945918
func (e *Event) extractContent(eventType string, content interface{}) error {
946-
eventFormat, err := e.roomVersion.EventFormat()
919+
verImpl, err := GetRoomVersion(e.roomVersion)
947920
if err != nil {
948921
panic(err)
949922
}
923+
eventFormat := verImpl.EventFormat()
950924
var fields eventFields
951925
switch eventFormat {
952926
case EventFormatV1:

0 commit comments

Comments
 (0)