-
Notifications
You must be signed in to change notification settings - Fork 418
MSC2666: Get rooms in common with another user #2666
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
base: old_master
Are you sure you want to change the base?
Changes from 10 commits
c61790e
4264f32
008951f
29f02ed
2b75da8
630af1c
d885bcf
5254076
3f2faef
db99583
10a2df2
d3b17e6
4ac7ce8
a4f5bae
c453704
cd173d5
1a389f9
fbbb2d9
591d3e5
a1de65f
d59d051
6a4e523
b946cc3
ea49670
6f4f01b
60ae94f
7829c3b
92aef5b
d58d0a1
d0c4cd2
5a00285
6ad9ad0
a357f2a
46c5948
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| # MSC 2666: Get rooms in common with another user | ||
anoadragon453 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| It is useful to be able to fetch rooms you have in common with another user. Popular messaging services | ||
| such as Telegram offer users the ability to show "groups in common", which allows users to determine | ||
| what they have in common before participating in converstion. | ||
|
|
||
| There are a variety of applications for this information. Some users may want to block invites from | ||
| users they do not share a room with at the client level, and need a way to poll the homeserver for | ||
| this information. Another use case would be trying to determine how a user came across your mxid, as | ||
| invites on their own do not present much context. With this endpoint, a client could tell you what | ||
| rooms you have in common before you accept an invite. | ||
|
|
||
| While this information can be determined if the user has full access to member state for all rooms, | ||
| modern clients often implement "lazy-loading", so they often only have a subset of state for the rooms | ||
| the user is in. Therefore, the homeserver should have a means to provide this information. | ||
|
|
||
| This proposal aims to implement a simple mechanism to fetch rooms you have in common with another user. | ||
|
|
||
| ## Proposal | ||
|
|
||
| Homeservers should implement a new endpoint `/users/{current_user}/shared_rooms/{other_user_id}` which will take | ||
Half-Shot marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| the authenticated user's MxID and the user that is being searched for. | ||
|
|
||
| The response format will be an array containing all rooms where both the `current_user` and `other_user_id` have | ||
| a membership of type `join`. If either user is not joined to any rooms, or the `other_user_id` does not exist, an | ||
Half-Shot marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| empty array should be returned. If the `current_user` and `other_user_id` are the same, then the endpoint SHOULD | ||
| reject with HTTP 400. | ||
|
|
||
| ``` | ||
| GET _matrix/client/unstable/uk.half-shot.msc2666/users/@alice:example.com/shared_rooms/@bob:example.com | ||
Half-Shot marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Half-Shot marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| ``` | ||
|
|
||
| ```json | ||
| { | ||
| "rooms": [ | ||
| "!OGEhHVWSdvArJzumhm:matrix.org", | ||
turt2live marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| "!HYlSnuBHTxUPgyZPKC:half-shot.uk", | ||
| "!DueayyFpVTeVOQiYjR:example.com" | ||
|
Comment on lines
+49
to
+51
Contributor
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. Given that at least some of the foreseen use cases involve presenting the rooms in common to a user, would there be any benefit in including more than just the room ID here? As a drastic example, could the endpoint use the same response format as
Member
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. I don't think any of the client implementations so far have needed extra information. By definition the client is in all the rooms and most likely already has the room state (excluding member list). AFAIK even with sliding sync clients will get the entire room list fairly quickly
Contributor
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. Ok, that sounds sensible. I was just curious and nothing in the proposal seems to touch upon why the response is not richer or more extensible. |
||
| ] | ||
| } | ||
| ``` | ||
|
|
||
anoadragon453 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| ## Potential issues | ||
|
|
||
| Homeserver performance and storage may be impacted by this endpoint. While a homeserver already stores | ||
| membership information for each of its users, the information may not be stored in a way that is readily | ||
| accessible. Homeservers that have implemented [POST /user-directory/search](https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-user-directory-search) | ||
| may have started some of this work, if they are limiting users to searching for users for which they | ||
| share rooms. While this is not a given by any means, it may mean that implementations of this API | ||
| and /search may be complimentary. | ||
|
|
||
|
|
||
| ## Alternatives | ||
anoadragon453 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| A client can already read all membership for all rooms, and thus determine which of those rooms contains | ||
| a "join" membership for the given user_id. However, this method is computationally expensive on the homeserver | ||
| and the client. Furthermore, it would increase total network traffic (which is important for low bandwith / mobile clients) | ||
| as well as include lots of extranious information. | ||
Half-Shot marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
|
|
||
| ## Security considerations | ||
tulir marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| The information provided in this endpoint is already accessible to the client if it has a copy of all | ||
| state that the user can see. This endpoint only makes it possible to get this information without having | ||
| to request all state ahead of time. | ||
|
|
||
|
|
||
| ## Unstable prefix | ||
|
|
||
| The implementation MUST use `/_matrix/client/unstable/uk.half-shot.msc2666/users/{user_id}/shared_rooms/{other_user_id}`. | ||
| The /versions endpoint MUST include a new key in `unstable_features` with the name `uk.half-shot.msc2666`. | ||
anoadragon453 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| Once the MSC has been merged, clients should use `/_matrix/client/r0/users/{user_id}/shared_rooms/{other_user_id}` | ||
| and will no longer need to check for the `unstable_features` flag. | ||
Uh oh!
There was an error while loading. Please reload this page.