* Room versions 8 and 9: Restricted rooms MSCs: * https://github.com/matrix-org/matrix-doc/pull/3083 * https://github.com/matrix-org/matrix-doc/pull/3289 * https://github.com/matrix-org/matrix-doc/pull/3375 * Changelogs * Capitalization Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com> * Remove verbiage for spaces because they don't exist * Iterations on text * Another clarification * Make error code descriptions consistent * Apply suggestions from code review Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Incorporate from merge * Misc language update per review * Update accuracy before splitting auth rules * fix wtf moment * Fix up v8 and v9 to match "fully specify room versions" * Scope auth events selection to room version * Apply consistency * Add changelogs * Review part 1 * Apply suggestions from code review Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Split out redaction sections * Clarify general case of join conditions Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com> Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
3.3 KiB
title | type | weight |
---|---|---|
Room Version 8 | docs | 60 |
This room version builds on version 7 to introduce a new join rule that allows members to join the room based on membership in another room.
{{% boxes/warning %}} This room version is known to have issues relating to redactions of member join events. Room version 9 should be preferred over v8 when creating rooms. {{% /boxes/warning %}}
Client considerations
Clients are encouraged to expose the option for the join rule in their user interface for supported room versions.
The new join rule, restricted
, is described in the
Client-Server API.
Clients which implement the redaction algorithm locally should refer to the redactions section below for a full overview.
Redactions
{{% added-in this=true %}} m.room.join_rules
events now keep allow
in addition to other
keys in content
when being redacted.
{{% boxes/warning %}} Room version 9 adds additional cases of protected properties for behaviour related to restricted rooms (the functionality introduced in v8). v9 is preferred over v8 when creating new rooms. {{% /boxes/warning %}}
The full redaction algorithm follows.
Upon receipt of a redaction event, the server must strip off any keys not in the following list:
event_id
type
room_id
sender
state_key
content
hashes
signatures
depth
prev_events
prev_state
auth_events
origin
origin_server_ts
membership
The content object must also be stripped of all keys, unless it is one of one of the following event types:
m.room.member
allows keymembership
.m.room.create
allows keycreator
.m.room.join_rules
allows keysjoin_rule
,allow
.m.room.power_levels
allows keysban
,events
,events_default
,kick
,redact
,state_default
,users
,users_default
.m.room.history_visibility
allows keyhistory_visibility
.
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 8 adds a new join rule to allow members of a room to join another room without invite. Otherwise, the room version inherits all properties of Room version 7.
Authorization rules
{{% added-in this=true %}} For checks performed upon m.room.member
events, new
points for handling content.join_authorised_via_users_server
are added (Rule 4.2
and 4.3.5).
{{% rver-fragment name="v8-auth-rules" %}}
Redactions
Unchanged from v7
The following sections have not been modified since v7, but are included for completeness.
State resolution
{{% rver-fragment name="v2-state-res" %}}
Event IDs
{{% rver-fragment name="v4-event-ids" %}}
Event format
{{% rver-fragment name="v4-event-format" %}}
Handling redactions
{{% rver-fragment name="v3-handling-redactions" %}}
Canonical JSON
{{% rver-fragment name="v6-canonical-json" %}}
Signing key validity period
{{% rver-fragment name="v5-signing-requirements" %}}