Consistently spell homeserver as homeserver
This commit is contained in:
parent
138c8f88be
commit
2f3a00fe34
39 changed files with 235 additions and 235 deletions
|
@ -1,11 +1,11 @@
|
|||
Versioning is, like, hard for backfilling backwards because of the number of Home Servers involved.
|
||||
Versioning is, like, hard for backfilling backwards because of the number of homeservers involved.
|
||||
|
||||
The way we solve this is by doing versioning as an acyclic directed graph of PDUs. For backfilling purposes, this is done on a per context basis.
|
||||
The way we solve this is by doing versioning as an acyclic directed graph of PDUs. For backfilling purposes, this is done on a per context basis.
|
||||
When we send a PDU we include all PDUs that have been received for that context that hasn't been subsequently listed in a later PDU. The trivial case is a simple list of PDUs, e.g. A <- B <- C. However, if two servers send out a PDU at the same to, both B and C would point at A - a later PDU would then list both B and C.
|
||||
|
||||
Problems with opaque version strings:
|
||||
- How do you do clustering without mandating that a cluster can only have one transaction in flight to a given remote home server at a time.
|
||||
- How do you do clustering without mandating that a cluster can only have one transaction in flight to a given remote homeserver at a time.
|
||||
If you have multiple transactions sent at once, then you might drop one transaction, receive another with a version that is later than the dropped transaction and which point ARGH WE LOST A TRANSACTION.
|
||||
- How do you do backfilling? A version string defines a point in a stream w.r.t. a single home server, not a point in the context.
|
||||
- How do you do backfilling? A version string defines a point in a stream w.r.t. a single homeserver, not a point in the context.
|
||||
|
||||
We only need to store the ends of the directed graph, we DO NOT need to do the whole one table of nodes and one of edges.
|
||||
|
|
|
@ -13,9 +13,9 @@ Application Services HTTP API
|
|||
|
||||
.. sectnum::
|
||||
|
||||
Application Service -> Home Server
|
||||
Application Service -> Homeserver
|
||||
----------------------------------
|
||||
This contains home server APIs which are used by the application service.
|
||||
This contains homeserver APIs which are used by the application service.
|
||||
|
||||
Registration API ``[Draft]``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -34,7 +34,7 @@ Output:
|
|||
Side effects:
|
||||
- The HS will start delivering events to the URL base specified if this 200s.
|
||||
API called when:
|
||||
- The application service wants to register with a brand new home server.
|
||||
- The application service wants to register with a brand new homeserver.
|
||||
Notes:
|
||||
- An application service can state whether they should be the only ones who
|
||||
can manage a specified namespace. This is referred to as an "exclusive"
|
||||
|
@ -100,7 +100,7 @@ Notes:
|
|||
|
||||
Unregister API ``[Draft]``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
This API unregisters a previously registered AS from the home server.
|
||||
This API unregisters a previously registered AS from the homeserver.
|
||||
|
||||
Inputs:
|
||||
- AS token
|
||||
|
@ -122,9 +122,9 @@ API called when:
|
|||
}
|
||||
|
||||
|
||||
Home Server -> Application Service
|
||||
Homeserver -> Application Service
|
||||
----------------------------------
|
||||
This contains application service APIs which are used by the home server.
|
||||
This contains application service APIs which are used by the homeserver.
|
||||
|
||||
User Query ``[Draft]``
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -152,9 +152,9 @@ Notes:
|
|||
- This is deemed more flexible than alternative methods (e.g. returning a JSON blob with the
|
||||
user's display name and get the HS to provision the user).
|
||||
Retry notes:
|
||||
- The home server cannot respond to the client's request until the response to
|
||||
- The homeserver cannot respond to the client's request until the response to
|
||||
this API is obtained from the AS.
|
||||
- Recommended that home servers try a few times then time out, returning a
|
||||
- Recommended that homeservers try a few times then time out, returning a
|
||||
408 Request Timeout to the client.
|
||||
|
||||
::
|
||||
|
@ -199,9 +199,9 @@ Notes:
|
|||
style JSON blob and get the HS to provision the room). It also means that the AS knows
|
||||
the room ID -> alias mapping.
|
||||
Retry notes:
|
||||
- The home server cannot respond to the client's request until the response to
|
||||
- The homeserver cannot respond to the client's request until the response to
|
||||
this API is obtained from the AS.
|
||||
- Recommended that home servers try a few times then time out, returning a
|
||||
- Recommended that homeservers try a few times then time out, returning a
|
||||
408 Request Timeout to the client.
|
||||
|
||||
::
|
||||
|
@ -236,13 +236,13 @@ Data flows:
|
|||
::
|
||||
|
||||
Typical
|
||||
HS ---> AS : Home server sends events with transaction ID T.
|
||||
HS ---> AS : Homeserver sends events with transaction ID T.
|
||||
<--- : AS sends back 200 OK.
|
||||
|
||||
AS ACK Lost
|
||||
HS ---> AS : Home server sends events with transaction ID T.
|
||||
HS ---> AS : Homeserver sends events with transaction ID T.
|
||||
<-/- : AS 200 OK is lost.
|
||||
HS ---> AS : Home server retries with the same transaction ID of T.
|
||||
HS ---> AS : Homeserver retries with the same transaction ID of T.
|
||||
<--- : AS sends back 200 OK. If the AS had processed these events
|
||||
already, it can NO-OP this request (and it knows if it is the same
|
||||
events based on the transacton ID).
|
||||
|
@ -253,15 +253,15 @@ Retry notes:
|
|||
- Since ASes by definition cannot alter the traffic being passed to it (unlike
|
||||
say, a Policy Server), these requests can be done in parallel to general HS
|
||||
processing; the HS doesn't need to block whilst doing this.
|
||||
- Home servers should use exponential backoff as their retry algorithm.
|
||||
- Home servers MUST NOT alter (e.g. add more) events they were going to
|
||||
- Homeservers should use exponential backoff as their retry algorithm.
|
||||
- Homeservers MUST NOT alter (e.g. add more) events they were going to
|
||||
send within that transaction ID on retries, as the AS may have already
|
||||
processed the events.
|
||||
|
||||
Ordering notes:
|
||||
- The events sent to the AS should be linearised, as they are from the event
|
||||
stream.
|
||||
- The home server will need to maintain a queue of transactions to send to
|
||||
- The homeserver will need to maintain a queue of transactions to send to
|
||||
the AS.
|
||||
|
||||
::
|
||||
|
@ -336,7 +336,7 @@ Notes:
|
|||
|
||||
Server admin style permissions
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The home server needs to give the application service *full control* over its
|
||||
The homeserver needs to give the application service *full control* over its
|
||||
namespace, both for users and for room aliases. This means that the AS should
|
||||
be able to create/edit/delete any room alias in its namespace, as well as
|
||||
create/delete any user in its namespace. No additional API changes need to be
|
||||
|
@ -451,15 +451,15 @@ Examples
|
|||
IRC
|
||||
~~~
|
||||
Pre-conditions:
|
||||
- Server admin stores the AS token "T_a" on the home server.
|
||||
- Home server has a token "T_h".
|
||||
- Home server has the domain "hsdomain.com"
|
||||
- Server admin stores the AS token "T_a" on the homeserver.
|
||||
- Homeserver has a token "T_h".
|
||||
- Homeserver has the domain "hsdomain.com"
|
||||
|
||||
1. Application service registration
|
||||
|
||||
::
|
||||
|
||||
AS -> HS: Registers itself with the home server
|
||||
AS -> HS: Registers itself with the homeserver
|
||||
POST /register
|
||||
{
|
||||
url: "https://someapp.com/matrix",
|
||||
|
|
|
@ -237,7 +237,7 @@ Domain specific string
|
|||
``room_id``
|
||||
A domain specific string with prefix ``!`` that is static across all events
|
||||
in a graph and uniquely identifies it. The ``domain`` should be that of the
|
||||
home server that created the room (i.e., the server that generated the
|
||||
homeserver that created the room (i.e., the server that generated the
|
||||
first ``m.room.create`` event).
|
||||
|
||||
``sender``
|
||||
|
@ -246,7 +246,7 @@ Domain specific string
|
|||
|
||||
User Id
|
||||
A domain specific string with prefix ``@`` representing a user account. The
|
||||
``domain`` is the home server of the user and is the server used to contact
|
||||
``domain`` is the homeserver of the user and is the server used to contact
|
||||
the user.
|
||||
|
||||
Joining a room
|
||||
|
@ -280,7 +280,7 @@ can then process the join event itself.
|
|||
Inviting a user
|
||||
---------------
|
||||
|
||||
To invite a remote user to a room we need their home server to sign the invite
|
||||
To invite a remote user to a room we need their homeserver to sign the invite
|
||||
event. This is done by sending the event to the remote server, which then signs
|
||||
the event, before distributing the invite to other servers.
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ This version will change the path prefix for HTTP:
|
|||
- Version 2: ``/_matrix/client/v2``
|
||||
|
||||
Note the lack of the ``api`` segment. This is for consistency between other
|
||||
home server path prefixes.
|
||||
homeserver path prefixes.
|
||||
|
||||
Terminology:
|
||||
- ``Chunk token`` : An opaque string which can be used to return another chunk
|
||||
|
@ -169,16 +169,16 @@ Outputs:
|
|||
``content`` key. Deleted message events are ``m.room.redaction`` events.
|
||||
- New position in the stream. (chunk token)
|
||||
State Events Ordering Notes:
|
||||
- Home servers may receive state events over federation that are superceded by
|
||||
state events previously sent to the client. The home server *cannot* send
|
||||
- Homeservers may receive state events over federation that are superceded by
|
||||
state events previously sent to the client. The homeserver *cannot* send
|
||||
these events to the client else they would end up erroneously clobbering the
|
||||
superceding state event.
|
||||
- As a result, the home server reserves the right to omit sending state events
|
||||
- As a result, the homeserver reserves the right to omit sending state events
|
||||
which are known to be superceded already.
|
||||
- This may result in missed *state* events. However, the state of the room will
|
||||
always be eventually consistent.
|
||||
Message Events Ordering Notes:
|
||||
- Home servers may receive message events over federation that happened a long
|
||||
- Homeservers may receive message events over federation that happened a long
|
||||
time ago. The client may or may not be interested in these message events.
|
||||
- For clients which do not store scrollback for a room (they discard events
|
||||
after processing them), this is not a problem as they only care about the
|
||||
|
@ -191,11 +191,11 @@ Message Events Ordering Notes:
|
|||
- The event, when it comes down the stream, will indicate which event it comes
|
||||
after.
|
||||
Rejected events:
|
||||
- A home server may find out via federation that it should not have accepted
|
||||
- A homeserver may find out via federation that it should not have accepted
|
||||
an event (e.g. to send a message/state event in a room). For example, it may
|
||||
send an event to another home server and receive an auth event stating
|
||||
send an event to another homeserver and receive an auth event stating
|
||||
that the event should not have been sent.
|
||||
- If this happens, the home server will send a ``m.room.redaction`` for the
|
||||
- If this happens, the homeserver will send a ``m.room.redaction`` for the
|
||||
event in question. This will be a local server event (not shared with other
|
||||
servers).
|
||||
- If the event was a state event, it will synthesise a new state event to
|
||||
|
@ -206,7 +206,7 @@ Unknown rooms:
|
|||
- You could receive events for rooms you are unaware of (e.g. you didn't do an
|
||||
initial sync, or your HS lost its database and is told from another HS that
|
||||
they are in this room). How do you handle this?
|
||||
- The simplest option would be to redo the initial sync with a filter on the
|
||||
- The simplest option would be to redo the initial sync with a filter on the
|
||||
room ID you're unaware of. This would retrieve the room state so you can
|
||||
display the room.
|
||||
What data flows does it address:
|
||||
|
@ -291,7 +291,7 @@ Scrollback API ``[Draft]``
|
|||
but as a purely informational display thing it would be nice.
|
||||
|
||||
Additional Inputs:
|
||||
- flag to say if the home server should do a backfill over federation
|
||||
- flag to say if the homeserver should do a backfill over federation
|
||||
Additional Outputs:
|
||||
- whether there are more events on the local HS / over federation.
|
||||
What data flows does it address:
|
||||
|
@ -313,7 +313,7 @@ Additional Outputs:
|
|||
Room Alias API ``[Draft]``
|
||||
--------------------------
|
||||
This provides mechanisms for creating and removing room aliases for a room on a
|
||||
home server. Typically, any user in a room can make an alias for that room. The
|
||||
homeserver. Typically, any user in a room can make an alias for that room. The
|
||||
alias creator (or anyone in the room?) can delete that alias. Server admins can
|
||||
also delete any alias on their server.
|
||||
|
||||
|
@ -323,7 +323,7 @@ Inputs:
|
|||
- Room Alias
|
||||
Output:
|
||||
- Room ID
|
||||
- List of home servers to join via.
|
||||
- List of homeservers to join via.
|
||||
|
||||
Mapping a room to an alias:
|
||||
|
||||
|
@ -334,7 +334,7 @@ Inputs:
|
|||
Output:
|
||||
- Room alias
|
||||
Notes:
|
||||
- The home server may add restrictions e.g. the user must be in the room.
|
||||
- The homeserver may add restrictions e.g. the user must be in the room.
|
||||
|
||||
Deleting a mapping:
|
||||
|
||||
|
@ -347,11 +347,11 @@ Output:
|
|||
|
||||
Published room list API ``[Draft]``
|
||||
-----------------------------------
|
||||
This provides mechanisms for searching for published rooms on a home server.
|
||||
This provides mechanisms for searching for published rooms on a homeserver.
|
||||
|
||||
Inputs:
|
||||
- Search text (e.g. room alias/name/topic to search on)
|
||||
- Home server to search on (this may just be the URL hit for HTTP)
|
||||
- Homeserver to search on (this may just be the URL hit for HTTP)
|
||||
- Any existing pagination token, can be missing if this is the first hit.
|
||||
- Limit for pagination
|
||||
Output:
|
||||
|
@ -378,7 +378,7 @@ Notes:
|
|||
|
||||
User Profile API ``[Draft]``
|
||||
----------------------------
|
||||
Every user on a home server has a profile. This profile is effectively a
|
||||
Every user on a homeserver has a profile. This profile is effectively a
|
||||
key-value store scoped to a user ID. It can include an ``avatar_url``,
|
||||
``displayname`` and other metadata. Updates to a profile should propagate to
|
||||
other interested users.
|
||||
|
@ -435,7 +435,7 @@ This had a number of problems associated with it:
|
|||
flicker.
|
||||
- Name/avatar changes created more ``m.room.member`` events which meant
|
||||
they needed to be included in the auth chains for federation. This
|
||||
created long auth chains which is suboptimal since home servers need
|
||||
created long auth chains which is suboptimal since homeservers need
|
||||
to store the auth chains forever.
|
||||
|
||||
These problems can be resolved by creating an ``m.room.member.profile``
|
||||
|
@ -448,7 +448,7 @@ However, this introduces its own set of problems, namely flicker. The
|
|||
client would receive the ``m.room.member`` event first, followed by
|
||||
the ``m.room.member.profile`` event, which could cause a flicker. In
|
||||
addition, federation may not send both events in a single transaction,
|
||||
resulting in missing information on the receiving home server.
|
||||
resulting in missing information on the receiving homeserver.
|
||||
|
||||
For federation, these problems can be resolved by sending the
|
||||
``m.room.member`` event as they are in v1 (with ``displayname`` and
|
||||
|
@ -457,7 +457,7 @@ they cannot be in the ``unsigned`` part of the event. The receiving home
|
|||
server will then extract these keys and create a server-generated
|
||||
``m.room.member.profile`` event. To avoid confusion with duplicate
|
||||
information, the ``avatar_url`` and ``displayname`` keys should be
|
||||
removed from the ``m.room.member`` event by the receiving home server.
|
||||
removed from the ``m.room.member`` event by the receiving homeserver.
|
||||
When a client requests these events (either from the event stream
|
||||
or from an initial sync), the server will send the generated
|
||||
``m.room.member.profile`` event under the ``unsigned.profile`` key of the
|
||||
|
@ -840,17 +840,17 @@ information per device to all other users just redirects the union problem to
|
|||
the client, which will commonly be presenting this information as an icon
|
||||
alongside the user.
|
||||
|
||||
When a client hits the event stream, the home server can treat the user as
|
||||
When a client hits the event stream, the homeserver can treat the user as
|
||||
"online". This behaviour should be able to be overridden to avoid flicker
|
||||
during connection losses when the client is appear offline (e.g. device is
|
||||
appear offline > goes into a tunnel > server times out > device regains
|
||||
connection and hits the event stream forcing the device online before the
|
||||
"appear offline" state can be set). When the client has not hit the event
|
||||
stream for a certain period of time, the home server can treat the user as
|
||||
stream for a certain period of time, the homeserver can treat the user as
|
||||
"offline". The user can also set a global *per-user* appear offline flag.
|
||||
|
||||
The user should also be able to set their presence state via a direct API,
|
||||
without having to hit the event stream. The home server will set a timer when
|
||||
without having to hit the event stream. The homeserver will set a timer when
|
||||
the connection ends, after which it will set that device to offline.
|
||||
|
||||
As the idle flag and online state is determined per device, there needs to be a
|
||||
|
@ -970,12 +970,12 @@ the hashes the same is the best as that means clients do not need to request
|
|||
the capabilities for the given hash.
|
||||
|
||||
On first signup, the client will attempt to send the hash and be most likely
|
||||
refused by the home server as it does not know the full capability set for that
|
||||
refused by the homeserver as it does not know the full capability set for that
|
||||
hash. The client will then have to upload the full capability set to the home
|
||||
server. The client will then be able to send the hash as normal.
|
||||
|
||||
When a client receives a hash, the client will either recognise the hash or
|
||||
will have to request the capability set from their home server:
|
||||
will have to request the capability set from their homeserver:
|
||||
|
||||
Inputs:
|
||||
- Hash
|
||||
|
@ -1070,7 +1070,7 @@ Main use cases for ``updates``:
|
|||
- Call signalling (child events are ICE candidates, answer to the offer, and
|
||||
termination)
|
||||
- *Local* Delivery/Read receipts : "Local" means they are not shared with other
|
||||
users on the same home server or via federation but *are* shared between
|
||||
users on the same homeserver or via federation but *are* shared between
|
||||
clients for the same user; useful for push notifications, read count markers,
|
||||
etc. This is done to avoid the ``n^2`` problem for sending receipts, where
|
||||
the vast majority of traffic tends towards sending more receipts.
|
||||
|
@ -1168,11 +1168,11 @@ Events (breaking changes; event version 2) ``[Draft]``
|
|||
when dealing with custom event types. E.g. ``_custom.event`` would allow
|
||||
anything in the state key, ``_@custom.event`` would only allow user IDs in
|
||||
the state key, etc.
|
||||
- s/user_id/sender/g given that home servers can send events, not just users.
|
||||
- s/user_id/sender/g given that homeservers can send events, not just users.
|
||||
|
||||
Server-generated events ``[Draft]``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Home servers may want to send events to their local clients or to other home
|
||||
Homeservers may want to send events to their local clients or to other home
|
||||
servers e.g. for server status notifications.
|
||||
|
||||
These events look like regular events but have a server domain name as the
|
||||
|
|
|
@ -13,9 +13,9 @@ phishing/spoofing of IDs, commonly known as a homograph attack.
|
|||
Web browers encountered this problem when International Domain Names were
|
||||
introduced. A variety of checks were put in place in order to protect users. If
|
||||
an address failed the check, the raw punycode would be displayed to
|
||||
disambiguate the address. Similar checks are performed by home servers in
|
||||
disambiguate the address. Similar checks are performed by homeservers in
|
||||
Matrix. However, Matrix does not use punycode representations, and so does not
|
||||
show raw punycode on a failed check. Instead, home servers must outright reject
|
||||
show raw punycode on a failed check. Instead, homeservers must outright reject
|
||||
these misleading IDs.
|
||||
|
||||
Types of human-readable IDs
|
||||
|
@ -48,12 +48,12 @@ Checks
|
|||
|
||||
Rejecting
|
||||
---------
|
||||
- Home servers MUST reject room aliases which do not pass the check, both on
|
||||
- Homeservers MUST reject room aliases which do not pass the check, both on
|
||||
GETs and PUTs.
|
||||
- Home servers MUST reject user ID localparts which do not pass the check, both
|
||||
- Homeservers MUST reject user ID localparts which do not pass the check, both
|
||||
on creation and on events.
|
||||
- Any home server whose domain does not pass this check, MUST use their punycode
|
||||
domain name instead of the IDN, to prevent other home servers rejecting you.
|
||||
- Any homeserver whose domain does not pass this check, MUST use their punycode
|
||||
domain name instead of the IDN, to prevent other homeservers rejecting you.
|
||||
- Error code is ``M_FAILED_HUMAN_ID_CHECK``. (generic enough for both failing
|
||||
due to homograph attacks, and failing due to including ``:`` s, etc)
|
||||
- Error message MAY go into further information about which characters were
|
||||
|
@ -74,7 +74,7 @@ Other considerations
|
|||
- High security: Outright rejection of the ID at the point of creation /
|
||||
receiving event. Point of creation rejection is preferable to avoid the ID
|
||||
entering the system in the first place. However, malicious HSes can just
|
||||
allow the ID. Hence, other home servers must reject them if they see them in
|
||||
allow the ID. Hence, other homeservers must reject them if they see them in
|
||||
events. Client never sees the problem ID, provided the HS is correctly
|
||||
implemented.
|
||||
- High security decided; client doesn't need to worry about it, no additional
|
||||
|
|
|
@ -5,14 +5,14 @@ A simple implementation of presence messaging has the ability to cause a large
|
|||
amount of Internet traffic relating to presence updates. In order to minimise
|
||||
the impact of such a feature, the following observations can be made:
|
||||
|
||||
* There is no point in a Home Server polling status for peers in a user's
|
||||
* There is no point in a homeserver polling status for peers in a user's
|
||||
presence list if the user has no clients connected that care about it.
|
||||
|
||||
* It is highly likely that most presence subscriptions will be symmetric - a
|
||||
given user watching another is likely to in turn be watched by that user.
|
||||
|
||||
* It is likely that most subscription pairings will be between users who share
|
||||
at least one Room in common, and so their Home Servers are actively
|
||||
at least one Room in common, and so their homeservers are actively
|
||||
exchanging message PDUs or transactions relating to that Room.
|
||||
|
||||
* Presence update messages do not need realtime guarantees. It is acceptable to
|
||||
|
@ -25,7 +25,7 @@ promise to send them when required. Rather than actively polling for the
|
|||
current state all the time, HSes can rely on their relative stability to only
|
||||
push updates when required.
|
||||
|
||||
A Home Server should not rely on the longterm validity of this presence
|
||||
A homeserver should not rely on the longterm validity of this presence
|
||||
information, however, as this would not cover such cases as a user's server
|
||||
crashing and thus failing to inform their peers that users it used to host are
|
||||
no longer available online. Therefore, each promise of future updates should
|
||||
|
@ -33,7 +33,7 @@ carry with a timeout value (whether explicit in the message, or implicit as some
|
|||
defined default in the protocol), after which the receiving HS should consider
|
||||
the information potentially stale and request it again.
|
||||
|
||||
However, because of the likelihood that two home servers are exchanging messages
|
||||
However, because of the likelihood that two homeservers are exchanging messages
|
||||
relating to chat traffic in a room common to both of them, the ongoing receipt
|
||||
of these messages can be taken by each server as an implicit notification that
|
||||
the sending server is still up and running, and therefore that no status changes
|
||||
|
@ -98,7 +98,7 @@ The data model presented here puts the following requirements on the APIs:
|
|||
Client-Server
|
||||
-------------
|
||||
|
||||
Requests that a client can make to its Home Server
|
||||
Requests that a client can make to its homeserver
|
||||
|
||||
* get/set current presence state
|
||||
Basic enumeration + ability to set a custom piece of text
|
||||
|
@ -128,7 +128,7 @@ Requests that a client can make to its Home Server
|
|||
Server-Server
|
||||
-------------
|
||||
|
||||
Requests that Home Servers make to others
|
||||
Requests that homeservers make to others
|
||||
|
||||
* request permission to add a user to presence list
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ Overview
|
|||
========
|
||||
|
||||
Internally within Synapse users are referred to by an opaque ID, which consists
|
||||
of some opaque localpart combined with the domain name of their home server.
|
||||
of some opaque localpart combined with the domain name of their homeserver.
|
||||
Obviously this does not yield a very nice user experience; users would like to
|
||||
see readable names for other users that are in some way meaningful to them.
|
||||
Additionally, users like to be able to publish "profile" details to inform other
|
||||
|
@ -59,7 +59,7 @@ servers should be accounted for here.]]
|
|||
Visibility Permissions
|
||||
======================
|
||||
|
||||
A home server implementation could offer the ability to set permissions on
|
||||
A homeserver implementation could offer the ability to set permissions on
|
||||
limited visibility of those fields. When another user requests access to the
|
||||
target user's profile, their own identity should form part of that request. The
|
||||
HS implementation can then decide which fields to make available to the
|
||||
|
@ -130,12 +130,12 @@ namespace to allocate names into.
|
|||
It would also be nice from a user experience perspective if the profile that a
|
||||
given name links to can also declare that name as part of its metadata.
|
||||
Furthermore as a security and consistency perspective it would be nice if each
|
||||
end (the directory server and the user's home server) check the validity of the
|
||||
end (the directory server and the user's homeserver) check the validity of the
|
||||
mapping in some way. This needs investigation from a security perspective to
|
||||
ensure against spoofing.
|
||||
|
||||
One such model may be that the user starts by declaring their intent to use a
|
||||
given user name link to their home server, which then contacts the directory
|
||||
given user name link to their homeserver, which then contacts the directory
|
||||
service. At some point later (maybe immediately for "public open FCFS servers",
|
||||
maybe after some kind of human intervention for verification) the DS decides to
|
||||
honour this link, and includes it in its served output. It should also tell the
|
||||
|
@ -170,7 +170,7 @@ balancing choice on behalf of the user who would choose, or not, to make use of
|
|||
such a feature to publish their information.
|
||||
|
||||
Additionally, unless some form of strong end-to-end user-based encryption is
|
||||
used, a user of ACLs for information privacy has to trust other home servers not
|
||||
used, a user of ACLs for information privacy has to trust other homeservers not
|
||||
to lie about the identify of the user requesting access to the Profile.
|
||||
|
||||
|
||||
|
@ -182,7 +182,7 @@ The data model presented here puts the following requirements on the APIs:
|
|||
Client-Server
|
||||
-------------
|
||||
|
||||
Requests that a client can make to its Home Server
|
||||
Requests that a client can make to its homeserver
|
||||
|
||||
* get/set my Display Name
|
||||
This should return/take a simple "text/plain" field
|
||||
|
@ -207,7 +207,7 @@ TODO(paul): At some later stage we should consider the API for:
|
|||
Server-Server
|
||||
-------------
|
||||
|
||||
Requests that Home Servers make to others
|
||||
Requests that homeservers make to others
|
||||
|
||||
* get a user's Display Name / Avatar
|
||||
|
||||
|
@ -221,7 +221,7 @@ Requests that Home Servers make to others
|
|||
Room Event PDU Types
|
||||
--------------------
|
||||
|
||||
Events that are pushed from Home Servers to other Home Servers or clients.
|
||||
Events that are pushed from homeservers to other homeservers or clients.
|
||||
|
||||
* user Display Name change
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ Discovery
|
|||
=========
|
||||
|
||||
To join a room, a user has to discover the room by some mechanism in order to
|
||||
obtain the (opaque) Room ID and a candidate list of likely home servers that
|
||||
obtain the (opaque) Room ID and a candidate list of likely homeservers that
|
||||
contain it.
|
||||
|
||||
Sending an Invitation
|
||||
|
@ -21,7 +21,7 @@ The inviter's HS sets the membership status of the invitee to "invited" in the
|
|||
"m.members" state key by sending a state update PDU. The HS then broadcasts this
|
||||
PDU among the existing members in the usual way. An invitation message is also
|
||||
sent to the invited user, containing the Room ID and the PDU ID of this
|
||||
invitation state change and potentially a list of some other home servers to use
|
||||
invitation state change and potentially a list of some other homeservers to use
|
||||
to accept the invite. The user's client can then choose to display it in some
|
||||
way to alert the user.
|
||||
|
||||
|
@ -34,7 +34,7 @@ Directory Service
|
|||
|
||||
Alternatively, the user may discover the channel via a directory service; either
|
||||
by performing a name lookup, or some kind of browse or search acitivty. However
|
||||
this is performed, the end result is that the user's home server requests the
|
||||
this is performed, the end result is that the user's homeserver requests the
|
||||
Room ID and candidate list from the directory service.
|
||||
|
||||
[[TODO(paul): At present, no API has been designed or described for this
|
||||
|
@ -44,14 +44,14 @@ directory service]]
|
|||
Joining
|
||||
=======
|
||||
|
||||
Once the ID and home servers are obtained, the user can then actually join the
|
||||
Once the ID and homeservers are obtained, the user can then actually join the
|
||||
room.
|
||||
|
||||
Accepting an Invite
|
||||
-------------------
|
||||
|
||||
If a user has received and accepted an invitation to join a room, the invitee's
|
||||
home server can now send an invite acceptance message to a chosen candidate
|
||||
homeserver can now send an invite acceptance message to a chosen candidate
|
||||
server from the list given in the invitation, citing also the PDU ID of the
|
||||
invitation as "proof" of their invite. (This is required as due to late message
|
||||
propagation it could be the case that the acceptance is received before the
|
||||
|
@ -85,7 +85,7 @@ can instead post a "knock" message, which informs other members of the room that
|
|||
the would-be joiner wishes to become a member and sets their membership value to
|
||||
"knocked". If any of them wish to accept this, they can then send an invitation
|
||||
in the usual way described above. Knowing that the user has already knocked and
|
||||
expressed an interest in joining, the invited user's home server should
|
||||
expressed an interest in joining, the invited user's homeserver should
|
||||
immediately accept that invitation on the user's behalf, and go on to join the
|
||||
room in the usual way.
|
||||
|
||||
|
|
|
@ -18,19 +18,19 @@ users, and other management and miscellaneous metadata), and a message history.
|
|||
Room Identity and Naming
|
||||
========================
|
||||
|
||||
Rooms can be arbitrarily created by any user on any home server; at which point
|
||||
the home server will sign the message that creates the channel, and the
|
||||
Rooms can be arbitrarily created by any user on any homeserver; at which point
|
||||
the homeserver will sign the message that creates the channel, and the
|
||||
fingerprint of this signature becomes the strong persistent identify of the
|
||||
room. This now identifies the room to any home server in the network regardless
|
||||
room. This now identifies the room to any homeserver in the network regardless
|
||||
of its original origin. This allows the identify of the room to outlive any
|
||||
particular server. Subject to appropriate permissions [to be discussed later],
|
||||
any current member of a room can invite others to join it, can post messages
|
||||
that become part of its history, and can change the persistent state of the room
|
||||
(including its current set of permissions).
|
||||
|
||||
Home servers can provide a directory service, allowing a lookup from a
|
||||
Homeservers can provide a directory service, allowing a lookup from a
|
||||
convenient human-readable form of room label to a room ID. This mapping is
|
||||
scoped to the particular home server domain and so simply represents that server
|
||||
scoped to the particular homeserver domain and so simply represents that server
|
||||
administrator's opinion of what room should take that label; it does not have to
|
||||
be globally replicated and does not form part of the stored state of that room.
|
||||
|
||||
|
@ -156,7 +156,7 @@ m.public_history
|
|||
to be a member of the room.
|
||||
|
||||
m.archive_servers
|
||||
For "public" rooms with public history, gives a list of home servers that
|
||||
For "public" rooms with public history, gives a list of homeservers that
|
||||
should be included in message distribution to the room, even if no users on
|
||||
that server are present. These ensure that a public room can still persist
|
||||
even if no users are currently members of it. This list should be consulted by
|
||||
|
@ -179,7 +179,7 @@ m.topic
|
|||
Room Creation Templates
|
||||
=======================
|
||||
|
||||
A client (or maybe home server?) could offer a few templates for the creation of
|
||||
A client (or maybe homeserver?) could offer a few templates for the creation of
|
||||
new rooms. For example, for a simple private one-to-one chat the channel could
|
||||
assign the creator a power-level of 1, requiring a level of 1 to invite, and
|
||||
needing an invite before members can join. An invite is then sent to the other
|
||||
|
@ -215,7 +215,7 @@ permissions to allow this direct messaging.
|
|||
|
||||
Between any given pair of user IDs that wish to exchange private messages, there
|
||||
will exist a single shared Room, created lazily by either side. These rooms will
|
||||
need a certain amount of special handling in both home servers and display on
|
||||
need a certain amount of special handling in both homeservers and display on
|
||||
clients, but as much as possible should be treated by the lower layers of code
|
||||
the same as other rooms.
|
||||
|
||||
|
@ -226,7 +226,7 @@ clients should display these in a special way too as the room name is not
|
|||
important; instead it should distinguish them on the Display Name of the other
|
||||
party.
|
||||
|
||||
Home Servers will need a client-API option to request setting up a new user-user
|
||||
Homeservers will need a client-API option to request setting up a new user-user
|
||||
chat room, which will then need special handling within the server. It will
|
||||
create a new room with the following
|
||||
|
||||
|
@ -260,7 +260,7 @@ history with each other simultaneously create a room and invite the other to it.
|
|||
This is called a "glare" situation. There are two possible ideas for how to
|
||||
resolve this:
|
||||
|
||||
* Each Home Server should persist the mapping of (user ID pair) to room ID, so
|
||||
* Each homeserver should persist the mapping of (user ID pair) to room ID, so
|
||||
that duplicate requests can be suppressed. On receipt of a room creation
|
||||
request that the HS thinks there already exists a room for, the invitation to
|
||||
join can be rejected if:
|
||||
|
|
|
@ -66,7 +66,7 @@ Privacy
|
|||
|
||||
A User may publish the association between their phone number and Matrix User ID
|
||||
on the Identity Server without publishing the number in their Profile hosted on
|
||||
their Home Server.
|
||||
their homeserver.
|
||||
|
||||
Identity Servers should refrain from publishing reverse mappings and should
|
||||
take steps, such as rate limiting, to prevent attackers enumerating the space of
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue