@@ -12,6 +12,8 @@ import (
1212// RoomVersion refers to the room version for a specific room.
1313type RoomVersion string
1414
15+ // The interface which needs to be implemented to register a room version with gomatrixserverlib.
16+ // All types should be public to allow for extensibility.
1517type IRoomVersion interface {
1618 Version () RoomVersion
1719 Stable () bool
@@ -29,14 +31,14 @@ type IRoomVersion interface {
2931
3032 RestrictedJoinServername (content []byte ) (spec.ServerName , error )
3133 CheckRestrictedJoinsAllowed () error
32- CheckKnockingAllowed (m * membershipAllower ) error
34+ CheckKnockingAllowed (roomVer , sender , target , joinRule , prevMembership string ) error
3335 CheckNotificationLevels (senderLevel int64 , oldPowerLevels , newPowerLevels PowerLevelContent ) error
3436 CheckCanonicalJSON (input []byte ) error
3537 ParsePowerLevels (contentBytes []byte , c * PowerLevelContent ) error
36- CheckCreateEvent (event PDU , knownRoomVersion knownRoomVersionFunc ) error
38+ CheckCreateEvent (event PDU , knownRoomVersion KnownRoomVersionFunc ) error
3739}
3840
39- type knownRoomVersionFunc func (RoomVersion ) bool
41+ type KnownRoomVersionFunc func (RoomVersion ) bool
4042
4143// StateResAlgorithm refers to a version of the state resolution algorithm.
4244type StateResAlgorithm int
@@ -416,6 +418,14 @@ func StableRoomVersions() map[RoomVersion]IRoomVersion {
416418 return versions
417419}
418420
421+ // SetRoomVersion sets a room version implementation so it is recognised by gomatrixserverlib.
422+ // This is useful when you are testing custom room versions which gomatrixserverlib may be unaware of,
423+ // e.g for Complement usage. Full room version impls should be defined in gomatrixserverlib, but
424+ // partial impls for testing can be set here.
425+ func SetRoomVersion (ver IRoomVersion ) {
426+ roomVersionMeta [ver .Version ()] = ver
427+ }
428+
419429// RoomVersionDescription contains information about a room version,
420430// namely whether it is marked as supported or stable in this server
421431// version, along with the state resolution algorithm, event ID etc
@@ -440,8 +450,8 @@ type RoomVersionImpl struct {
440450 checkRestrictedJoin restrictedJoinCheckFunc
441451 restrictedJoinServernameFunc func (content []byte ) (spec.ServerName , error )
442452 checkRestrictedJoinAllowedFunc func () error
443- checkKnockingAllowedFunc func (m * membershipAllower ) error
444- checkCreateEvent func (e PDU , knownRoomVersion knownRoomVersionFunc ) error
453+ checkKnockingAllowedFunc func (roomVer , sender , target , joinRule , prevMembership string ) error
454+ checkCreateEvent func (e PDU , knownRoomVersion KnownRoomVersionFunc ) error
445455 newEventFromUntrustedJSONFunc func (eventJSON []byte , roomVersion IRoomVersion ) (result PDU , err error )
446456 newEventFromTrustedJSONFunc func (eventJSON []byte , redacted bool , roomVersion IRoomVersion ) (result PDU , err error )
447457 newEventFromTrustedJSONWithEventIDFunc func (eventID string , eventJSON []byte , redacted bool , roomVersion IRoomVersion ) (result PDU , err error )
@@ -483,8 +493,8 @@ func (v RoomVersionImpl) CheckNotificationLevels(senderLevel int64, oldPowerLeve
483493}
484494
485495// CheckKnockingAllowed checks if this room version supports knocking on rooms.
486- func (v RoomVersionImpl ) CheckKnockingAllowed (m * membershipAllower ) error {
487- return v .checkKnockingAllowedFunc (m )
496+ func (v RoomVersionImpl ) CheckKnockingAllowed (roomVer , sender , target , joinRule , prevMembership string ) error {
497+ return v .checkKnockingAllowedFunc (roomVer , sender , target , joinRule , prevMembership )
488498}
489499
490500// CheckRestrictedJoinsAllowed checks if this room version allows restricted joins.
@@ -508,7 +518,7 @@ func (v RoomVersionImpl) ParsePowerLevels(contentBytes []byte, c *PowerLevelCont
508518 return v .parsePowerLevelsFunc (contentBytes , c )
509519}
510520
511- func (v RoomVersionImpl ) CheckCreateEvent (event PDU , knownRoomVersion knownRoomVersionFunc ) error {
521+ func (v RoomVersionImpl ) CheckCreateEvent (event PDU , knownRoomVersion KnownRoomVersionFunc ) error {
512522 return v .checkCreateEvent (event , knownRoomVersion )
513523}
514524
0 commit comments