|
|
|
.. Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
|
|
..
|
|
|
|
.. Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
.. you may not use this file except in compliance with the License.
|
|
|
|
.. You may obtain a copy of the License at
|
|
|
|
..
|
|
|
|
.. http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
..
|
|
|
|
.. Unless required by applicable law or agreed to in writing, software
|
|
|
|
.. distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
.. See the License for the specific language governing permissions and
|
|
|
|
.. limitations under the License.
|
|
|
|
|
|
|
|
Room Version 6
|
|
|
|
==============
|
|
|
|
|
|
|
|
This room version builds on `version 5 <v5.html>`_ while changing various
|
|
|
|
authorization rules performed on events.
|
|
|
|
|
|
|
|
.. contents:: Table of Contents
|
|
|
|
.. sectnum::
|
|
|
|
|
|
|
|
|
|
|
|
Client considerations
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
The redaction algorithm has changed from `room version 1 <v1.html>`_ 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
|
|
|
|
--------------------------------
|
|
|
|
|
|
|
|
.. 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.
|
|
|
|
|
|
|
|
|
|
|
|
Room version 6 makes the following alterations to algorithms described in `room version 5 <v5.html>`_.
|
|
|
|
|
|
|
|
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:
|
|
|
|
|
|
|
|
.. code:: diff
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
-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 <v3.html#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.html#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.
|