|
|
|
---
|
|
|
|
title: Room Version 6
|
|
|
|
type: docs
|
|
|
|
weight: 60
|
|
|
|
---
|
|
|
|
|
|
|
|
This room version builds on [version 5](/rooms/v5) while changing various
|
|
|
|
authorization rules performed on events.
|
|
|
|
|
|
|
|
## Client considerations
|
|
|
|
|
|
|
|
The redaction algorithm has changed from [room version 1](/rooms/v1) to
|
|
|
|
remove all rules against events of type `m.room.aliases`. Room versions
|
|
|
|
2, 3, 4, and 5 all use v1's redaction algorithm. The algorithm is
|
|
|
|
otherwise unchanged.
|
|
|
|
|
|
|
|
## Server implementation components
|
|
|
|
|
|
|
|
{{% boxes/warning %}}
|
|
|
|
The information contained in this section is strictly for server
|
|
|
|
implementors. Applications which use the Client-Server API are generally
|
|
|
|
unaffected by the intricacies contained here. The section above
|
|
|
|
regarding client considerations is the resource that Client-Server API
|
|
|
|
use cases should reference.
|
|
|
|
{{% /boxes/warning %}}
|
|
|
|
|
|
|
|
Room version 6 makes the following alterations to algorithms described
|
|
|
|
in [room version 5](/rooms/v5).
|
|
|
|
|
|
|
|
### Redactions
|
|
|
|
|
|
|
|
As mentioned in the client considerations portion of this specification,
|
|
|
|
all special meaning has been removed for events of type
|
|
|
|
`m.room.aliases`. The algorithm is otherwise unchanged.
|
|
|
|
|
|
|
|
### Authorization rules for events
|
|
|
|
|
|
|
|
Like redactions, all rules relating specifically to events of type
|
|
|
|
`m.room.aliases` are removed. They must still pass authorization checks
|
|
|
|
relating to state events.
|
|
|
|
|
|
|
|
Additionally, the authorization rules for events of type
|
|
|
|
`m.room.power_levels` now include the content key `notifications`. This
|
|
|
|
new rule takes the place of the rule which checks the `events` and
|
|
|
|
`users` keys.
|
|
|
|
|
|
|
|
For completeness, the changes to the auth rules can be represented as
|
|
|
|
follows:
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
-If type is `m.room.aliases`:
|
|
|
|
-
|
|
|
|
- a. If event has no `state_key`, reject.
|
|
|
|
- b. If sender's domain doesn't matches `state_key`, reject.
|
|
|
|
- c. Otherwise, allow.
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
If type is `m.room.power_levels`:
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
- * For each entry being added, changed or removed in both the `events` and `users` keys:
|
|
|
|
+ * For each entry being added, changed or removed in the `events`, `users`, and `notifications` keys:
|
|
|
|
|
|
|
|
i. If the current value is higher than the `sender`'s current power level, reject.
|
|
|
|
|
|
|
|
ii. If the new value is higher than the `sender`'s current power level, reject.
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
The remaining rules are the same as in [room version
|
|
|
|
3](/rooms/v3#authorization-rules-for-events) (the last inherited room
|
|
|
|
version to specify the authorization rules).
|
|
|
|
|
|
|
|
### Canonical JSON
|
|
|
|
|
|
|
|
Servers MUST strictly enforce the JSON format specified in the
|
|
|
|
[appendices](/appendices#canonical-json). This translates to a
|
|
|
|
400 `M_BAD_JSON` error on most endpoints, or discarding of events over
|
|
|
|
federation. For example, the Federation API's `/send` endpoint would
|
|
|
|
discard the event whereas the Client Server API's `/send/{eventType}`
|
|
|
|
endpoint would return a `M_BAD_JSON` error.
|