|
|
|
@ -40,29 +40,11 @@ being "leave" can knock on a room. This means that a user that is banned, has
|
|
|
|
|
already knocked or is currently in the room cannot knock on it.
|
|
|
|
|
|
|
|
|
|
### Join Rules
|
|
|
|
|
The `join_rule` of `m.room.join_rules` must be set to "invite" for a knock to
|
|
|
|
|
succeed. This means that people can't knock in public rooms. Additionally the
|
|
|
|
|
new join rule "private" is introduced. This is so that people can, when
|
|
|
|
|
creating a new room, prevent anyone from knocking.
|
|
|
|
|
|
|
|
|
|
### Power levels
|
|
|
|
|
The default power level for "knock" is the default power level for the room.
|
|
|
|
|
If a user has a too low power level to knock, then they aren't allowed to do
|
|
|
|
|
so. As power levels can be set for users not currently in the room, this can
|
|
|
|
|
be used as a way to limit who can and can't knock.
|
|
|
|
|
|
|
|
|
|
#### Example:
|
|
|
|
|
`@alice:example.org` CAN knock, but `@bob:example.org` CANNOT: The
|
|
|
|
|
(incomplete) content of `m.room.power_levels` is as follows:
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"users": {
|
|
|
|
|
"@alice:example.org": 1
|
|
|
|
|
},
|
|
|
|
|
"users_default": 0,
|
|
|
|
|
"knock": 1
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
This proposal introduces a new possible value for `join_rule` in
|
|
|
|
|
`m.room.join_rules`: "knock". The value of `join_rule` in `m.room.join_rules`
|
|
|
|
|
must be set to "knock" for a knock to succeed. This means that existing rooms
|
|
|
|
|
will need to opt into allowing knocks in their room. rooms. Other than
|
|
|
|
|
allowing knocks, "knock" is no different from the "invite" join rule.
|
|
|
|
|
|
|
|
|
|
## Membership changes
|
|
|
|
|
Once someone has sent a `knock` membership into the room, the membership for
|
|
|
|
@ -164,8 +146,7 @@ be protected via server ACLs.
|
|
|
|
|
### `GET /_matrix/federation/v1/make_knock/{roomId}/{userId}`
|
|
|
|
|
|
|
|
|
|
Asks the receiving server to return information that the sending server will
|
|
|
|
|
need to prepare a knock
|
|
|
|
|
event.
|
|
|
|
|
need to prepare a knock event.
|
|
|
|
|
|
|
|
|
|
Request format:
|
|
|
|
|
|
|
|
|
@ -264,16 +245,10 @@ homeserver.
|
|
|
|
|
|
|
|
|
|
# Potential issues
|
|
|
|
|
This new feature would allow users to spam rooms that they don't partake in.
|
|
|
|
|
That is why this proposal adds both the new join rule and the new power
|
|
|
|
|
level, in order to allow room admins to mitigate such potential spam.
|
|
|
|
|
That is why this proposal adds a new join rule, in order to allow room admins
|
|
|
|
|
to opt in to this behaviour.
|
|
|
|
|
|
|
|
|
|
# Alternatives
|
|
|
|
|
As for the join rule "invite", instead the join rule "knock" could be
|
|
|
|
|
introduced, meaning the room is like "invite" only that people can also
|
|
|
|
|
knock. The difference is for existing rooms: With this proposal people can
|
|
|
|
|
knock in existing "invite" rooms, with the alternative suggestion being that
|
|
|
|
|
they can't.
|
|
|
|
|
|
|
|
|
|
The two endpoints for the Client-Server API seem redundant, this MSC followed
|
|
|
|
|
how JOIN is working currently: One "proper" endpoint (`/rooms/{roomId}/join`)
|
|
|
|
|
and one to work properly over federation (`/join/{roomIdOrAlias}`). They
|
|
|
|
|