Actually we're going with "identity server" afterall
This commit is contained in:
parent
ec248b436f
commit
7ac76fa27c
32 changed files with 152 additions and 152 deletions
|
@ -35,7 +35,7 @@ paths:
|
|||
associated with the user's account.
|
||||
|
||||
This is *not* the same as the list of third party identifiers bound to
|
||||
the user's Matrix ID in identity services.
|
||||
the user's Matrix ID in identity servers.
|
||||
|
||||
Identifiers in this list may be used by the homeserver as, for example,
|
||||
identifiers that it will accept to reset the user's account password.
|
||||
|
@ -77,7 +77,7 @@ paths:
|
|||
format: int64
|
||||
description: |-
|
||||
The timestamp, in milliseconds, when the identifier was
|
||||
validated by the identity service.
|
||||
validated by the identity server.
|
||||
added_at:
|
||||
type: integer
|
||||
format: int64
|
||||
|
@ -106,13 +106,13 @@ paths:
|
|||
properties:
|
||||
client_secret:
|
||||
type: string
|
||||
description: The client secret used in the session with the identity service.
|
||||
description: The client secret used in the session with the identity server.
|
||||
id_server:
|
||||
type: string
|
||||
description: The identity service to use.
|
||||
description: The identity server to use.
|
||||
sid:
|
||||
type: string
|
||||
description: The session identifier given by the identity service.
|
||||
description: The session identifier given by the identity server.
|
||||
required: ["client_secret", "id_server", "sid"]
|
||||
bind:
|
||||
type: boolean
|
||||
|
@ -138,11 +138,11 @@ paths:
|
|||
schema:
|
||||
type: object
|
||||
403:
|
||||
description: The credentials could not be verified with the identity service.
|
||||
description: The credentials could not be verified with the identity server.
|
||||
examples:
|
||||
application/json: {
|
||||
"errcode": "M_THREEPID_AUTH_FAILED",
|
||||
"error": "The third party credentials could not be verified by the identity service."
|
||||
"error": "The third party credentials could not be verified by the identity server."
|
||||
}
|
||||
schema:
|
||||
"$ref": "definitions/errors/error.yaml"
|
||||
|
@ -153,7 +153,7 @@ paths:
|
|||
summary: Deletes a third party identifier from the user's account
|
||||
description: |-
|
||||
Removes a third party identifier from the user's account. This might not
|
||||
cause an unbind of the identifier from the identity service.
|
||||
cause an unbind of the identifier from the identity server.
|
||||
operationId: delete3pidFromAccount
|
||||
security:
|
||||
- accessToken: []
|
||||
|
@ -187,7 +187,7 @@ paths:
|
|||
post:
|
||||
summary: Begins the validation process for an email address for association with the user's account.
|
||||
description: |-
|
||||
Proxies the identity service API ``validate/email/requestToken``, but
|
||||
Proxies the identity server API ``validate/email/requestToken``, but
|
||||
first checks that the given email address is **not** already associated
|
||||
with an account on this homeserver. This API should be used to request
|
||||
validation tokens when adding an email address to an account. This API's
|
||||
|
@ -206,7 +206,7 @@ paths:
|
|||
id_server:
|
||||
type: string
|
||||
description: |-
|
||||
The hostname of the identity service to communicate with. May
|
||||
The hostname of the identity server to communicate with. May
|
||||
optionally include a port.
|
||||
example: "id.example.com"
|
||||
required: ['id_server']
|
||||
|
@ -241,7 +241,7 @@ paths:
|
|||
post:
|
||||
summary: Begins the validation process for a phone number for association with the user's account.
|
||||
description: |-
|
||||
Proxies the identity service API ``validate/msisdn/requestToken``, but
|
||||
Proxies the identity server API ``validate/msisdn/requestToken``, but
|
||||
first checks that the given phone number is **not** already associated
|
||||
with an account on this homeserver. This API should be used to request
|
||||
validation tokens when adding a phone number to an account. This API's
|
||||
|
@ -260,7 +260,7 @@ paths:
|
|||
id_server:
|
||||
type: string
|
||||
description: |-
|
||||
The hostname of the identity service to communicate with. May
|
||||
The hostname of the identity server to communicate with. May
|
||||
optionally include a port.
|
||||
example: "id.example.com"
|
||||
required: ['id_server']
|
||||
|
|
|
@ -138,10 +138,10 @@ paths:
|
|||
properties:
|
||||
id_server:
|
||||
type: string
|
||||
description: The hostname+port of the identity service which should be used for third party identifier lookups.
|
||||
description: The hostname+port of the identity server which should be used for third party identifier lookups.
|
||||
medium:
|
||||
type: string
|
||||
# TODO: Link to identity service spec when it eixsts
|
||||
# TODO: Link to identity server spec when it eixsts
|
||||
description: The kind of address being passed in the address field, for example ``email``.
|
||||
address:
|
||||
type: string
|
||||
|
|
|
@ -11,14 +11,14 @@
|
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
title: Identity Service Information
|
||||
title: Identity Server Information
|
||||
description: |-
|
||||
Used by clients to discover identity service information.
|
||||
Used by clients to discover identity server information.
|
||||
type: object
|
||||
properties:
|
||||
base_url:
|
||||
type: string
|
||||
description: The base URL for the identity service for client-server connections.
|
||||
description: The base URL for the identity server for client-server connections.
|
||||
example: https://identity.example.com
|
||||
required:
|
||||
- base_url
|
||||
|
|
|
@ -92,7 +92,7 @@ paths:
|
|||
type: boolean
|
||||
description: |-
|
||||
If true, the server binds the email used for authentication to
|
||||
the Matrix ID with the identity service.
|
||||
the Matrix ID with the identity server.
|
||||
example: false
|
||||
username:
|
||||
type: string
|
||||
|
@ -204,9 +204,9 @@ paths:
|
|||
post:
|
||||
summary: Begins the validation process for an email to be used during registration.
|
||||
description: |-
|
||||
Proxies the identity service API ``validate/email/requestToken``, but
|
||||
Proxies the identity server API ``validate/email/requestToken``, but
|
||||
first checks that the given email address is not already associated
|
||||
with an account on this homeserver. See the identity service API for
|
||||
with an account on this homeserver. See the identity server API for
|
||||
further information.
|
||||
operationId: requestTokenToRegisterEmail
|
||||
parameters:
|
||||
|
@ -221,7 +221,7 @@ paths:
|
|||
id_server:
|
||||
type: string
|
||||
description: |-
|
||||
The hostname of the identity service to communicate with. May
|
||||
The hostname of the identity server to communicate with. May
|
||||
optionally include a port.
|
||||
example: "id.example.com"
|
||||
required: ['id_server']
|
||||
|
@ -251,7 +251,7 @@ paths:
|
|||
instead send an email to the user with instructions on how to reset their password.
|
||||
This prevents malicious parties from being able to determine if a given email address
|
||||
has an account on the homeserver in question.
|
||||
* ``M_SERVER_NOT_TRUSTED`` : The ``id_server`` parameter refers to an identity service
|
||||
* ``M_SERVER_NOT_TRUSTED`` : The ``id_server`` parameter refers to an identity server
|
||||
that is not trusted by this homeserver.
|
||||
examples:
|
||||
application/json: {
|
||||
|
@ -264,9 +264,9 @@ paths:
|
|||
post:
|
||||
summary: Requests a validation token be sent to the given phone number for the purpose of registering an account
|
||||
description: |-
|
||||
Proxies the identity service API ``validate/msisdn/requestToken``, but
|
||||
Proxies the identity server API ``validate/msisdn/requestToken``, but
|
||||
first checks that the given phone number is not already associated
|
||||
with an account on this homeserver. See the identity service API for
|
||||
with an account on this homeserver. See the identity server API for
|
||||
further information.
|
||||
operationId: requestTokenToRegisterMSISDN
|
||||
parameters:
|
||||
|
@ -281,7 +281,7 @@ paths:
|
|||
id_server:
|
||||
type: string
|
||||
description: |-
|
||||
The hostname of the identity service to communicate with. May
|
||||
The hostname of the identity server to communicate with. May
|
||||
optionally include a port.
|
||||
example: "id.example.com"
|
||||
required: ['id_server']
|
||||
|
@ -311,7 +311,7 @@ paths:
|
|||
instead send an SMS message to the user with instructions on how to reset their password.
|
||||
This prevents malicious parties from being able to determine if a given phone number
|
||||
has an account on the homeserver in question.
|
||||
* ``M_SERVER_NOT_TRUSTED`` : The ``id_server`` parameter refers to an identity service
|
||||
* ``M_SERVER_NOT_TRUSTED`` : The ``id_server`` parameter refers to an identity server
|
||||
that is not trusted by this homeserver.
|
||||
examples:
|
||||
application/json: {
|
||||
|
@ -373,7 +373,7 @@ paths:
|
|||
post:
|
||||
summary: Requests a validation token be sent to the given email address for the purpose of resetting a user's password
|
||||
description: |-
|
||||
Proxies the identity service API ``validate/email/requestToken``, but
|
||||
Proxies the identity server API ``validate/email/requestToken``, but
|
||||
first checks that the given email address **is** associated with an account
|
||||
on this homeserver. This API should be used to request
|
||||
validation tokens when authenticating for the
|
||||
|
@ -400,7 +400,7 @@ paths:
|
|||
id_server:
|
||||
type: string
|
||||
description: |-
|
||||
The hostname of the identity service to communicate with. May
|
||||
The hostname of the identity server to communicate with. May
|
||||
optionally include a port.
|
||||
example: "id.example.com"
|
||||
required: ['id_server']
|
||||
|
@ -435,7 +435,7 @@ paths:
|
|||
post:
|
||||
summary: Requests a validation token be sent to the given phone number for the purpose of resetting a user's password.
|
||||
description: |-
|
||||
Proxies the identity service API ``validate/msisdn/requestToken``, but
|
||||
Proxies the identity server API ``validate/msisdn/requestToken``, but
|
||||
first checks that the given phone number **is** associated with an account
|
||||
on this homeserver. This API should be used to request
|
||||
validation tokens when authenticating for the
|
||||
|
@ -462,7 +462,7 @@ paths:
|
|||
id_server:
|
||||
type: string
|
||||
description: |-
|
||||
The hostname of the identity service to communicate with. May
|
||||
The hostname of the identity server to communicate with. May
|
||||
optionally include a port.
|
||||
example: "id.example.com"
|
||||
required: ['id_server']
|
||||
|
|
|
@ -36,7 +36,7 @@ paths:
|
|||
*Note that there are two forms of this API, which are documented separately.
|
||||
This version of the API does not require that the inviter know the Matrix
|
||||
identifier of the invitee, and instead relies on third party identifiers.
|
||||
The homeserver uses an identity service to perform the mapping from
|
||||
The homeserver uses an identity server to perform the mapping from
|
||||
third party identifier to a Matrix identifier. The other is documented in the*
|
||||
`joining rooms section`_.
|
||||
|
||||
|
@ -47,31 +47,31 @@ paths:
|
|||
Only users currently in a particular room can invite other users to
|
||||
join that room.
|
||||
|
||||
If the identity service did know the Matrix user identifier for the
|
||||
If the identity server did know the Matrix user identifier for the
|
||||
third party identifier, the homeserver will append a ``m.room.member``
|
||||
event to the room.
|
||||
|
||||
If the identity service does not know a Matrix user identifier for the
|
||||
If the identity server does not know a Matrix user identifier for the
|
||||
passed third party identifier, the homeserver will issue an invitation
|
||||
which can be accepted upon providing proof of ownership of the third
|
||||
party identifier. This is achieved by the identity service generating a
|
||||
party identifier. This is achieved by the identity server generating a
|
||||
token, which it gives to the inviting homeserver. The homeserver will
|
||||
add an ``m.room.third_party_invite`` event into the graph for the room,
|
||||
containing that token.
|
||||
|
||||
When the invitee binds the invited third party identifier to a Matrix
|
||||
user ID, the identity service will give the user a list of pending
|
||||
user ID, the identity server will give the user a list of pending
|
||||
invitations, each containing:
|
||||
|
||||
- The room ID to which they were invited
|
||||
|
||||
- The token given to the homeserver
|
||||
|
||||
- A signature of the token, signed with the identity service's private key
|
||||
- A signature of the token, signed with the identity server's private key
|
||||
|
||||
- The matrix user ID who invited them to the room
|
||||
|
||||
If a token is requested from the identity service, the homeserver will
|
||||
If a token is requested from the identity server, the homeserver will
|
||||
append a ``m.room.third_party_invite`` event to the room.
|
||||
|
||||
.. _joining rooms section: `invite-by-user-id-endpoint`_
|
||||
|
@ -98,10 +98,10 @@ paths:
|
|||
properties:
|
||||
id_server:
|
||||
type: string
|
||||
description: The hostname+port of the identity service which should be used for third party identifier lookups.
|
||||
description: The hostname+port of the identity server which should be used for third party identifier lookups.
|
||||
medium:
|
||||
type: string
|
||||
# TODO: Link to identity service spec when it eixsts
|
||||
# TODO: Link to identity server spec when it eixsts
|
||||
description: The kind of address being passed in the address field, for example ``email``.
|
||||
address:
|
||||
type: string
|
||||
|
|
|
@ -54,7 +54,7 @@ paths:
|
|||
description: Information about the homeserver to connect to.
|
||||
"$ref": "definitions/wellknown/homeserver.yaml"
|
||||
m.identity_server:
|
||||
description: Optional. Information about the identity service to connect to.
|
||||
description: Optional. Information about the identity server to connect to.
|
||||
"$ref": "definitions/wellknown/identity_server.yaml"
|
||||
additionalProperties:
|
||||
description: Application-dependent keys using Java package naming convention.
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
# limitations under the License.
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: "Matrix Identity Service Establishing Associations API"
|
||||
title: "Matrix Identity Server Establishing Associations API"
|
||||
version: "1.0.0"
|
||||
host: localhost:8090
|
||||
schemes:
|
||||
|
@ -166,7 +166,7 @@ paths:
|
|||
signatures:
|
||||
type: object
|
||||
description: |-
|
||||
The signatures of the verifying identity services which show that the
|
||||
The signatures of the verifying identity servers which show that the
|
||||
association should be trusted, if you trust the verifying identity
|
||||
services.
|
||||
$ref: "../../schemas/server-signatures.yaml"
|
||||
|
|
|
@ -33,7 +33,7 @@ properties:
|
|||
is a number greater than the most recent one which it has seen,
|
||||
scoped to that ``email`` + ``client_secret`` pair. This is to
|
||||
avoid repeatedly sending the same email in the case of request
|
||||
retries between the POSTing user and the identity service.
|
||||
retries between the POSTing user and the identity server.
|
||||
The client should increment this value if they desire a new
|
||||
email (e.g. a reminder) to be sent.
|
||||
example: 1
|
||||
|
|
|
@ -41,7 +41,7 @@ properties:
|
|||
scoped to that ``country`` + ``phone_number`` + ``client_secret``
|
||||
triple. This is to avoid repeatedly sending the same SMS in
|
||||
the case of request retries between the POSTing user and the
|
||||
identity service. The client should increment this value if
|
||||
identity server. The client should increment this value if
|
||||
they desire a new SMS (e.g. a reminder) to be sent.
|
||||
example: 1
|
||||
next_link:
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
# limitations under the License.
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: "Matrix Identity Service Email Associations API"
|
||||
title: "Matrix Identity Server Email Associations API"
|
||||
version: "1.0.0"
|
||||
host: localhost:8090
|
||||
schemes:
|
||||
|
@ -30,8 +30,8 @@ paths:
|
|||
description: |-
|
||||
Create a session for validating an email address.
|
||||
|
||||
The identity service will send an email containing a token. If that
|
||||
token is presented to the identity service in the future, it indicates
|
||||
The identity server will send an email containing a token. If that
|
||||
token is presented to the identity server in the future, it indicates
|
||||
that that user was able to read the email for that email address, and
|
||||
so we validate ownership of the email address.
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
# limitations under the License.
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: "Matrix Identity Service Ephemeral Invitation Signing API"
|
||||
title: "Matrix Identity Server Ephemeral Invitation Signing API"
|
||||
version: "1.0.0"
|
||||
host: localhost:8090
|
||||
schemes:
|
||||
|
@ -30,7 +30,7 @@ paths:
|
|||
description: |-
|
||||
Sign invitation details.
|
||||
|
||||
The identity service will look up ``token`` which was stored in a call
|
||||
The identity server will look up ``token`` which was stored in a call
|
||||
to ``store-invite``, and fetch the sender of the invite.
|
||||
operationId: blindlySignStuff
|
||||
parameters:
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
# limitations under the License.
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: "Matrix Identity Service Lookup API"
|
||||
title: "Matrix Identity Server Lookup API"
|
||||
version: "1.0.0"
|
||||
host: localhost:8090
|
||||
schemes:
|
||||
|
@ -86,7 +86,7 @@ paths:
|
|||
description: The unix timestamp at which the association was verified.
|
||||
signatures:
|
||||
type: object
|
||||
description: The signatures of the verifying identity services which show that the association should be trusted, if you trust the verifying identity services.
|
||||
description: The signatures of the verifying identity servers which show that the association should be trusted, if you trust the verifying identity servers.
|
||||
$ref: "../../schemas/server-signatures.yaml"
|
||||
required:
|
||||
- address
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
# limitations under the License.
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: "Matrix Identity Service Phone Number Associations API"
|
||||
title: "Matrix Identity Server Phone Number Associations API"
|
||||
version: "1.0.0"
|
||||
host: localhost:8090
|
||||
schemes:
|
||||
|
@ -30,8 +30,8 @@ paths:
|
|||
description: |-
|
||||
Create a session for validating a phone number.
|
||||
|
||||
The identity service will send an SMS message containing a token. If
|
||||
that token is presented to the identity service in the future, it
|
||||
The identity server will send an SMS message containing a token. If
|
||||
that token is presented to the identity server in the future, it
|
||||
indicates that that user was able to read the SMS for that phone
|
||||
number, and so we validate ownership of the phone number.
|
||||
|
||||
|
@ -62,7 +62,7 @@ paths:
|
|||
|
||||
- ``M_INVALID_ADDRESS``: The phone number provided was invalid.
|
||||
- ``M_SEND_ERROR``: The validation SMS could not be sent.
|
||||
- ``M_DESTINATION_REJECTED``: The identity service cannot deliver an
|
||||
- ``M_DESTINATION_REJECTED``: The identity server cannot deliver an
|
||||
SMS to the provided country or region.
|
||||
examples:
|
||||
application/json: {
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
swagger: "2.0"
|
||||
info:
|
||||
title: "Matrix Identity Service Ping API"
|
||||
title: "Matrix Identity Server Ping API"
|
||||
version: "1.0.0"
|
||||
host: localhost:8090
|
||||
schemes:
|
||||
|
@ -26,19 +26,19 @@ produces:
|
|||
paths:
|
||||
"/api/v1":
|
||||
get:
|
||||
summary: Checks that an identity service is available at this API endpoint.
|
||||
summary: Checks that an identity server is available at this API endpoint.
|
||||
description: |-
|
||||
Checks that an identity service is available at this API endpoint.
|
||||
Checks that an identity server is available at this API endpoint.
|
||||
|
||||
To discover that an identity service is available at a specific URL,
|
||||
To discover that an identity server is available at a specific URL,
|
||||
this endpoint can be queried and will return an empty object.
|
||||
|
||||
This is primarly used for auto-discovery and health check purposes
|
||||
by entities acting as a client for the identity service.
|
||||
by entities acting as a client for the identity server.
|
||||
operationId: ping
|
||||
responses:
|
||||
200:
|
||||
description: An identity service is ready to serve requests.
|
||||
description: An identity server is ready to serve requests.
|
||||
examples:
|
||||
application/json: {}
|
||||
schema:
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
# limitations under the License.
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: "Matrix Identity Service Public Key API"
|
||||
title: "Matrix Identity Server Public Key API"
|
||||
version: "1.0.0"
|
||||
host: localhost:8090
|
||||
schemes:
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
# limitations under the License.
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: "Matrix Identity Service Store Invitations API"
|
||||
title: "Matrix Identity Server Store Invitations API"
|
||||
version: "1.0.0"
|
||||
host: localhost:8090
|
||||
schemes:
|
||||
|
|
|
@ -200,9 +200,9 @@ paths:
|
|||
Notifies the server that a third party identifier has been bound to one
|
||||
of its users.
|
||||
description: |-
|
||||
Used by identity services to notify the homeserver that one of its users
|
||||
Used by identity servers to notify the homeserver that one of its users
|
||||
has bound a third party identifier successfully, including any pending
|
||||
room invites the identity service has been made aware of.
|
||||
room invites the identity server has been made aware of.
|
||||
operationId: onBindThirdPartyIdentifier
|
||||
parameters:
|
||||
- in: body
|
||||
|
@ -262,9 +262,9 @@ paths:
|
|||
# also make sure it isn't lying about anything, like the key version
|
||||
signed:
|
||||
type: object
|
||||
title: Identity Service Signatures
|
||||
title: Identity Server Signatures
|
||||
description: |-
|
||||
Signature from the identity service using a long-term private
|
||||
Signature from the identity server using a long-term private
|
||||
key.
|
||||
properties:
|
||||
mxid:
|
||||
|
@ -280,14 +280,14 @@ paths:
|
|||
example: "Hello World"
|
||||
signatures:
|
||||
type: object
|
||||
title: Identity Service Signature
|
||||
title: Identity Server Signature
|
||||
description: |-
|
||||
The signature from the identity service. The ``string`` key
|
||||
is the identity service's domain name, such as vector.im
|
||||
The signature from the identity server. The ``string`` key
|
||||
is the identity server's domain name, such as vector.im
|
||||
additionalProperties:
|
||||
type: object
|
||||
title: Identity Service Domain Signature
|
||||
description: The signature for the identity service.
|
||||
title: Identity Server Domain Signature
|
||||
description: The signature for the identity server.
|
||||
properties:
|
||||
"ed25519:0":
|
||||
type: string
|
||||
|
|
|
@ -76,7 +76,7 @@ r0.3.0
|
|||
- Spec clarifications:
|
||||
|
||||
- Add endpoints and logic for invites and third-party invites to the federation
|
||||
spec and update the JSON of the request sent by the identity service upon 3PID
|
||||
spec and update the JSON of the request sent by the identity server upon 3PID
|
||||
binding
|
||||
(`#997 <https://github.com/matrix-org/matrix-doc/pull/997>`_)
|
||||
- Fix "membership" property on third-party invite upgrade example
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
[tool.towncrier]
|
||||
filename = "../identity_service.rst"
|
||||
filename = "../identity_server.rst"
|
||||
directory = "newsfragments"
|
||||
issue_format = "`#{issue} <https://github.com/matrix-org/matrix-doc/issues/{issue}>`_"
|
||||
title_format = "{version}"
|
||||
|
||||
|
||||
[[tool.towncrier.type]]
|
||||
directory = "breaking"
|
||||
name = "Breaking Changes"
|
||||
showcontent = true
|
||||
|
||||
|
||||
[[tool.towncrier.type]]
|
||||
directory = "deprecation"
|
||||
name = "Deprecations"
|
||||
showcontent = true
|
||||
|
||||
|
||||
[[tool.towncrier.type]]
|
||||
directory = "new"
|
||||
name = "New Endpoints"
|
||||
showcontent = true
|
||||
|
||||
|
||||
[[tool.towncrier.type]]
|
||||
directory = "feature"
|
||||
name = "Backwards Compatible Changes"
|
||||
showcontent = true
|
||||
|
||||
|
||||
[[tool.towncrier.type]]
|
||||
directory = "clarification"
|
||||
name = "Spec Clarifications"
|
|
@ -69,10 +69,10 @@ have English as their first language.
|
|||
Prefer British English (colour, -ise) to American English.
|
||||
|
||||
The word "homeserver" is spelt thus (rather than "home server", "Homeserver",
|
||||
or (argh) "Home Server"). However, an identity service is two words.
|
||||
or (argh) "Home Server"). However, an identity server is two words.
|
||||
|
||||
.. Rationale: "homeserver" distinguishes from a "home server" which is a server
|
||||
you have at home. "identity service" is clear, whereas "identityservice" is
|
||||
you have at home. "identity server" is clear, whereas "identityservice" is
|
||||
horrible.
|
||||
|
||||
Lists should:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# How to release a specification
|
||||
|
||||
There are several specifications that belong to matrix, such as the client-server
|
||||
specification, server-server specification, and identity service specification. Each
|
||||
specification, server-server specification, and identity server specification. Each
|
||||
of these gets released independently of each other with their own version numbers.
|
||||
|
||||
Once a specification is ready for release, a branch should be created to track the
|
||||
|
|
|
@ -527,7 +527,7 @@ if __name__ == '__main__':
|
|||
)
|
||||
parser.add_argument(
|
||||
"--identity_release", "-i", action="store", default="unstable",
|
||||
help="The identity service release tag to generate, e.g. r1.2"
|
||||
help="The identity server release tag to generate, e.g. r1.2"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--list_targets", action="store_true",
|
||||
|
@ -547,7 +547,7 @@ if __name__ == '__main__':
|
|||
|
||||
substitutions = {
|
||||
"%CLIENT_RELEASE_LABEL%": args.client_release,
|
||||
# we hardcode the major versions. This ends up in the example
|
||||
# we hardcode the major versions. This ends up in the example
|
||||
# API URLs. When we have released a new major version, we'll
|
||||
# have to bump them.
|
||||
"%CLIENT_MAJOR_VERSION%": "r0",
|
||||
|
|
|
@ -31,15 +31,15 @@ class MatrixSections(Sections):
|
|||
def render_client_server_changelog(self):
|
||||
changelogs = self.units.get("changelogs")
|
||||
return changelogs["client_server"]
|
||||
|
||||
|
||||
# TODO: We should make this a generic variable instead of having to add functions all the time.
|
||||
def render_push_gateway_changelog(self):
|
||||
changelogs = self.units.get("changelogs")
|
||||
return changelogs["push_gateway"]
|
||||
|
||||
def render_identity_service_changelog(self):
|
||||
def render_identity_server_changelog(self):
|
||||
changelogs = self.units.get("changelogs")
|
||||
return changelogs["identity_service"]
|
||||
return changelogs["identity_server"]
|
||||
|
||||
def render_server_server_changelog(self):
|
||||
changelogs = self.units.get("changelogs")
|
||||
|
@ -226,4 +226,4 @@ class MatrixSections(Sections):
|
|||
definition=swagger_def['definition'],
|
||||
examples=swagger_def['examples'],
|
||||
title_kind=subtitle_title_char)
|
||||
return rendered
|
||||
return rendered
|
||||
|
|
|
@ -773,7 +773,7 @@ class MatrixUnits(Units):
|
|||
as_ver,
|
||||
"Privileged server plugins",
|
||||
), TypeTableRow(
|
||||
"`Identity Service API <identity_service/"+is_ver+".html>`_",
|
||||
"`Identity Server API <identity_server/"+is_ver+".html>`_",
|
||||
"unstable",
|
||||
"Mapping of third party IDs to Matrix IDs",
|
||||
), TypeTableRow(
|
||||
|
|
|
@ -145,7 +145,7 @@ Some requests have unique error codes:
|
|||
Sent when a threepid given to an API cannot be used because no record matching the threepid was found.
|
||||
|
||||
:``M_SERVER_NOT_TRUSTED``:
|
||||
The client's request used a third party server, eg. identity service, that this server does not trust.
|
||||
The client's request used a third party server, eg. identity server, that this server does not trust.
|
||||
|
||||
:``M_UNSUPPORTED_ROOM_VERSION``:
|
||||
The client's request to create a room used a room version that the server does not support.
|
||||
|
@ -257,7 +257,7 @@ specify parameter values. The flow for this method is as follows:
|
|||
points to a valid homeserver.
|
||||
|
||||
f. If the ``m.identity_server`` property is present, extract the
|
||||
``base_url`` value for use as the base URL of the identity service.
|
||||
``base_url`` value for use as the base URL of the identity server.
|
||||
Validation for this URL is done as in the step above, but using
|
||||
``/_matrix/identity/api/v1`` as the endpoint to connect to. If the
|
||||
``m.identity_server`` property is present, but does not have a
|
||||
|
@ -685,7 +685,7 @@ the auth code. Homeservers can choose any path for the ``redirect URI``. Once
|
|||
the OAuth flow has completed, the client retries the request with the session
|
||||
only, as above.
|
||||
|
||||
Email-based (identity service)
|
||||
Email-based (identity server)
|
||||
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
:Type:
|
||||
``m.login.email.identity``
|
||||
|
@ -705,9 +705,9 @@ To use this authentication type, clients should submit an auth dict as follows:
|
|||
"type": "m.login.email.identity",
|
||||
"threepidCreds": [
|
||||
{
|
||||
"sid": "<identity service session id>",
|
||||
"client_secret": "<identity service client secret>",
|
||||
"id_server": "<url of identity service authed with, e.g. 'matrix.org:8090'>"
|
||||
"sid": "<identity server session id>",
|
||||
"client_secret": "<identity server client secret>",
|
||||
"id_server": "<url of identity server authed with, e.g. 'matrix.org:8090'>"
|
||||
}
|
||||
],
|
||||
"session": "<session ID>"
|
||||
|
@ -995,7 +995,7 @@ Adding Account Administrative Contact Information
|
|||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
A homeserver may keep some contact information for administrative use.
|
||||
This is independent of any information kept by any identity services.
|
||||
This is independent of any information kept by any identity servers.
|
||||
|
||||
{{administrative_contact_cs_http_api}}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
.. See the License for the specific language governing permissions and
|
||||
.. limitations under the License.
|
||||
|
||||
Identity Service API
|
||||
Identity Server API
|
||||
====================
|
||||
|
||||
{{unstable_warning_block_IDENTITY_RELEASE_LABEL}}
|
||||
|
@ -23,7 +23,7 @@ Identity Service API
|
|||
The Matrix client-server and server-server APIs are largely expressed in Matrix
|
||||
user identifiers. From time to time, it is useful to refer to users by other
|
||||
("third-party") identifiers, or "3pid"s, e.g. their email address or phone
|
||||
number. This identity service specification describes how mappings between
|
||||
number. This identity server specification describes how mappings between
|
||||
third-party identifiers and Matrix user identifiers can be established,
|
||||
validated, and used. This description technically may apply to any 3pid, but in
|
||||
practice has only been applied specifically to email addresses and phone numbers.
|
||||
|
@ -35,14 +35,14 @@ Changelog
|
|||
---------
|
||||
|
||||
.. topic:: Version: %IDENTITY_RELEASE_LABEL%
|
||||
{{identity_service_changelog}}
|
||||
{{identity_server_changelog}}
|
||||
|
||||
This version of the specification is generated from
|
||||
`matrix-doc <https://github.com/matrix-org/matrix-doc>`_ as of Git commit
|
||||
`{{git_version}} <https://github.com/matrix-org/matrix-doc/tree/{{git_rev}}>`_.
|
||||
|
||||
For the full historical changelog, see
|
||||
https://github.com/matrix-org/matrix-doc/blob/master/changelogs/identity_service.rst
|
||||
https://github.com/matrix-org/matrix-doc/blob/master/changelogs/identity_server.rst
|
||||
|
||||
|
||||
Other versions of this specification
|
||||
|
@ -50,25 +50,25 @@ Other versions of this specification
|
|||
|
||||
The following other versions are also available, in reverse chronological order:
|
||||
|
||||
- `HEAD <https://matrix.org/docs/spec/identity_service/unstable.html>`_: Includes all changes since the latest versioned release.
|
||||
- `HEAD <https://matrix.org/docs/spec/identity_server/unstable.html>`_: Includes all changes since the latest versioned release.
|
||||
|
||||
General principles
|
||||
------------------
|
||||
|
||||
The purpose of an identity service is to validate, store, and answer questions
|
||||
The purpose of an identity server is to validate, store, and answer questions
|
||||
about the identities of users. In particular, it stores associations of the form
|
||||
"identifier X represents the same user as identifier Y", where identities may
|
||||
exist on different systems (such as email addresses, phone numbers,
|
||||
Matrix user IDs, etc).
|
||||
|
||||
The identity service has some private-public keypairs. When asked about an
|
||||
The identity server has some private-public keypairs. When asked about an
|
||||
association, it will sign details of the association with its private key.
|
||||
Clients may validate the assertions about associations by verifying the signature
|
||||
with the public key of the identity service.
|
||||
with the public key of the identity server.
|
||||
|
||||
In general, identity services are treated as reliable oracles. They do not
|
||||
In general, identity servers are treated as reliable oracles. They do not
|
||||
necessarily provide evidence that they have validated associations, but claim to
|
||||
have done so. Establishing the trustworthiness of an individual identity service
|
||||
have done so. Establishing the trustworthiness of an individual identity server
|
||||
is left as an exercise for the client.
|
||||
|
||||
3PID types are described in `3PID Types`_ Appendix.
|
||||
|
@ -76,7 +76,7 @@ is left as an exercise for the client.
|
|||
API standards
|
||||
-------------
|
||||
|
||||
The mandatory baseline for identity service communication in Matrix is exchanging
|
||||
The mandatory baseline for identity server communication in Matrix is exchanging
|
||||
JSON objects over HTTP APIs. HTTPS is required for communication, and all API calls
|
||||
use a Content-Type of ``application/json``. In addition, strings MUST be encoded as
|
||||
UTF-8.
|
||||
|
@ -145,7 +145,7 @@ Some standard error codes are below:
|
|||
Privacy
|
||||
-------
|
||||
|
||||
Identity is a privacy-sensitive issue. While the identity service exists to
|
||||
Identity is a privacy-sensitive issue. While the identity server exists to
|
||||
provide identity information, access should be restricted to avoid leaking
|
||||
potentially sensitive data. In particular, being able to construct large-scale
|
||||
connections between identities should be avoided. To this end, in general APIs
|
||||
|
@ -157,7 +157,7 @@ Web browser clients
|
|||
-------------------
|
||||
|
||||
It is realistic to expect that some clients will be written to be run within a web
|
||||
browser or similar environment. In these cases, the identity service should respond to
|
||||
browser or similar environment. In these cases, the identity server should respond to
|
||||
pre-flight requests and supply Cross-Origin Resource Sharing (CORS) headers on all
|
||||
requests.
|
||||
|
||||
|
@ -177,17 +177,17 @@ Status check
|
|||
Key management
|
||||
--------------
|
||||
|
||||
An identity service has some long-term public-private keypairs. These are named
|
||||
An identity server has some long-term public-private keypairs. These are named
|
||||
in a scheme ``algorithm:identifier``, e.g. ``ed25519:0``. When signing an
|
||||
association, the standard `Signing JSON`_ algorithm applies.
|
||||
|
||||
.. TODO: Actually allow identity services to revoke all keys
|
||||
.. TODO: Actually allow identity servers to revoke all keys
|
||||
See: https://github.com/matrix-org/matrix-doc/issues/1633
|
||||
.. In the event of key compromise, the identity service may revoke any of its keys.
|
||||
.. In the event of key compromise, the identity server may revoke any of its keys.
|
||||
An HTTP API is offered to get public keys, and check whether a particular key is
|
||||
valid.
|
||||
|
||||
The identity service may also keep track of some short-term public-private
|
||||
The identity server may also keep track of some short-term public-private
|
||||
keypairs, which may have different usage and lifetime characteristics than the
|
||||
service's long-term keys.
|
||||
|
||||
|
@ -241,14 +241,14 @@ General
|
|||
Invitation storage
|
||||
------------------
|
||||
|
||||
An identity service can store pending invitations to a user's 3pid, which will
|
||||
An identity server can store pending invitations to a user's 3pid, which will
|
||||
be retrieved and can be either notified on or look up when the 3pid is
|
||||
associated with a Matrix user ID.
|
||||
|
||||
At a later point, if the owner of that particular 3pid binds it with a Matrix user
|
||||
ID, the identity service will attempt to make an HTTP POST to the Matrix user's
|
||||
ID, the identity server will attempt to make an HTTP POST to the Matrix user's
|
||||
homeserver via the `/3pid/onbind`_ endpoint. The request MUST be signed with a
|
||||
long-term private key for the identity service.
|
||||
long-term private key for the identity server.
|
||||
|
||||
{{store_invite_is_http_api}}
|
||||
|
|
@ -107,7 +107,7 @@ The functionality that Matrix provides includes:
|
|||
- Managing user accounts (registration, login, logout)
|
||||
- Use of 3rd Party IDs (3PIDs) such as email addresses, phone numbers,
|
||||
Facebook accounts to authenticate, identify and discover users on Matrix.
|
||||
- Trusted federation of identity services for:
|
||||
- Trusted federation of identity servers for:
|
||||
|
||||
+ Publishing user public keys for PKI
|
||||
+ Mapping of 3PIDs to Matrix IDs
|
||||
|
@ -386,7 +386,7 @@ network accounts and phone numbers to their user ID. Linking 3PIDs creates a
|
|||
mapping from a 3PID to a user ID. This mapping can then be used by Matrix
|
||||
users in order to discover the user IDs of their contacts.
|
||||
In order to ensure that the mapping from 3PID to user ID is genuine, a globally
|
||||
federated cluster of trusted "identity services" (IS) are used to verify the 3PID
|
||||
federated cluster of trusted "identity servers" (IS) are used to verify the 3PID
|
||||
and persist and replicate the mappings.
|
||||
|
||||
Usage of an IS is not required in order for a client application to be part of
|
||||
|
|
|
@ -24,14 +24,14 @@ There are two flows here; one if a Matrix user ID is known for the third party
|
|||
identifier, and one if not. Either way, the client calls ``/invite`` with the
|
||||
details of the third party identifier.
|
||||
|
||||
The homeserver asks the identity service whether a Matrix user ID is known for
|
||||
The homeserver asks the identity server whether a Matrix user ID is known for
|
||||
that identifier:
|
||||
|
||||
- If it is, an invite is simply issued for that user.
|
||||
|
||||
- If it is not, the homeserver asks the identity service to record the details of
|
||||
- If it is not, the homeserver asks the identity server to record the details of
|
||||
the invitation, and to notify the invitee's homeserver of this pending invitation if it gets
|
||||
a binding for this identifier in the future. The identity service returns a token
|
||||
a binding for this identifier in the future. The identity server returns a token
|
||||
and public key to the inviting homeserver.
|
||||
|
||||
When the invitee's homeserver receives the notification of the binding, it
|
||||
|
@ -57,7 +57,7 @@ Server behaviour
|
|||
----------------
|
||||
|
||||
Upon receipt of an ``/invite``, the server is expected to look up the third party
|
||||
identifier with the provided identity service. If the lookup yields a result for
|
||||
identifier with the provided identity server. If the lookup yields a result for
|
||||
a Matrix User ID then the normal invite process can be initiated. This process
|
||||
ends up looking like this:
|
||||
|
||||
|
@ -87,7 +87,7 @@ ends up looking like this:
|
|||
|
||||
|
||||
However, if the lookup does not yield a bound User ID, the homeserver must store
|
||||
the invite on the identity service and emit a valid ``m.room.third_party_invite``
|
||||
the invite on the identity server and emit a valid ``m.room.third_party_invite``
|
||||
event to the room. This process ends up looking like this:
|
||||
|
||||
::
|
||||
|
@ -125,7 +125,7 @@ All homeservers MUST verify the signature in the event's
|
|||
``content.third_party_invite.signed`` object.
|
||||
|
||||
The third party user will then need to verify their identity, which results in
|
||||
a call from the identity service to the homeserver that bound the third party
|
||||
a call from the identity server to the homeserver that bound the third party
|
||||
identifier to a user. The homeserver then exchanges the ``m.room.third_party_invite``
|
||||
event in the room for a complete ``m.room.member`` event for ``membership: invite``
|
||||
for the user that has bound the third party identifier.
|
||||
|
@ -142,7 +142,7 @@ the room. They may, however, indicate to their clients that a member's
|
|||
membership is questionable.
|
||||
|
||||
For example, given H1, H2, and H3 as homeservers, UserA as a user of H1, and an
|
||||
identity service IS, the full sequence for a third party invite would look like
|
||||
identity server IS, the full sequence for a third party invite would look like
|
||||
the following. This diagram assumes H1 and H2 are residents of the room while
|
||||
H3 is attempting to join.
|
||||
|
||||
|
@ -213,9 +213,9 @@ in the diagram.
|
|||
|
||||
H1 MUST verify the request from H3 to ensure the ``signed`` property is correct
|
||||
as well as the ``key_validity_url`` as still being valid. This is done by making
|
||||
a request to the `identity service /isvalid`_ endpoint, using the provided URL
|
||||
a request to the `identity server /isvalid`_ endpoint, using the provided URL
|
||||
rather than constructing a new one. The query string and response for the provided
|
||||
URL must match the identity service specification.
|
||||
URL must match the identity server specification.
|
||||
|
||||
The reason that no other homeserver may reject the event based on checking
|
||||
``key_validity_url`` is that we must ensure event acceptance is deterministic.
|
||||
|
@ -236,22 +236,22 @@ ID and a third party identifier is hard. In particular, being able to look up
|
|||
all third party identifiers from a matrix user ID (and accordingly, being able
|
||||
to link each third party identifier) should be avoided wherever possible.
|
||||
To this end, the third party identifier is not put in any event, rather an
|
||||
opaque display name provided by the identity service is put into the events.
|
||||
opaque display name provided by the identity server is put into the events.
|
||||
Clients should not remember or display third party identifiers from invites,
|
||||
other than for the use of the inviter themself.
|
||||
|
||||
Homeservers are not required to trust any particular identity service(s). It is
|
||||
generally a client's responsibility to decide which identity services it trusts,
|
||||
not a homeserver's. Accordingly, this API takes identity services as input from
|
||||
Homeservers are not required to trust any particular identity server(s). It is
|
||||
generally a client's responsibility to decide which identity servers it trusts,
|
||||
not a homeserver's. Accordingly, this API takes identity servers as input from
|
||||
end users, and doesn't have any specific trusted set. It is possible some
|
||||
homeservers may want to supply defaults, or reject some identity services for
|
||||
*its* users, but no homeserver is allowed to dictate which identity services
|
||||
homeservers may want to supply defaults, or reject some identity servers for
|
||||
*its* users, but no homeserver is allowed to dictate which identity servers
|
||||
*other* homeservers' users trust.
|
||||
|
||||
There is some risk of denial of service attacks by flooding homeservers or
|
||||
identity services with many requests, or much state to store. Defending against
|
||||
identity servers with many requests, or much state to store. Defending against
|
||||
these is left to the implementer's discretion.
|
||||
|
||||
|
||||
|
||||
.. _`identity service /isvalid`: ../identity_service/unstable.html#get-matrix-identity-api-v1-pubkey-isvalid
|
||||
.. _`identity server /isvalid`: ../identity_server/unstable.html#get-matrix-identity-api-v1-pubkey-isvalid
|
||||
|
|
|
@ -844,35 +844,35 @@ When an user wants to invite another user in a room but doesn't know the Matrix
|
|||
ID to invite, they can do so using a third-party identifier (e.g. an e-mail or a
|
||||
phone number).
|
||||
|
||||
This identifier and its bindings to Matrix IDs are verified by an identity service
|
||||
implementing the `identity service API`_.
|
||||
This identifier and its bindings to Matrix IDs are verified by an identity server
|
||||
implementing the `identity server API`_.
|
||||
|
||||
Cases where an association exists for a third-party identifier
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If the third-party identifier is already bound to a Matrix ID, a lookup request
|
||||
on the identity service will return it. The invite is then processed by the inviting
|
||||
on the identity server will return it. The invite is then processed by the inviting
|
||||
homeserver as a standard ``m.room.member`` invite event. This is the simplest case.
|
||||
|
||||
Cases where an association doesn't exist for a third-party identifier
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If the third-party identifier isn't bound to any Matrix ID, the inviting
|
||||
homeserver will request the identity service to store an invite for this identifier
|
||||
homeserver will request the identity server to store an invite for this identifier
|
||||
and to deliver it to whoever binds it to its Matrix ID. It will also send a
|
||||
``m.room.third_party_invite`` event in the room to specify a display name, a token
|
||||
and public keys the identity service provided as a response to the invite storage
|
||||
and public keys the identity server provided as a response to the invite storage
|
||||
request.
|
||||
|
||||
When a third-party identifier with pending invites gets bound to a Matrix ID,
|
||||
the identity service will send a POST request to the ID's homeserver as described
|
||||
in the `Invitation Storage`_ section of the identity service API.
|
||||
the identity server will send a POST request to the ID's homeserver as described
|
||||
in the `Invitation Storage`_ section of the identity server API.
|
||||
|
||||
The following process applies for each invite sent by the identity service:
|
||||
The following process applies for each invite sent by the identity server:
|
||||
|
||||
The invited homeserver will create a ``m.room.member`` invite event containing
|
||||
a special ``third_party_invite`` section containing the token and a signed object,
|
||||
both provided by the identity service.
|
||||
both provided by the identity server.
|
||||
|
||||
If the invited homeserver is in the room the invite came from, it can auth the
|
||||
event and send it.
|
||||
|
@ -894,14 +894,14 @@ server.
|
|||
To do so, it will fetch from the room's state events the ``m.room.third_party_invite``
|
||||
event for which the state key matches with the value for the ``token`` key in the
|
||||
``third_party_invite`` object from the ``m.room.member`` event's content to fetch the
|
||||
public keys initially delivered by the identity service that stored the invite.
|
||||
public keys initially delivered by the identity server that stored the invite.
|
||||
|
||||
It will then use these keys to verify that the ``signed`` object (in the
|
||||
``third_party_invite`` object from the ``m.room.member`` event's content) was
|
||||
signed by the same identity service.
|
||||
signed by the same identity server.
|
||||
|
||||
Since this ``signed`` object can only be delivered once in the POST request
|
||||
emitted by the identity service upon binding between the third-party identifier
|
||||
emitted by the identity server upon binding between the third-party identifier
|
||||
and the Matrix ID, and contains the invited user's Matrix ID and the token
|
||||
delivered when the invite was stored, this verification will prove that the
|
||||
``m.room.member`` invite event comes from the user owning the invited third-party
|
||||
|
@ -1192,8 +1192,8 @@ Example code
|
|||
.. |/query/directory| replace:: ``/query/directory``
|
||||
.. _/query/directory: #get-matrix-federation-v1-query-directory
|
||||
|
||||
.. _`Invitation storage`: ../identity_service/%IDENTITY_RELEASE_LABEL%.html#invitation-storage
|
||||
.. _`identity service API`: ../identity_service/%IDENTITY_RELEASE_LABEL%.html
|
||||
.. _`Invitation storage`: ../identity_server/%IDENTITY_RELEASE_LABEL%.html#invitation-storage
|
||||
.. _`identity server API`: ../identity_server/%IDENTITY_RELEASE_LABEL%.html
|
||||
.. _`Client-Server API`: ../client_server/%CLIENT_RELEASE_LABEL%.html
|
||||
.. _`Inviting to a room`: #inviting-to-a-room
|
||||
.. _`Canonical JSON`: ../appendices.html#canonical-json
|
||||
|
|
|
@ -18,10 +18,10 @@ targets:
|
|||
files:
|
||||
- server_server_api.rst
|
||||
version_label: "%SERVER_RELEASE_LABEL%"
|
||||
identity_service:
|
||||
identity_server:
|
||||
files:
|
||||
- identity_service_api.rst
|
||||
version_label: unstable
|
||||
- identity_server_api.rst
|
||||
version_label: "%IDENTITY_RELEASE_LABEL%"
|
||||
push_gateway:
|
||||
files:
|
||||
- push_gateway.rst
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue