@@ -244,20 +244,13 @@ func (eb *EventBuilder) Build(
244
244
now time.Time , origin spec.ServerName , keyID KeyID ,
245
245
privateKey ed25519.PrivateKey , roomVersion RoomVersion ,
246
246
) (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 )
258
248
if err != nil {
259
- return result , err
249
+ return nil , err
260
250
}
251
+
252
+ eventFormat := verImpl .EventFormat ()
253
+ eventIDFormat := verImpl .EventIDFormat ()
261
254
var event struct {
262
255
EventBuilder
263
256
EventID string `json:"event_id"`
@@ -369,37 +362,22 @@ func (eb *EventBuilder) Build(
369
362
// This checks that the event is valid JSON.
370
363
// It also checks the content hashes to ensure the event has not been tampered with.
371
364
// 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 ) {
379
366
if r := gjson .GetBytes (eventJSON , "_*" ); r .Exists () {
380
367
err = fmt .Errorf ("gomatrixserverlib NewEventFromUntrustedJSON: %w" , UnexpectedHeaderedEvent {})
381
368
return
382
369
}
383
-
384
- var enforceCanonicalJSON bool
385
- if enforceCanonicalJSON , err = roomVersion .EnforceCanonicalJSON (); err != nil {
386
- return
387
- }
388
- if enforceCanonicalJSON {
370
+ if roomVersion .EnforceCanonicalJSON () {
389
371
if err = verifyEnforcedCanonicalJSON (eventJSON ); err != nil {
390
372
err = BadJSONError {err }
391
373
return
392
374
}
393
375
}
394
376
395
377
result = & Event {}
396
- result .roomVersion = roomVersion
378
+ result .roomVersion = roomVersion . ver
397
379
398
- var eventFormat EventFormat
399
- eventFormat , err = result .roomVersion .EventFormat ()
400
- if err != nil {
401
- return
402
- }
380
+ eventFormat := roomVersion .EventFormat ()
403
381
404
382
if eventJSON , err = sjson .DeleteBytes (eventJSON , "unsigned" ); err != nil {
405
383
return
@@ -457,15 +435,9 @@ func newEventFromUntrustedJSON(eventJSON []byte, roomVersion RoomVersion) (resul
457
435
// newEventFromTrustedJSON loads a new event from some JSON that must be valid.
458
436
// This will be more efficient than NewEventFromUntrustedJSON since it can skip cryptographic checks.
459
437
// 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 ) {
467
439
result = & Event {}
468
- result .roomVersion = roomVersion
440
+ result .roomVersion = roomVersion . ver
469
441
result .redacted = redacted
470
442
err = result .populateFieldsFromJSON ("" , eventJSON ) // "" -> event ID not known
471
443
return
@@ -476,15 +448,9 @@ func newEventFromTrustedJSON(eventJSON []byte, redacted bool, roomVersion RoomVe
476
448
// an event from the database and NEVER when accepting an event over federation.
477
449
// This will be more efficient than NewEventFromTrustedJSON since, if the event
478
450
// 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 ) {
486
452
result = & Event {}
487
- result .roomVersion = roomVersion
453
+ result .roomVersion = roomVersion . ver
488
454
result .redacted = redacted
489
455
err = result .populateFieldsFromJSON (eventID , eventJSON )
490
456
return
@@ -497,9 +463,12 @@ func newEventFromTrustedJSONWithEventID(eventID string, eventJSON []byte, redact
497
463
// calculations etc as they are expensive operations. If the event
498
464
// ID isn't known, pass an empty string and we'll work it out.
499
465
func (e * Event ) populateFieldsFromJSON (eventIDIfKnown string , eventJSON []byte ) error {
466
+ verImpl , err := GetRoomVersion (e .roomVersion )
467
+ if err != nil {
468
+ return err
469
+ }
500
470
// 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 ()
503
472
if err != nil {
504
473
return err
505
474
}
@@ -557,7 +526,11 @@ func (e *Event) Redact() {
557
526
if e .redacted {
558
527
return
559
528
}
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 )
561
534
if err != nil {
562
535
// This is unreachable for events created with EventBuilder.Build or NewEventFromUntrustedJSON
563
536
panic (fmt .Errorf ("gomatrixserverlib: invalid event %v" , err ))
@@ -806,11 +779,11 @@ func checkID(id, kind string, sigil byte) (err error) {
806
779
}
807
780
808
781
func (e * Event ) generateEventID () (eventID string , err error ) {
809
- var eventFormat EventFormat
810
- eventFormat , err = e .roomVersion .EventFormat ()
782
+ verImpl , err := GetRoomVersion (e .roomVersion )
811
783
if err != nil {
812
- return
784
+ return "" , err
813
785
}
786
+ eventFormat := verImpl .EventFormat ()
814
787
switch eventFormat {
815
788
case EventFormatV1 :
816
789
eventID = e .fields .(eventFormatV1Fields ).EventID
@@ -943,10 +916,11 @@ func (e *Event) PrevEventIDs() []string {
943
916
}
944
917
945
918
func (e * Event ) extractContent (eventType string , content interface {}) error {
946
- eventFormat , err := e .roomVersion . EventFormat ( )
919
+ verImpl , err := GetRoomVersion ( e .roomVersion )
947
920
if err != nil {
948
921
panic (err )
949
922
}
923
+ eventFormat := verImpl .EventFormat ()
950
924
var fields eventFields
951
925
switch eventFormat {
952
926
case EventFormatV1 :
0 commit comments