More formatting fixes; typos; etc
This commit is contained in:
parent
af32ec194a
commit
faa95e172f
6 changed files with 50 additions and 47 deletions
|
@ -63,3 +63,4 @@ The call setup should appear seamless to the user as if they had simply placed
|
||||||
a call and the other party had accepted. Thusly, any media stream that had been
|
a call and the other party had accepted. Thusly, any media stream that had been
|
||||||
setup for use on a call should be transferred and used for the call that
|
setup for use on a call should be transferred and used for the call that
|
||||||
replaces it.
|
replaces it.
|
||||||
|
|
||||||
|
|
|
@ -66,13 +66,13 @@ An example HS configuration required to pass traffic to the AS is:
|
||||||
application service is merely augmenting the room itself (e.g. providing
|
application service is merely augmenting the room itself (e.g. providing
|
||||||
logging or searching facilities).
|
logging or searching facilities).
|
||||||
- Namespaces are represented by POSIX extended regular expressions,
|
- Namespaces are represented by POSIX extended regular expressions,
|
||||||
e.g.:
|
e.g:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
users:
|
users:
|
||||||
- exclusive: true
|
- exclusive: true
|
||||||
regex: @irc.freenode.net/.*
|
regex: @irc.freenode.net_.*
|
||||||
|
|
||||||
|
|
||||||
Home Server -> Application Service API
|
Home Server -> Application Service API
|
||||||
|
@ -326,7 +326,7 @@ but only if the application service has defined the namespace as ``exclusive``.
|
||||||
|
|
||||||
ID conventions
|
ID conventions
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
.. NOTE::
|
.. TODO-spec
|
||||||
- Giving HSes the freedom to namespace still feels like the Right Thing here.
|
- Giving HSes the freedom to namespace still feels like the Right Thing here.
|
||||||
- Exposing a public API provides the consistency which was the main complaint
|
- Exposing a public API provides the consistency which was the main complaint
|
||||||
against namespacing.
|
against namespacing.
|
||||||
|
@ -345,7 +345,7 @@ types, including:
|
||||||
- MSISDNs (``tel``)
|
- MSISDNs (``tel``)
|
||||||
- Email addresses (``mailto``)
|
- Email addresses (``mailto``)
|
||||||
- IRC nicks (``irc`` - https://tools.ietf.org/html/draft-butcher-irc-url-04)
|
- IRC nicks (``irc`` - https://tools.ietf.org/html/draft-butcher-irc-url-04)
|
||||||
- XMPP (xep-0032)
|
- XMPP (XEP-0032)
|
||||||
- SIP URIs (RFC 3261)
|
- SIP URIs (RFC 3261)
|
||||||
|
|
||||||
As a result, virtual user IDs SHOULD relate to their URI counterpart. This
|
As a result, virtual user IDs SHOULD relate to their URI counterpart. This
|
||||||
|
@ -403,6 +403,8 @@ blog comment traffic in & out of matrix
|
||||||
|
|
||||||
Active Application Services
|
Active Application Services
|
||||||
----------------------------
|
----------------------------
|
||||||
|
.. NOTE::
|
||||||
|
This section is a work in progress.
|
||||||
|
|
||||||
.. TODO-spec
|
.. TODO-spec
|
||||||
API that provides hooks into the server so that you can intercept and
|
API that provides hooks into the server so that you can intercept and
|
||||||
|
@ -419,3 +421,4 @@ Policy Servers
|
||||||
|
|
||||||
Enforcing policies
|
Enforcing policies
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,9 @@ Federation API
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Matrix home servers use the Federation APIs (also known as server-server APIs)
|
Matrix home servers use the Federation APIs (also known as server-server APIs)
|
||||||
to communicate with each other.
|
to communicate with each other. Home servers use these APIs to push messages to
|
||||||
Home servers use these APIs to push messages to each other in real-time, to
|
each other in real-time, to request historic messages from each other, and to
|
||||||
request historic messages from each other, and to query profile and presence
|
query profile and presence information about users on each other's servers.
|
||||||
information about users on each other's servers.
|
|
||||||
|
|
||||||
The APIs are implemented using HTTPS GETs and PUTs between each of the
|
The APIs are implemented using HTTPS GETs and PUTs between each of the
|
||||||
servers. These HTTPS requests are strongly authenticated using public key
|
servers. These HTTPS requests are strongly authenticated using public key
|
||||||
|
@ -21,7 +20,7 @@ Persisted Data Units (PDUs):
|
||||||
context.
|
context.
|
||||||
|
|
||||||
Like email, it is the responsibility of the originating server of a PDU
|
Like email, it is the responsibility of the originating server of a PDU
|
||||||
to deliver that event to its recepient servers. However PDUs are signed
|
to deliver that event to its recipient servers. However PDUs are signed
|
||||||
using the originating server's public key so that it is possible to
|
using the originating server's public key so that it is possible to
|
||||||
deliver them through third-party servers.
|
deliver them through third-party servers.
|
||||||
|
|
||||||
|
@ -84,18 +83,19 @@ directly or by querying an intermediate notary server using a
|
||||||
response with their own key. A server may query multiple notary servers to
|
response with their own key. A server may query multiple notary servers to
|
||||||
ensure that they all report the same public keys.
|
ensure that they all report the same public keys.
|
||||||
|
|
||||||
This approach is borrowed from the Perspectives Project
|
This approach is borrowed from the `Perspectives Project`_, but modified to
|
||||||
(http://perspectives-project.org/), but modified to include the NACL keys and to
|
include the NACL keys and to use JSON instead of XML. It has the advantage of
|
||||||
use JSON instead of XML. It has the advantage of avoiding a single trust-root
|
avoiding a single trust-root since each server is free to pick which notary
|
||||||
since each server is free to pick which notary servers they trust and can
|
servers they trust and can corroborate the keys returned by a given notary
|
||||||
corroborate the keys returned by a given notary server by querying other
|
server by querying other servers.
|
||||||
servers.
|
|
||||||
|
.. _Perspectives Project: http://perspectives-project.org/
|
||||||
|
|
||||||
Publishing Keys
|
Publishing Keys
|
||||||
_______________
|
_______________
|
||||||
|
|
||||||
Home servers publish the allowed TLS fingerprints and signing keys in a JSON
|
Home servers publish the allowed TLS fingerprints and signing keys in a JSON
|
||||||
object at ``/_matrix/key/v2/server/${key_id}``. The response contains a list of
|
object at ``/_matrix/key/v2/server/{key_id}``. The response contains a list of
|
||||||
``verify_keys`` that are valid for signing federation requests made by the
|
``verify_keys`` that are valid for signing federation requests made by the
|
||||||
server and for signing events. It contains a list of ``old_verify_keys``
|
server and for signing events. It contains a list of ``old_verify_keys``
|
||||||
which are only valid for signing events. Finally the response contains a list
|
which are only valid for signing events. Finally the response contains a list
|
||||||
|
@ -510,7 +510,7 @@ To backfill events on a given context::
|
||||||
|
|
||||||
Retrieves a sliding-window history of previous PDUs that occurred on the given
|
Retrieves a sliding-window history of previous PDUs that occurred on the given
|
||||||
context. Starting from the PDU ID(s) given in the "v" argument, the PDUs that
|
context. Starting from the PDU ID(s) given in the "v" argument, the PDUs that
|
||||||
preceeded it are retrieved, up to a total number given by the "limit" argument.
|
preceded it are retrieved, up to a total number given by the "limit" argument.
|
||||||
These are then returned in a new Transaction containing all of the PDUs.
|
These are then returned in a new Transaction containing all of the PDUs.
|
||||||
|
|
||||||
|
|
||||||
|
@ -554,9 +554,7 @@ Every HTTP request made by a homeserver is authenticated using public key
|
||||||
digital signatures. The request method, target and body are signed by wrapping
|
digital signatures. The request method, target and body are signed by wrapping
|
||||||
them in a JSON object and signing it using the JSON signing algorithm. The
|
them in a JSON object and signing it using the JSON signing algorithm. The
|
||||||
resulting signatures are added as an Authorization header with an auth scheme
|
resulting signatures are added as an Authorization header with an auth scheme
|
||||||
of X-Matrix.
|
of X-Matrix. Note that the target field should include the full path starting with
|
||||||
|
|
||||||
Note that the target field should include the full path starting with
|
|
||||||
``/_matrix/...``, including the ``?`` and any query parameters if present, but
|
``/_matrix/...``, including the ``?`` and any query parameters if present, but
|
||||||
should not include the leading ``https:``, nor the destination server's
|
should not include the leading ``https:``, nor the destination server's
|
||||||
hostname.
|
hostname.
|
||||||
|
@ -656,12 +654,12 @@ State Conflict Resolution
|
||||||
- How does this work with deleting current state
|
- How does this work with deleting current state
|
||||||
- How do we reject invalid federation traffic?
|
- How do we reject invalid federation traffic?
|
||||||
|
|
||||||
[[TODO(paul): At this point we should probably have a long description of how
|
[[TODO(paul): At this point we should probably have a long description of how
|
||||||
State management works, with descriptions of clobbering rules, power levels, etc
|
State management works, with descriptions of clobbering rules, power levels, etc
|
||||||
etc... But some of that detail is rather up-in-the-air, on the whiteboard, and
|
etc... But some of that detail is rather up-in-the-air, on the whiteboard, and
|
||||||
so on. This part needs refining. And writing in its own document as the details
|
so on. This part needs refining. And writing in its own document as the details
|
||||||
relate to the server/system as a whole, not specifically to server-server
|
relate to the server/system as a whole, not specifically to server-server
|
||||||
federation.]]
|
federation.]]
|
||||||
|
|
||||||
Presence
|
Presence
|
||||||
--------
|
--------
|
||||||
|
@ -677,8 +675,8 @@ Performing a presence update and poll subscription request::
|
||||||
Each should be an object with the following keys:
|
Each should be an object with the following keys:
|
||||||
user_id: string containing a User ID
|
user_id: string containing a User ID
|
||||||
presence: "offline"|"unavailable"|"online"|"free_for_chat"
|
presence: "offline"|"unavailable"|"online"|"free_for_chat"
|
||||||
status_msg: (optional) string of freeform text
|
status_msg: (optional) string of free-form text
|
||||||
last_active_ago: miliseconds since the last activity by the user
|
last_active_ago: milliseconds since the last activity by the user
|
||||||
|
|
||||||
poll: (optional): list of strings giving User IDs
|
poll: (optional): list of strings giving User IDs
|
||||||
|
|
||||||
|
@ -696,7 +694,7 @@ removed until explicitly requested by a later ``unpoll``.
|
||||||
On receipt of a message containing a non-empty ``poll`` list, the receiving
|
On receipt of a message containing a non-empty ``poll`` list, the receiving
|
||||||
server should immediately send the sending server a presence update EDU of its
|
server should immediately send the sending server a presence update EDU of its
|
||||||
own, containing in a ``push`` list the current state of every user that was in
|
own, containing in a ``push`` list the current state of every user that was in
|
||||||
the orginal EDU's ``poll`` list.
|
the original EDU's ``poll`` list.
|
||||||
|
|
||||||
Sending a presence invite::
|
Sending a presence invite::
|
||||||
|
|
||||||
|
@ -721,7 +719,7 @@ Rejecting a presence invite::
|
||||||
Content keys - as for m.presence_invite
|
Content keys - as for m.presence_invite
|
||||||
|
|
||||||
.. TODO-doc
|
.. TODO-doc
|
||||||
- Explain the timing-based roundtrip reduction mechanism for presence
|
- Explain the timing-based round-trip reduction mechanism for presence
|
||||||
messages
|
messages
|
||||||
- Explain the zero-byte presence inference logic
|
- Explain the zero-byte presence inference logic
|
||||||
See also: docs/client-server/model/presence
|
See also: docs/client-server/model/presence
|
||||||
|
@ -742,8 +740,8 @@ Querying profile information::
|
||||||
field: (optional) string giving a field name
|
field: (optional) string giving a field name
|
||||||
|
|
||||||
Returns: JSON object containing the following keys:
|
Returns: JSON object containing the following keys:
|
||||||
displayname: string of freeform text
|
displayname: string of free-form text
|
||||||
avatar_url: string containing an http-scheme URL
|
avatar_url: string containing an HTTP-scheme URL
|
||||||
|
|
||||||
If the query contains the optional ``field`` key, it should give the name of a
|
If the query contains the optional ``field`` key, it should give the name of a
|
||||||
result field. If such is present, then the result should contain only a field
|
result field. If such is present, then the result should contain only a field
|
||||||
|
@ -769,3 +767,4 @@ Querying directory information::
|
||||||
The list of join candidates is a list of server names that are likely to hold
|
The list of join candidates is a list of server names that are likely to hold
|
||||||
the given room; these are servers that the requesting server may wish to try
|
the given room; these are servers that the requesting server may wish to try
|
||||||
joining with. This list may or may not include the server answering the query.
|
joining with. This list may or may not include the server answering the query.
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ using this representation.
|
||||||
value,
|
value,
|
||||||
# Encode code-points outside of ASCII as UTF-8 rather than \u escapes
|
# Encode code-points outside of ASCII as UTF-8 rather than \u escapes
|
||||||
ensure_ascii=False,
|
ensure_ascii=False,
|
||||||
# Remove unecessary white space.
|
# Remove unnecessary white space.
|
||||||
separators=(',',':'),
|
separators=(',',':'),
|
||||||
# Sort the keys of dictionaries.
|
# Sort the keys of dictionaries.
|
||||||
sort_keys=True,
|
sort_keys=True,
|
||||||
|
|
|
@ -39,10 +39,10 @@ thumbnailing method::
|
||||||
|
|
||||||
<thumbnail>
|
<thumbnail>
|
||||||
|
|
||||||
The thumbnail methods are "crop" and "scale". "scale" trys to return an
|
The thumbnail methods are "crop" and "scale". "scale" tries to return an
|
||||||
image where either the width or the height is smaller than the requested
|
image where either the width or the height is smaller than the requested
|
||||||
size. The client should then scale and letterbox the image if it needs to
|
size. The client should then scale and letterbox the image if it needs to
|
||||||
fit within a given rectangle. "crop" trys to return an image where the
|
fit within a given rectangle. "crop" tries to return an image where the
|
||||||
width and height are close to the requested size and the aspect matches
|
width and height are close to the requested size and the aspect matches
|
||||||
the requested size. The client should scale the image if it needs to fit
|
the requested size. The client should scale the image if it needs to fit
|
||||||
within a given rectangle.
|
within a given rectangle.
|
||||||
|
@ -53,8 +53,8 @@ the content. Homeservers may return thumbnails of a different size to that
|
||||||
requested. However homeservers should provide exact matches where reasonable.
|
requested. However homeservers should provide exact matches where reasonable.
|
||||||
Homeservers must never upscale images.
|
Homeservers must never upscale images.
|
||||||
|
|
||||||
Security
|
Security considerations
|
||||||
--------
|
-----------------------
|
||||||
|
|
||||||
Clients may try to upload very large files. Homeservers should not store files
|
Clients may try to upload very large files. Homeservers should not store files
|
||||||
that are too large and should not serve them to clients.
|
that are too large and should not serve them to clients.
|
||||||
|
|
|
@ -70,7 +70,7 @@ Room Rules
|
||||||
Sender
|
Sender
|
||||||
These rules configure notification behaviour for messages from a specific,
|
These rules configure notification behaviour for messages from a specific,
|
||||||
named Matrix user ID. The rule_id of Sender rules is always the Matrix user
|
named Matrix user ID. The rule_id of Sender rules is always the Matrix user
|
||||||
ID of the user whose messages theyt apply to.
|
ID of the user whose messages they'd apply to.
|
||||||
Underride
|
Underride
|
||||||
These are identical to override rules, but have a lower priority than content,
|
These are identical to override rules, but have a lower priority than content,
|
||||||
room and sender rules.
|
room and sender rules.
|
||||||
|
@ -112,7 +112,7 @@ In addition, all rules may be enabled or disabled. Disabled rules never match.
|
||||||
|
|
||||||
If no rules match an event, the Home Server should not notify for the message
|
If no rules match an event, the Home Server should not notify for the message
|
||||||
(that is to say, the default action is "dont-notify"). Events that the user sent
|
(that is to say, the default action is "dont-notify"). Events that the user sent
|
||||||
themself are never alerted for.
|
themselves are never alerted for.
|
||||||
|
|
||||||
Predefined Rules
|
Predefined Rules
|
||||||
----------------
|
----------------
|
||||||
|
@ -128,7 +128,7 @@ with these IDs, their semantics should match those given below:
|
||||||
|
|
||||||
{
|
{
|
||||||
"rule_id": ".m.rule.contains_user_name"
|
"rule_id": ".m.rule.contains_user_name"
|
||||||
"pattern": "[the lcoal part of the user's Matrix ID]",
|
"pattern": "[the local part of the user's Matrix ID]",
|
||||||
"actions": [
|
"actions": [
|
||||||
"notify",
|
"notify",
|
||||||
{
|
{
|
||||||
|
@ -220,7 +220,7 @@ with these IDs, their semantics should match those given below:
|
||||||
Push Rules: Actions:
|
Push Rules: Actions:
|
||||||
--------------------
|
--------------------
|
||||||
All rules have an associated list of 'actions'. An action affects if and how a
|
All rules have an associated list of 'actions'. An action affects if and how a
|
||||||
notification is delievered for a matching event. This standard defines the
|
notification is delivered for a matching event. This standard defines the
|
||||||
following actions, although if Home servers wish to support more, they are free
|
following actions, although if Home servers wish to support more, they are free
|
||||||
to do so:
|
to do so:
|
||||||
|
|
||||||
|
@ -241,11 +241,11 @@ set_tweak
|
||||||
|
|
||||||
Actions that have no parameters are represented as a string. Otherwise, they are
|
Actions that have no parameters are represented as a string. Otherwise, they are
|
||||||
represented as a dictionary with a key equal to their name and other keys as
|
represented as a dictionary with a key equal to their name and other keys as
|
||||||
their parameters, eg. { "set_tweak": "sound", "value": "default" }
|
their parameters, e.g. ``{ "set_tweak": "sound", "value": "default" }``
|
||||||
|
|
||||||
Push Rules: Actions: Tweaks
|
Push Rules: Actions: Tweaks
|
||||||
---------------------------
|
---------------------------
|
||||||
The 'set_tweak' key action is used to add an entry to the 'tweaks' dictionary
|
The ``set_tweak`` key action is used to add an entry to the 'tweaks' dictionary
|
||||||
that is sent in the notification poke. The following tweaks are defined:
|
that is sent in the notification poke. The following tweaks are defined:
|
||||||
|
|
||||||
sound
|
sound
|
||||||
|
@ -275,7 +275,7 @@ do so:
|
||||||
|
|
||||||
event_match
|
event_match
|
||||||
This is a glob pattern match on a field of the event. Parameters:
|
This is a glob pattern match on a field of the event. Parameters:
|
||||||
* 'key': The dot-separated field of the event to match, eg. content.body
|
* 'key': The dot-separated field of the event to match, e.g. content.body
|
||||||
* 'pattern': The glob-style pattern to match against. Patterns with no
|
* 'pattern': The glob-style pattern to match against. Patterns with no
|
||||||
special glob characters should be treated as having asterisks
|
special glob characters should be treated as having asterisks
|
||||||
prepended and appended when testing the condition.
|
prepended and appended when testing the condition.
|
||||||
|
@ -295,7 +295,7 @@ room_member_count
|
||||||
'>=' or '<='. A prefix of '<' matches rooms where the member count is
|
'>=' or '<='. A prefix of '<' matches rooms where the member count is
|
||||||
strictly less than the given number and so forth. If no prefix is present,
|
strictly less than the given number and so forth. If no prefix is present,
|
||||||
this matches rooms where the member count is exactly equal to the given
|
this matches rooms where the member count is exactly equal to the given
|
||||||
number (ie. the same as '==').
|
number (i.e. the same as '==').
|
||||||
|
|
||||||
Room, Sender, User and Content rules do not have conditions in the same way,
|
Room, Sender, User and Content rules do not have conditions in the same way,
|
||||||
but instead have predefined conditions, the behaviour of which can be configured
|
but instead have predefined conditions, the behaviour of which can be configured
|
||||||
|
@ -314,7 +314,7 @@ scope
|
||||||
Either 'global' or 'device/<profile_tag>' to specify global rules or
|
Either 'global' or 'device/<profile_tag>' to specify global rules or
|
||||||
device rules for the given profile_tag.
|
device rules for the given profile_tag.
|
||||||
kind
|
kind
|
||||||
The kind of rule, ie. 'override', 'underride', 'sender', 'room', 'content'.
|
The kind of rule, i.e. 'override', 'underride', 'sender', 'room', 'content'.
|
||||||
rule_id
|
rule_id
|
||||||
The identifier for the rule.
|
The identifier for the rule.
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ after
|
||||||
rule.
|
rule.
|
||||||
|
|
||||||
All requests to the push rules API also require an access_token as a query
|
All requests to the push rules API also require an access_token as a query
|
||||||
paraemter.
|
parameter.
|
||||||
|
|
||||||
The content of the PUT request is a JSON object with a list of actions under the
|
The content of the PUT request is a JSON object with a list of actions under the
|
||||||
'actions' key and either conditions (under the 'conditions' key) or the
|
'actions' key and either conditions (under the 'conditions' key) or the
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue