aboutsummaryrefslogtreecommitdiff
path: root/roomserver/version
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-02-05 16:25:58 +0000
committerGitHub <noreply@github.com>2020-02-05 16:25:58 +0000
commit880d8ae0246c8b123fdc827d2c03b4cb1b6920bc (patch)
tree6ae9e5aaad3ba5a3581209b6375ac81317bdb469 /roomserver/version
parent4da26309048e48ed6c466155421ec17ac0935c5f (diff)
Room version abstractions (#865)
* Rough first pass at adding room version abstractions * Define newer room versions * Update room version metadata * Fix roomserver/versions * Try to fix whitespace in roomsSchema
Diffstat (limited to 'roomserver/version')
-rw-r--r--roomserver/version/version.go94
1 files changed, 94 insertions, 0 deletions
diff --git a/roomserver/version/version.go b/roomserver/version/version.go
new file mode 100644
index 00000000..74d04d9b
--- /dev/null
+++ b/roomserver/version/version.go
@@ -0,0 +1,94 @@
+package version
+
+import (
+ "errors"
+
+ "github.com/matrix-org/dendrite/roomserver/state"
+)
+
+type RoomVersionID int
+type EventFormatID int
+
+const (
+ RoomVersionV1 RoomVersionID = iota + 1
+ RoomVersionV2
+ RoomVersionV3
+ RoomVersionV4
+ RoomVersionV5
+)
+
+const (
+ EventFormatV1 EventFormatID = iota + 1 // original event ID formatting
+ EventFormatV2 // event ID is event hash
+ EventFormatV3 // event ID is URL-safe base64 event hash
+)
+
+type RoomVersionDescription struct {
+ Supported bool
+ Stable bool
+ StateResolution state.StateResolutionVersion
+ EventFormat EventFormatID
+ EnforceSigningKeyValidity bool
+}
+
+var roomVersions = map[RoomVersionID]RoomVersionDescription{
+ RoomVersionV1: RoomVersionDescription{
+ Supported: true,
+ Stable: true,
+ StateResolution: state.StateResolutionAlgorithmV1,
+ EventFormat: EventFormatV1,
+ EnforceSigningKeyValidity: false,
+ },
+ RoomVersionV2: RoomVersionDescription{
+ Supported: false,
+ Stable: true,
+ StateResolution: state.StateResolutionAlgorithmV2,
+ EventFormat: EventFormatV1,
+ EnforceSigningKeyValidity: false,
+ },
+ RoomVersionV3: RoomVersionDescription{
+ Supported: false,
+ Stable: true,
+ StateResolution: state.StateResolutionAlgorithmV2,
+ EventFormat: EventFormatV2,
+ EnforceSigningKeyValidity: false,
+ },
+ RoomVersionV4: RoomVersionDescription{
+ Supported: false,
+ Stable: true,
+ StateResolution: state.StateResolutionAlgorithmV2,
+ EventFormat: EventFormatV3,
+ EnforceSigningKeyValidity: false,
+ },
+ RoomVersionV5: RoomVersionDescription{
+ Supported: false,
+ Stable: true,
+ StateResolution: state.StateResolutionAlgorithmV2,
+ EventFormat: EventFormatV3,
+ EnforceSigningKeyValidity: true,
+ },
+}
+
+func GetRoomVersions() map[RoomVersionID]RoomVersionDescription {
+ return roomVersions
+}
+
+func GetSupportedRoomVersions() map[RoomVersionID]RoomVersionDescription {
+ versions := make(map[RoomVersionID]RoomVersionDescription)
+ for id, version := range GetRoomVersions() {
+ if version.Supported {
+ versions[id] = version
+ }
+ }
+ return versions
+}
+
+func GetSupportedRoomVersion(version RoomVersionID) (desc RoomVersionDescription, err error) {
+ if version, ok := roomVersions[version]; ok {
+ desc = version
+ }
+ if !desc.Supported {
+ err = errors.New("unsupported room version")
+ }
+ return
+}