-
Notifications
You must be signed in to change notification settings - Fork 401
MSC4294: Ignore and mass ignore invites #4294
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
grinapo
wants to merge
5
commits into
matrix-org:main
Choose a base branch
from
grinapo:master
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
1ccfe60
Add ignore invites proposal.
grinapo ce4afa1
Rename file to PR number.
grinapo 4907dbc
Rename doc internal title
grinapo 52c5d9b
MSC4294: specifying relation between ignore and ignored_inviters
grinapo b68209b
Update 4294-ignore-invites.md
grinapo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Overall, I feel this MSC is in direct competition with #4155 which has a number of implementations and experimentation. If there's parts that 4155 doesn't cover, this MSC would be best positioned to propose extensions to 4155 so that it may protect more users. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# MSC4294 Ignore and mass ignore invites | ||
|
||
## Proposal | ||
|
||
### Introduction | ||
|
||
Invite spam is getting more problematic and clients have no good way to handle massive invite spamming without server support. | ||
|
||
**Ignoring** users seem to help this but it has two serious problems: | ||
|
||
- completely ignoring users make them completely disappear for the user, and if the user is also a moderator/adminstrator it makes impossible to detect and handle further abuse | ||
- servers are not _required_ to clean up [invites] after ignored users (by the spec). | ||
|
||
**Rejecting ignores** also creates problem for clients: | ||
|
||
- Invite rejections are _room based_, so when a user is invited to massive amount of rooms by `spammer` then rejections require numerous `leave` API calls | ||
- API calls are rate limited so massive rejections may be impossible without seriously disturbing user communication | ||
- There are no mass invite rejection feature based on `sender` | ||
|
||
This proposal suggests a separate ignore for invites, and proposes compulsory server cleanup of invites, giving one solution for all of the listed problems. | ||
|
||
### Proposed solution | ||
|
||
Ignores are currently handled by `m.ignored_user_list` (`account_data` [APIs](https://spec.matrix.org/v1.14/client-server-api/#put_matrixclientv3useruseridaccount_datatype)). | ||
|
||
Current spec only handles `ignored_users` list. | ||
|
||
I propose to have it extended by **`ignored_inviters`** list the following way: | ||
|
||
- the type is `m.ignored_inviters_list` | ||
- it is a mapping of userId to empty object, similar to `ignored_users` | ||
- the limit of the amount of the entries shall follow the same guidelines as `ignored_users` | ||
|
||
#### Server behaviour | ||
|
||
- Following an update of the `m.ignored_user_list`, the sync API for all clients should immediately start ignoring (or un-ignoring) all invites from all the listed users. | ||
- Servers are **required** to reject all pending invites from all the ignored inviter users. | ||
- Servers could choose to provide a boilerplate `reason` for rejection (but see security considerations below) | ||
|
||
## Potential issues | ||
|
||
When the server doesn't support this feature it should give appropriate error to the client, and the client have to handle that. | ||
|
||
Clients should be aware of the success of the ignore somehow since they need a method to clear pending invited from the user UI. The method should be the same as for `ignored_users`. | ||
|
||
This proposal does not handle rejection of all future invites. | ||
|
||
This proposal does not handle rejection of future invites of various logical classification, like "invites from actors not sharing a room with the user", "invites from actors matching a pattern or regex", "invites from actors on a given server". These are often requested features but would make this proposal much more complex, which would slow down its acceptance. These could be covered in a later proposal. | ||
|
||
`ignored_users` and `ignored_inviters` may overlap. It seems to be logical to remove already completely ignored users from `ignored_inviters`, however this would cause loss of information, since when the user unignores someone then their invites would be automagically unignored as well. Servers **should not** deduplicate and let the clients decide how they handle this situation and what interface they provide to the users to handle this. Internally, servers should ignore processing `ignored_inviters` for already ignored users at all. | ||
|
||
## Alternatives | ||
|
||
Manual rejection, hitting rate limits, losing connection, spam invites piling up. Sadness. | ||
|
||
## Security considerations | ||
|
||
This function is fuctionally similar to `ignore_users`, any security consideration there may apply here. | ||
|
||
When a server autorejects invites on the user behalf it may choose to include a boilerplate `reason` for the rejection. However this would cause an unnecessary information leak towards the abuser (informing whether the server provides mass ignore or not), so choosing to have an absent `reason` may be prudent, this way it is indistinguishable from manual rejections. This proposal provides no way for the user to provide a `reason` field, which may or may not cause discomfort. | ||
|
||
## Unstable prefix | ||
|
||
This proposal use the already established `m.ignored_user_list` feature, extending its functionality. |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implementation requirements: