Merge branch 'master' of github.com:matrix-org/matrix-doc into erikj/limit_auth_events
This commit is contained in:
commit
bbca5ce43a
121 changed files with 2693 additions and 823 deletions
18
api/application-service/definitions/security.yaml
Normal file
18
api/application-service/definitions/security.yaml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# Copyright 2018 New Vector Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# 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.
|
||||||
|
homeserverAccessToken:
|
||||||
|
type: apiKey
|
||||||
|
description: The ``hs_token`` provided by the application service's registration.
|
||||||
|
name: access_token
|
||||||
|
in: query
|
|
@ -19,13 +19,15 @@ host: localhost:8008
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
- http
|
||||||
basePath: "/"
|
basePath: /_matrix/app/v1
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
|
securityDefinitions:
|
||||||
|
$ref: definitions/security.yaml
|
||||||
paths:
|
paths:
|
||||||
"/_matrix/app/unstable/thirdparty/protocol/{protocol}":
|
"/thirdparty/protocol/{protocol}":
|
||||||
get:
|
get:
|
||||||
summary: Retrieve metadata about a specific protocol that the application service supports.
|
summary: Retrieve metadata about a specific protocol that the application service supports.
|
||||||
description: |-
|
description: |-
|
||||||
|
@ -33,6 +35,8 @@ paths:
|
||||||
with specific information about the various third party networks that
|
with specific information about the various third party networks that
|
||||||
an application service supports.
|
an application service supports.
|
||||||
operationId: getProtocolMetadata
|
operationId: getProtocolMetadata
|
||||||
|
security:
|
||||||
|
- homeserverAccessToken: []
|
||||||
parameters:
|
parameters:
|
||||||
- in: path
|
- in: path
|
||||||
name: protocol
|
name: protocol
|
||||||
|
@ -72,7 +76,7 @@ paths:
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
$ref: ../client-server/definitions/errors/error.yaml
|
$ref: ../client-server/definitions/errors/error.yaml
|
||||||
"/_matrix/app/unstable/thirdparty/user/{protocol}":
|
"/thirdparty/user/{protocol}":
|
||||||
get:
|
get:
|
||||||
summary: Retrieve the Matrix User ID of a corresponding third party user.
|
summary: Retrieve the Matrix User ID of a corresponding third party user.
|
||||||
description: |-
|
description: |-
|
||||||
|
@ -80,6 +84,8 @@ paths:
|
||||||
User ID linked to a user on the third party network, given a set of
|
User ID linked to a user on the third party network, given a set of
|
||||||
user parameters.
|
user parameters.
|
||||||
operationId: queryUserByProtocol
|
operationId: queryUserByProtocol
|
||||||
|
security:
|
||||||
|
- homeserverAccessToken: []
|
||||||
parameters:
|
parameters:
|
||||||
- in: path
|
- in: path
|
||||||
name: protocol
|
name: protocol
|
||||||
|
@ -125,12 +131,14 @@ paths:
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
$ref: ../client-server/definitions/errors/error.yaml
|
$ref: ../client-server/definitions/errors/error.yaml
|
||||||
"/_matrix/app/unstable/thirdparty/location/{protocol}":
|
"/thirdparty/location/{protocol}":
|
||||||
get:
|
get:
|
||||||
summary: Retrieve Matrix-side portal rooms leading to a third party location.
|
summary: Retrieve Matrix-side portal rooms leading to a third party location.
|
||||||
description: |-
|
description: |-
|
||||||
Retrieve a list of Matrix portal rooms that lead to the matched third party location.
|
Retrieve a list of Matrix portal rooms that lead to the matched third party location.
|
||||||
operationId: queryLocationByProtocol
|
operationId: queryLocationByProtocol
|
||||||
|
security:
|
||||||
|
- homeserverAccessToken: []
|
||||||
parameters:
|
parameters:
|
||||||
- in: path
|
- in: path
|
||||||
name: protocol
|
name: protocol
|
||||||
|
@ -176,13 +184,15 @@ paths:
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
$ref: ../client-server/definitions/errors/error.yaml
|
$ref: ../client-server/definitions/errors/error.yaml
|
||||||
"/_matrix/app/unstable/thirdparty/location":
|
"/thirdparty/location":
|
||||||
get:
|
get:
|
||||||
summary: Reverse-lookup third party locations given a Matrix room alias.
|
summary: Reverse-lookup third party locations given a Matrix room alias.
|
||||||
description: |-
|
description: |-
|
||||||
Retrieve an array of third party network locations from a Matrix room
|
Retrieve an array of third party network locations from a Matrix room
|
||||||
alias.
|
alias.
|
||||||
operationId: queryLocationByAlias
|
operationId: queryLocationByAlias
|
||||||
|
security:
|
||||||
|
- homeserverAccessToken: []
|
||||||
parameters:
|
parameters:
|
||||||
- in: query
|
- in: query
|
||||||
name: alias
|
name: alias
|
||||||
|
@ -221,12 +231,14 @@ paths:
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
$ref: ../client-server/definitions/errors/error.yaml
|
$ref: ../client-server/definitions/errors/error.yaml
|
||||||
"/_matrix/app/unstable/thirdparty/user":
|
"/thirdparty/user":
|
||||||
get:
|
get:
|
||||||
summary: Reverse-lookup third party users given a Matrix User ID.
|
summary: Reverse-lookup third party users given a Matrix User ID.
|
||||||
description: |-
|
description: |-
|
||||||
Retrieve an array of third party users from a Matrix User ID.
|
Retrieve an array of third party users from a Matrix User ID.
|
||||||
operationId: queryUserByID
|
operationId: queryUserByID
|
||||||
|
security:
|
||||||
|
- homeserverAccessToken: []
|
||||||
parameters:
|
parameters:
|
||||||
- in: query
|
- in: query
|
||||||
name: userid
|
name: userid
|
||||||
|
|
|
@ -20,11 +20,13 @@ host: localhost:8008
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
- http
|
||||||
basePath: "/"
|
basePath: /_matrix/app/v1
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
|
securityDefinitions:
|
||||||
|
$ref: definitions/security.yaml
|
||||||
paths:
|
paths:
|
||||||
"/rooms/{roomAlias}":
|
"/rooms/{roomAlias}":
|
||||||
get:
|
get:
|
||||||
|
@ -36,6 +38,8 @@ paths:
|
||||||
homeserver will send this request when it receives a request to join a
|
homeserver will send this request when it receives a request to join a
|
||||||
room alias within the application service's namespace.
|
room alias within the application service's namespace.
|
||||||
operationId: queryRoomByAlias
|
operationId: queryRoomByAlias
|
||||||
|
security:
|
||||||
|
- homeserverAccessToken: []
|
||||||
parameters:
|
parameters:
|
||||||
- in: path
|
- in: path
|
||||||
name: roomAlias
|
name: roomAlias
|
||||||
|
|
|
@ -20,11 +20,13 @@ host: localhost:8008
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
- http
|
||||||
basePath: "/"
|
basePath: /_matrix/app/v1
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
|
securityDefinitions:
|
||||||
|
$ref: definitions/security.yaml
|
||||||
paths:
|
paths:
|
||||||
"/users/{userId}":
|
"/users/{userId}":
|
||||||
get:
|
get:
|
||||||
|
@ -36,6 +38,8 @@ paths:
|
||||||
send this request when it receives an event for an unknown user ID in
|
send this request when it receives an event for an unknown user ID in
|
||||||
the application service's namespace, such as a room invite.
|
the application service's namespace, such as a room invite.
|
||||||
operationId: queryUserById
|
operationId: queryUserById
|
||||||
|
security:
|
||||||
|
- homeserverAccessToken: []
|
||||||
parameters:
|
parameters:
|
||||||
- in: path
|
- in: path
|
||||||
name: userId
|
name: userId
|
||||||
|
|
|
@ -20,9 +20,11 @@ host: localhost:8008
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
- http
|
||||||
basePath: "/"
|
basePath: /_matrix/app/v1
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
|
securityDefinitions:
|
||||||
|
$ref: definitions/security.yaml
|
||||||
paths:
|
paths:
|
||||||
"/transactions/{txnId}":
|
"/transactions/{txnId}":
|
||||||
put:
|
put:
|
||||||
|
@ -35,6 +37,8 @@ paths:
|
||||||
from message events via the presence of a ``state_key``, rather than
|
from message events via the presence of a ``state_key``, rather than
|
||||||
via the event type.
|
via the event type.
|
||||||
operationId: sendTransaction
|
operationId: sendTransaction
|
||||||
|
security:
|
||||||
|
- homeserverAccessToken: []
|
||||||
parameters:
|
parameters:
|
||||||
- in: path
|
- in: path
|
||||||
name: txnId
|
name: txnId
|
||||||
|
|
|
@ -47,13 +47,15 @@ paths:
|
||||||
description: The lookup was successful.
|
description: The lookup was successful.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"threepids": [
|
"threepids": [
|
||||||
{
|
{
|
||||||
"medium": "email",
|
"medium": "email",
|
||||||
"address": "monkey@banana.island"
|
"address": "monkey@banana.island",
|
||||||
}
|
"validated_at": 1535176800000,
|
||||||
]
|
"added_at": 1535336848756
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
@ -70,6 +72,19 @@ paths:
|
||||||
address:
|
address:
|
||||||
type: string
|
type: string
|
||||||
description: The third party identifier address.
|
description: The third party identifier address.
|
||||||
|
validated_at:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
description: |-
|
||||||
|
The timestamp, in milliseconds, when the identifier was
|
||||||
|
validated by the identity service.
|
||||||
|
added_at:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
description:
|
||||||
|
The timestamp, in milliseconds, when the homeserver
|
||||||
|
associated the third party identifier with the user.
|
||||||
|
required: ['medium', 'address', 'validated_at', 'added_at']
|
||||||
tags:
|
tags:
|
||||||
- User data
|
- User data
|
||||||
post:
|
post:
|
||||||
|
@ -133,6 +148,41 @@ paths:
|
||||||
"$ref": "definitions/errors/error.yaml"
|
"$ref": "definitions/errors/error.yaml"
|
||||||
tags:
|
tags:
|
||||||
- User data
|
- User data
|
||||||
|
"/account/3pid/delete":
|
||||||
|
post:
|
||||||
|
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.
|
||||||
|
operationId: delete3pidFromAccount
|
||||||
|
security:
|
||||||
|
- accessToken: []
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
medium:
|
||||||
|
type: string
|
||||||
|
description: The medium of the third party identifier being removed.
|
||||||
|
enum: ["email", "msisdn"]
|
||||||
|
example: "email"
|
||||||
|
address:
|
||||||
|
type: string
|
||||||
|
description: The third party address being removed.
|
||||||
|
example: "example@domain.com"
|
||||||
|
required: ['medium', 'address']
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: |-
|
||||||
|
The homeserver has disassociated the third party identifier from the
|
||||||
|
user.
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties: {}
|
||||||
|
tags:
|
||||||
|
- User data
|
||||||
"/account/3pid/email/requestToken":
|
"/account/3pid/email/requestToken":
|
||||||
post:
|
post:
|
||||||
summary: Requests a validation token be sent to the given email address for the purpose of adding an email address to an account
|
summary: Requests a validation token be sent to the given email address for the purpose of adding an email address to an account
|
||||||
|
|
24
api/client-server/definitions/wellknown/homeserver.yaml
Normal file
24
api/client-server/definitions/wellknown/homeserver.yaml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Copyright 2018 New Vector Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# 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: Homeserver Information
|
||||||
|
description: |-
|
||||||
|
Used by clients to discover homeserver information.
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
base_url:
|
||||||
|
type: string
|
||||||
|
description: The base URL for the homeserver for client-server connections.
|
||||||
|
example: https://matrix.example.com
|
||||||
|
required:
|
||||||
|
- base_url
|
24
api/client-server/definitions/wellknown/identity_server.yaml
Normal file
24
api/client-server/definitions/wellknown/identity_server.yaml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Copyright 2018 New Vector Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# 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 Server Information
|
||||||
|
description: |-
|
||||||
|
Used by clients to discover identity server information.
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
base_url:
|
||||||
|
type: string
|
||||||
|
description: The base URL for the identity server for client-server connections.
|
||||||
|
example: https://identity.example.com
|
||||||
|
required:
|
||||||
|
- base_url
|
|
@ -117,6 +117,13 @@ paths:
|
||||||
A display name to assign to the newly-created device. Ignored
|
A display name to assign to the newly-created device. Ignored
|
||||||
if ``device_id`` corresponds to a known device.
|
if ``device_id`` corresponds to a known device.
|
||||||
example: Jungle Phone
|
example: Jungle Phone
|
||||||
|
inhibit_login:
|
||||||
|
type: boolean
|
||||||
|
description: |-
|
||||||
|
If true, an ``access_token`` and ``device_id`` should not be
|
||||||
|
returned from this call, therefore preventing an automatic
|
||||||
|
login. Defaults to false.
|
||||||
|
example: false
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: The account has been registered.
|
description: The account has been registered.
|
||||||
|
@ -141,6 +148,7 @@ paths:
|
||||||
description: |-
|
description: |-
|
||||||
An access token for the account.
|
An access token for the account.
|
||||||
This access token can then be used to authorize other requests.
|
This access token can then be used to authorize other requests.
|
||||||
|
Required if the ``inhibit_login`` option is false.
|
||||||
home_server:
|
home_server:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
|
@ -155,6 +163,8 @@ paths:
|
||||||
description: |-
|
description: |-
|
||||||
ID of the registered device. Will be the same as the
|
ID of the registered device. Will be the same as the
|
||||||
corresponding parameter in the request, if one was specified.
|
corresponding parameter in the request, if one was specified.
|
||||||
|
Required if the ``inhibit_login`` option is false.
|
||||||
|
required: ['user_id']
|
||||||
400:
|
400:
|
||||||
description: |-
|
description: |-
|
||||||
Part of the request was invalid. This may include one of the following error codes:
|
Part of the request was invalid. This may include one of the following error codes:
|
||||||
|
|
|
@ -87,6 +87,16 @@ paths:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
A unique identifier for the event.
|
A unique identifier for the event.
|
||||||
|
403:
|
||||||
|
description: |-
|
||||||
|
The sender doesn't have permission to send the event into the room.
|
||||||
|
schema:
|
||||||
|
$ref: "definitions/errors/error.yaml"
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"errcode": "M_FORBIDDEN",
|
||||||
|
"error": "You do not have permission to send the event."
|
||||||
|
}
|
||||||
tags:
|
tags:
|
||||||
- Room participation
|
- Room participation
|
||||||
"/rooms/{roomId}/state/{eventType}":
|
"/rooms/{roomId}/state/{eventType}":
|
||||||
|
@ -142,5 +152,15 @@ paths:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
A unique identifier for the event.
|
A unique identifier for the event.
|
||||||
|
403:
|
||||||
|
description: |-
|
||||||
|
The sender doesn't have permission to send the event into the room.
|
||||||
|
schema:
|
||||||
|
$ref: "definitions/errors/error.yaml"
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"errcode": "M_FORBIDDEN",
|
||||||
|
"error": "You do not have permission to send the event."
|
||||||
|
}
|
||||||
tags:
|
tags:
|
||||||
- Room participation
|
- Room participation
|
||||||
|
|
|
@ -77,13 +77,14 @@ paths:
|
||||||
- in: query
|
- in: query
|
||||||
name: set_presence
|
name: set_presence
|
||||||
type: string
|
type: string
|
||||||
enum: ["offline"]
|
enum: ["offline", "online", "unavailable"]
|
||||||
description: |-
|
description: |-
|
||||||
Controls whether the client is automatically marked as online by
|
Controls whether the client is automatically marked as online by
|
||||||
polling this API. If this parameter is omitted then the client is
|
polling this API. If this parameter is omitted then the client is
|
||||||
automatically marked as online when it uses this API. Otherwise if
|
automatically marked as online when it uses this API. Otherwise if
|
||||||
the parameter is set to "offline" then the client is not marked as
|
the parameter is set to "offline" then the client is not marked as
|
||||||
being online when it uses this API.
|
being online when it uses this API. When set to "unavailable", the
|
||||||
|
client is marked as being idle.
|
||||||
x-example: "offline"
|
x-example: "offline"
|
||||||
- in: query
|
- in: query
|
||||||
name: timeout
|
name: timeout
|
||||||
|
|
66
api/client-server/wellknown.yaml
Normal file
66
api/client-server/wellknown.yaml
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
# Copyright 2018 New Vector Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# 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.
|
||||||
|
swagger: '2.0'
|
||||||
|
info:
|
||||||
|
title: "Matrix Client-Server Server Discovery API"
|
||||||
|
version: "1.0.0"
|
||||||
|
host: localhost:8008
|
||||||
|
schemes:
|
||||||
|
- https
|
||||||
|
basePath: /.well-known
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
paths:
|
||||||
|
"/matrix/client":
|
||||||
|
get:
|
||||||
|
summary: Gets Matrix server discovery information about the domain.
|
||||||
|
description: |-
|
||||||
|
Gets discovery information about the domain. The file may include
|
||||||
|
additional keys, which MUST follow the Java package naming convention,
|
||||||
|
e.g. ``com.example.myapp.property``. This ensures property names are
|
||||||
|
suitably namespaced for each application and reduces the risk of
|
||||||
|
clashes.
|
||||||
|
|
||||||
|
Note that this endpoint is not necessarily handled by the homeserver,
|
||||||
|
but by another webserver, to be used for discovering the homeserver URL.
|
||||||
|
operationId: getWellknown
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Server discovery information.
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"m.homeserver": {
|
||||||
|
"base_url": "https://matrix.example.com"
|
||||||
|
},
|
||||||
|
"m.identity_server": {
|
||||||
|
"base_url": "https://identity.example.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
m.homeserver:
|
||||||
|
description: Information about the homeserver to connect to.
|
||||||
|
"$ref": "definitions/wellknown/homeserver.yaml"
|
||||||
|
m.identity_server:
|
||||||
|
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.
|
||||||
|
required:
|
||||||
|
- m.homeserver
|
||||||
|
404:
|
||||||
|
description: No server discovery information available.
|
||||||
|
tags:
|
||||||
|
- Server administration
|
|
@ -18,15 +18,17 @@ info:
|
||||||
host: localhost:8090
|
host: localhost:8090
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
|
||||||
basePath: /_matrix/identity/api/v1
|
basePath: /_matrix/identity/api/v1
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
paths:
|
paths:
|
||||||
"/3pid/getValidated3pid":
|
"/3pid/getValidated3pid":
|
||||||
get:
|
get:
|
||||||
summary: Check whether ownership of a 3pid was validated.
|
summary: Check whether ownership of a 3pid was validated.
|
||||||
description: A client can check whether ownership of a 3pid was validated
|
description: |-
|
||||||
|
Determines if a given 3pid has been validated by a user.
|
||||||
operationId: getValidated3pid
|
operationId: getValidated3pid
|
||||||
parameters:
|
parameters:
|
||||||
- in: query
|
- in: query
|
||||||
|
@ -46,10 +48,10 @@ paths:
|
||||||
description: Validation information for the session.
|
description: Validation information for the session.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"medium": "email",
|
"medium": "email",
|
||||||
"validated_at": 1457622739026,
|
"validated_at": 1457622739026,
|
||||||
"address": "louise@bobs.burgers"
|
"address": "louise@bobs.burgers"
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
@ -61,7 +63,10 @@ paths:
|
||||||
description: The address of the 3pid being looked up.
|
description: The address of the 3pid being looked up.
|
||||||
validated_at:
|
validated_at:
|
||||||
type: integer
|
type: integer
|
||||||
description: Timestamp indicating the time that the 3pid was validated.
|
description: |-
|
||||||
|
Timestamp, in milliseconds, indicating the time that the 3pid
|
||||||
|
was validated.
|
||||||
|
required: ['medium', 'address', 'validated_at']
|
||||||
400:
|
400:
|
||||||
description: |-
|
description: |-
|
||||||
The session has not been validated.
|
The session has not been validated.
|
||||||
|
@ -71,16 +76,20 @@ paths:
|
||||||
``errcode`` will be ``M_SESSION_EXPIRED``.
|
``errcode`` will be ``M_SESSION_EXPIRED``.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"errcode": "M_SESSION_NOT_VALIDATED",
|
"errcode": "M_SESSION_NOT_VALIDATED",
|
||||||
"error": "This validation session has not yet been completed"
|
"error": "This validation session has not yet been completed"
|
||||||
}
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
404:
|
404:
|
||||||
description: The Session ID or client secret were not found
|
description: The Session ID or client secret were not found.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"errcode": "M_NO_VALID_SESSION",
|
"errcode": "M_NO_VALID_SESSION",
|
||||||
"error": "No valid session was found matching that sid and client secret"
|
"error": "No valid session was found matching that sid and client secret"
|
||||||
}
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
"/bind":
|
"/bind":
|
||||||
post:
|
post:
|
||||||
summary: Publish an association between a session and a Matrix user ID.
|
summary: Publish an association between a session and a Matrix user ID.
|
||||||
|
@ -90,7 +99,7 @@ paths:
|
||||||
Future calls to ``/lookup`` for any of the session\'s 3pids will return
|
Future calls to ``/lookup`` for any of the session\'s 3pids will return
|
||||||
this association.
|
this association.
|
||||||
|
|
||||||
Note: for backwards compatibility with older versions of this
|
Note: for backwards compatibility with previous drafts of this
|
||||||
specification, the parameters may also be specified as
|
specification, the parameters may also be specified as
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
``application/x-form-www-urlencoded`` data. However, this usage is
|
||||||
deprecated.
|
deprecated.
|
||||||
|
@ -101,10 +110,10 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
example: {
|
example: {
|
||||||
"sid": "1234",
|
"sid": "1234",
|
||||||
"client_secret": "monkeys_are_GREAT",
|
"client_secret": "monkeys_are_GREAT",
|
||||||
"mxid": "@ears:matrix.org"
|
"mxid": "@ears:matrix.org"
|
||||||
}
|
}
|
||||||
properties:
|
properties:
|
||||||
sid:
|
sid:
|
||||||
type: string
|
type: string
|
||||||
|
@ -121,19 +130,18 @@ paths:
|
||||||
description: The association was published.
|
description: The association was published.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"address": "louise@bobs.burgers",
|
"address": "louise@bobs.burgers",
|
||||||
"medium": "email",
|
"medium": "email",
|
||||||
"mxid": "@ears:matrix.org",
|
"mxid": "@ears:matrix.org",
|
||||||
"not_before": 1428825849161,
|
"not_before": 1428825849161,
|
||||||
"not_after": 4582425849161,
|
"not_after": 4582425849161,
|
||||||
"ts": 1428825849161,
|
"ts": 1428825849161,
|
||||||
|
"signatures": {
|
||||||
"signatures": {
|
"matrix.org": {
|
||||||
"matrix.org": {
|
"ed25519:0": "ENiU2YORYUJgE6WBMitU0mppbQjidDLanAusj8XS2nVRHPu+0t42OKA/r6zV6i2MzUbNQ3c3MiLScJuSsOiVDQ"
|
||||||
"ed25519:0": "ENiU2YORYUJgE6WBMitU0mppbQjidDLanAusj8XS2nVRHPu+0t42OKA/r6zV6i2MzUbNQ3c3MiLScJuSsOiVDQ"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
@ -157,7 +165,19 @@ paths:
|
||||||
description: The unix timestamp at which the association was verified.
|
description: The unix timestamp at which the association was verified.
|
||||||
signatures:
|
signatures:
|
||||||
type: object
|
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 services which show that the
|
||||||
|
association should be trusted, if you trust the verifying identity
|
||||||
|
services.
|
||||||
|
$ref: "../../schemas/server-signatures.yaml"
|
||||||
|
required:
|
||||||
|
- address
|
||||||
|
- medium
|
||||||
|
- mxid
|
||||||
|
- not_before
|
||||||
|
- not_after
|
||||||
|
- ts
|
||||||
|
- signatures
|
||||||
400:
|
400:
|
||||||
description: |-
|
description: |-
|
||||||
The association was not published.
|
The association was not published.
|
||||||
|
@ -167,13 +187,17 @@ paths:
|
||||||
``errcode`` will be ``M_SESSION_EXPIRED``.
|
``errcode`` will be ``M_SESSION_EXPIRED``.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"errcode": "M_SESSION_NOT_VALIDATED",
|
"errcode": "M_SESSION_NOT_VALIDATED",
|
||||||
"error": "This validation session has not yet been completed"
|
"error": "This validation session has not yet been completed"
|
||||||
}
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
404:
|
404:
|
||||||
description: The Session ID or client secret were not found
|
description: The Session ID or client secret were not found
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"errcode": "M_NO_VALID_SESSION",
|
"errcode": "M_NO_VALID_SESSION",
|
||||||
"error": "No valid session was found matching that sid and client secret"
|
"error": "No valid session was found matching that sid and client secret"
|
||||||
}
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
|
|
|
@ -18,8 +18,9 @@ info:
|
||||||
host: localhost:8090
|
host: localhost:8090
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
|
||||||
basePath: /_matrix/identity/api/v1
|
basePath: /_matrix/identity/api/v1
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
paths:
|
paths:
|
||||||
|
@ -34,13 +35,13 @@ paths:
|
||||||
that that user was able to read the email for that email address, and
|
that that user was able to read the email for that email address, and
|
||||||
so we validate ownership of the email address.
|
so we validate ownership of the email address.
|
||||||
|
|
||||||
Note that Home Servers offer APIs that proxy this API, adding
|
Note that homeservers offer APIs that proxy this API, adding
|
||||||
additional behaviour on top, for example,
|
additional behaviour on top, for example,
|
||||||
``/register/email/requestToken`` is designed specifically for use when
|
``/register/email/requestToken`` is designed specifically for use when
|
||||||
registering an account and therefore will inform the user if the email
|
registering an account and therefore will inform the user if the email
|
||||||
address given is already registered on the server.
|
address given is already registered on the server.
|
||||||
|
|
||||||
Note: for backwards compatibility with older versions of this
|
Note: for backwards compatibility with previous drafts of this
|
||||||
specification, the parameters may also be specified as
|
specification, the parameters may also be specified as
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
``application/x-form-www-urlencoded`` data. However, this usage is
|
||||||
deprecated.
|
deprecated.
|
||||||
|
@ -51,14 +52,14 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
example: {
|
example: {
|
||||||
"client_secret": "monkeys_are_GREAT",
|
"client_secret": "monkeys_are_GREAT",
|
||||||
"email": "foo@example.com",
|
"email": "foo@example.com",
|
||||||
"send_attempt": 1
|
"send_attempt": 1
|
||||||
}
|
}
|
||||||
properties:
|
properties:
|
||||||
client_secret:
|
client_secret:
|
||||||
type: string
|
type: string
|
||||||
description: A unique string used to identify the validation attempt
|
description: A unique string used to identify the validation attempt.
|
||||||
email:
|
email:
|
||||||
type: string
|
type: string
|
||||||
description: The email address to validate.
|
description: The email address to validate.
|
||||||
|
@ -85,20 +86,28 @@ paths:
|
||||||
Session created.
|
Session created.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"sid": "1234"
|
"sid": "1234"
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
sid:
|
sid:
|
||||||
type: string
|
type: string
|
||||||
description: The session ID.
|
description: The session ID.
|
||||||
|
required: ['sid']
|
||||||
400:
|
400:
|
||||||
description: |
|
description: |
|
||||||
An error ocurred. Some possible errors are:
|
An error ocurred. Some possible errors are:
|
||||||
|
|
||||||
- ``M_INVALID_EMAIL``: The email address provided was invalid.
|
- ``M_INVALID_EMAIL``: The email address provided was invalid.
|
||||||
- ``M_EMAIL_SEND_ERROR``: The validation email could not be sent.
|
- ``M_EMAIL_SEND_ERROR``: The validation email could not be sent.
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"errcode": "M_INVALID_EMAIL",
|
||||||
|
"error": "The email address is not valid"
|
||||||
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
"/validate/email/submitToken":
|
"/validate/email/submitToken":
|
||||||
post:
|
post:
|
||||||
summary: Validate ownership of an email address.
|
summary: Validate ownership of an email address.
|
||||||
|
@ -111,7 +120,7 @@ paths:
|
||||||
associate the email address with any Matrix user ID. Specifically,
|
associate the email address with any Matrix user ID. Specifically,
|
||||||
calls to ``/lookup`` will not show a binding.
|
calls to ``/lookup`` will not show a binding.
|
||||||
|
|
||||||
Note: for backwards compatibility with older versions of this
|
Note: for backwards compatibility with previous drafts of this
|
||||||
specification, the parameters may also be specified as
|
specification, the parameters may also be specified as
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
``application/x-form-www-urlencoded`` data. However, this usage is
|
||||||
deprecated.
|
deprecated.
|
||||||
|
@ -122,10 +131,10 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
example: {
|
example: {
|
||||||
"sid": "1234",
|
"sid": "1234",
|
||||||
"client_secret": "monkeys_are_GREAT",
|
"client_secret": "monkeys_are_GREAT",
|
||||||
"token": "atoken"
|
"token": "atoken"
|
||||||
}
|
}
|
||||||
properties:
|
properties:
|
||||||
sid:
|
sid:
|
||||||
type: string
|
type: string
|
||||||
|
@ -143,14 +152,15 @@ paths:
|
||||||
The success of the validation.
|
The success of the validation.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"success": true
|
"success": true
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
success:
|
success:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: Whether the validation was successful or not.
|
description: Whether the validation was successful or not.
|
||||||
|
required: ['success']
|
||||||
get:
|
get:
|
||||||
summary: Validate ownership of an email address.
|
summary: Validate ownership of an email address.
|
||||||
description: |-
|
description: |-
|
||||||
|
|
|
@ -18,8 +18,9 @@ info:
|
||||||
host: localhost:8090
|
host: localhost:8090
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
|
||||||
basePath: /_matrix/identity/api/v1
|
basePath: /_matrix/identity/api/v1
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
paths:
|
paths:
|
||||||
|
@ -29,7 +30,7 @@ paths:
|
||||||
description: |-
|
description: |-
|
||||||
Sign invitation details.
|
Sign invitation details.
|
||||||
|
|
||||||
The identity server will look up ``token`` which was stored in a call
|
The identity service will look up ``token`` which was stored in a call
|
||||||
to ``store-invite``, and fetch the sender of the invite.
|
to ``store-invite``, and fetch the sender of the invite.
|
||||||
operationId: blindlySignStuff
|
operationId: blindlySignStuff
|
||||||
parameters:
|
parameters:
|
||||||
|
@ -38,24 +39,24 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
example: {
|
example: {
|
||||||
"mxid": "@foo:bar.com",
|
"mxid": "@foo:bar.com",
|
||||||
"token": "sometoken",
|
"token": "sometoken",
|
||||||
"private_key": "base64encodedkey"
|
"private_key": "base64encodedkey"
|
||||||
}
|
}
|
||||||
properties:
|
properties:
|
||||||
mxid:
|
mxid:
|
||||||
type: string
|
type: string
|
||||||
description: The Matrix user ID of the user accepting the invitation.
|
description: The Matrix user ID of the user accepting the invitation.
|
||||||
token:
|
token:
|
||||||
type: string
|
type: string
|
||||||
description: Token from the call to ``store-invite``
|
description: The token from the call to ``store-invite``.
|
||||||
private_key:
|
private_key:
|
||||||
type: string
|
type: string
|
||||||
description: The private key, encoded as `Unpadded base64`_.
|
description: The private key, encoded as `Unpadded base64`_.
|
||||||
required: ["mxid", "token", "private_key"]
|
required: ["mxid", "token", "private_key"]
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: The signedjson of the mxid, sender, and token.
|
description: The signed JSON of the mxid, sender, and token.
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
@ -68,9 +69,11 @@ paths:
|
||||||
signatures:
|
signatures:
|
||||||
type: object
|
type: object
|
||||||
description: The signature of the mxid, sender, and token.
|
description: The signature of the mxid, sender, and token.
|
||||||
|
$ref: "../../schemas/server-signatures.yaml"
|
||||||
token:
|
token:
|
||||||
type: string
|
type: string
|
||||||
description: The token for the invitation.
|
description: The token for the invitation.
|
||||||
|
required: ['mxid', 'sender', 'signatures', 'token']
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"mxid": "@foo:bar.com",
|
"mxid": "@foo:bar.com",
|
||||||
|
@ -83,8 +86,11 @@ paths:
|
||||||
"token": "abc123"
|
"token": "abc123"
|
||||||
}
|
}
|
||||||
404:
|
404:
|
||||||
description: Token was not found.
|
description: The token was not found.
|
||||||
example: {
|
examples:
|
||||||
|
application/json: {
|
||||||
"errcode": "M_UNRECOGNIZED",
|
"errcode": "M_UNRECOGNIZED",
|
||||||
"error": "Didn't recognize token"
|
"error": "Didn't recognize token"
|
||||||
}
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# Copyright 2016 OpenMarket Ltd
|
# Copyright 2016 OpenMarket Ltd
|
||||||
# Copyright 2017 Kamax.io
|
# Copyright 2017 Kamax.io
|
||||||
# Copyright 2017 New Vector Ltd
|
# Copyright 2017 New Vector Ltd
|
||||||
|
# Copyright 2018 New Vector Ltd
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
|
@ -20,8 +21,9 @@ info:
|
||||||
host: localhost:8090
|
host: localhost:8090
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
|
||||||
basePath: /_matrix/identity/api/v1
|
basePath: /_matrix/identity/api/v1
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
paths:
|
paths:
|
||||||
|
@ -46,31 +48,30 @@ paths:
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description:
|
description:
|
||||||
The association for that 3pid, or the empty object if no association is known.
|
The association for that 3pid, or an empty object if no association is known.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"address": "louise@bobs.burgers",
|
"address": "louise@bobs.burgers",
|
||||||
"medium": "email",
|
"medium": "email",
|
||||||
"mxid": "@ears:matrix.org",
|
"mxid": "@ears:matrix.org",
|
||||||
"not_before": 1428825849161,
|
"not_before": 1428825849161,
|
||||||
"not_after": 4582425849161,
|
"not_after": 4582425849161,
|
||||||
"ts": 1428825849161,
|
"ts": 1428825849161,
|
||||||
|
"signatures": {
|
||||||
"signatures": {
|
"matrix.org": {
|
||||||
"matrix.org": {
|
"ed25519:0": "ENiU2YORYUJgE6WBMitU0mppbQjidDLanAusj8XS2nVRHPu+0t42OKA/r6zV6i2MzUbNQ3c3MiLScJuSsOiVDQ"
|
||||||
"ed25519:0": "ENiU2YORYUJgE6WBMitU0mppbQjidDLanAusj8XS2nVRHPu+0t42OKA/r6zV6i2MzUbNQ3c3MiLScJuSsOiVDQ"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
address:
|
address:
|
||||||
type: string
|
type: string
|
||||||
description: The 3pid address of the user being looked up.
|
description: The 3pid address of the user being looked up, matching the address requested.
|
||||||
medium:
|
medium:
|
||||||
type: string
|
type: string
|
||||||
description: The literal string "email".
|
description: A medium from the `3PID Types`_ Appendix, matching the medium requested.
|
||||||
mxid:
|
mxid:
|
||||||
type: string
|
type: string
|
||||||
description: The Matrix user ID associated with the 3pid.
|
description: The Matrix user ID associated with the 3pid.
|
||||||
|
@ -86,6 +87,15 @@ paths:
|
||||||
signatures:
|
signatures:
|
||||||
type: object
|
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 services which show that the association should be trusted, if you trust the verifying identity services.
|
||||||
|
$ref: "../../schemas/server-signatures.yaml"
|
||||||
|
required:
|
||||||
|
- address
|
||||||
|
- medium
|
||||||
|
- mxid
|
||||||
|
- not_before
|
||||||
|
- not_after
|
||||||
|
- ts
|
||||||
|
- signatures
|
||||||
"/bulk_lookup":
|
"/bulk_lookup":
|
||||||
post:
|
post:
|
||||||
summary: Lookup Matrix user IDs for a list of 3pids.
|
summary: Lookup Matrix user IDs for a list of 3pids.
|
||||||
|
@ -110,10 +120,17 @@ paths:
|
||||||
items:
|
items:
|
||||||
type: array
|
type: array
|
||||||
title: 3PID mappings
|
title: 3PID mappings
|
||||||
|
minItems: 2
|
||||||
|
maxItems: 2
|
||||||
items:
|
items:
|
||||||
type: string
|
# TODO: Give real names to these values. Adding a `title` does not work.
|
||||||
title: 3PID medium or address
|
#- type: 3PID Medium
|
||||||
description: an array of arrays containing the `3PID Types`_ with the ``medium`` in first position and the ``address`` in second position.
|
#- type: 3PID Address
|
||||||
|
- type: string
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
An array of arrays containing the `3PID Types`_ with the ``medium``
|
||||||
|
in first position and the ``address`` in second position.
|
||||||
required:
|
required:
|
||||||
- "threepids"
|
- "threepids"
|
||||||
responses:
|
responses:
|
||||||
|
@ -134,9 +151,19 @@ paths:
|
||||||
items:
|
items:
|
||||||
type: array
|
type: array
|
||||||
title: 3PID mappings
|
title: 3PID mappings
|
||||||
|
minItems: 3
|
||||||
|
maxItems: 3
|
||||||
items:
|
items:
|
||||||
type: string
|
# TODO: Give real names to these values. Adding a `title` does not work.
|
||||||
title: 3PID medium or address or the Matrix ID
|
#- type: 3PID Medium
|
||||||
description: an array of array containing the `3PID Types`_ with the ``medium`` in first position, the ``address`` in second position and Matrix ID in third position.
|
#- type: 3PID Address
|
||||||
|
#- type: Matrix User ID
|
||||||
|
- type: string
|
||||||
|
- type: string
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
An array of array containing the `3PID Types`_ with the ``medium``
|
||||||
|
in first position, the ``address`` in second position and Matrix user
|
||||||
|
ID in third position.
|
||||||
required:
|
required:
|
||||||
- "threepids"
|
- "threepids"
|
||||||
|
|
|
@ -18,8 +18,9 @@ info:
|
||||||
host: localhost:8090
|
host: localhost:8090
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
|
||||||
basePath: /_matrix/identity/api/v1
|
basePath: /_matrix/identity/api/v1
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
paths:
|
paths:
|
||||||
|
@ -34,13 +35,13 @@ paths:
|
||||||
indicates that that user was able to read the SMS for that phone
|
indicates that that user was able to read the SMS for that phone
|
||||||
number, and so we validate ownership of the phone number.
|
number, and so we validate ownership of the phone number.
|
||||||
|
|
||||||
Note that Home Servers offer APIs that proxy this API, adding
|
Note that homeservers offer APIs that proxy this API, adding
|
||||||
additional behaviour on top, for example,
|
additional behaviour on top, for example,
|
||||||
``/register/msisdn/requestToken`` is designed specifically for use when
|
``/register/msisdn/requestToken`` is designed specifically for use when
|
||||||
registering an account and therefore will inform the user if the phone
|
registering an account and therefore will inform the user if the phone
|
||||||
number given is already registered on the server.
|
number given is already registered on the server.
|
||||||
|
|
||||||
Note: for backwards compatibility with older versions of this
|
Note: for backwards compatibility with previous drafts of this
|
||||||
specification, the parameters may also be specified as
|
specification, the parameters may also be specified as
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
``application/x-form-www-urlencoded`` data. However, this usage is
|
||||||
deprecated.
|
deprecated.
|
||||||
|
@ -51,11 +52,11 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
example: {
|
example: {
|
||||||
"client_secret": "monkeys_are_GREAT",
|
"client_secret": "monkeys_are_GREAT",
|
||||||
"country": "GB",
|
"country": "GB",
|
||||||
"phone_number": "07700900001",
|
"phone_number": "07700900001",
|
||||||
"send_attempt": 1
|
"send_attempt": 1
|
||||||
}
|
}
|
||||||
properties:
|
properties:
|
||||||
client_secret:
|
client_secret:
|
||||||
type: string
|
type: string
|
||||||
|
@ -91,20 +92,30 @@ paths:
|
||||||
Session created.
|
Session created.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"sid": "1234"
|
"sid": "1234"
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
sid:
|
sid:
|
||||||
type: string
|
type: string
|
||||||
description: The session ID.
|
description: The session ID.
|
||||||
|
required: ['sid']
|
||||||
400:
|
400:
|
||||||
description: |
|
description: |
|
||||||
An error ocurred. Some possible errors are:
|
An error ocurred. Some possible errors are:
|
||||||
|
|
||||||
- ``M_INVALID_ADDRESS``: The phone number provided was invalid.
|
- ``M_INVALID_ADDRESS``: The phone number provided was invalid.
|
||||||
- ``M_SEND_ERROR``: The validation SMS could not be sent.
|
- ``M_SEND_ERROR``: The validation SMS could not be sent.
|
||||||
|
- ``M_DESTINATION_REJECTED``: The identity service cannot deliver an
|
||||||
|
SMS to the provided country or region.
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"errcode": "M_INVALID_ADDRESS",
|
||||||
|
"error": "The phone number is not valid"
|
||||||
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
"/validate/msisdn/submitToken":
|
"/validate/msisdn/submitToken":
|
||||||
post:
|
post:
|
||||||
summary: Validate ownership of a phone number.
|
summary: Validate ownership of a phone number.
|
||||||
|
@ -117,7 +128,7 @@ paths:
|
||||||
associate the phone number address with any Matrix user
|
associate the phone number address with any Matrix user
|
||||||
ID. Specifically, calls to ``/lookup`` will not show a binding.
|
ID. Specifically, calls to ``/lookup`` will not show a binding.
|
||||||
|
|
||||||
Note: for backwards compatibility with older versions of this
|
Note: for backwards compatibility with previous drafts of this
|
||||||
specification, the parameters may also be specified as
|
specification, the parameters may also be specified as
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
``application/x-form-www-urlencoded`` data. However, this usage is
|
||||||
deprecated.
|
deprecated.
|
||||||
|
@ -128,10 +139,10 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
example: {
|
example: {
|
||||||
"sid": "1234",
|
"sid": "1234",
|
||||||
"client_secret": "monkeys_are_GREAT",
|
"client_secret": "monkeys_are_GREAT",
|
||||||
"token": "atoken"
|
"token": "atoken"
|
||||||
}
|
}
|
||||||
properties:
|
properties:
|
||||||
sid:
|
sid:
|
||||||
type: string
|
type: string
|
||||||
|
@ -149,14 +160,15 @@ paths:
|
||||||
The success of the validation.
|
The success of the validation.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"success": true
|
"success": true
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
success:
|
success:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: Whether the validation was successful or not.
|
description: Whether the validation was successful or not.
|
||||||
|
required: ['success']
|
||||||
get:
|
get:
|
||||||
summary: Validate ownership of a phone number.
|
summary: Validate ownership of a phone number.
|
||||||
description: |-
|
description: |-
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# Copyright 2018 Kamax Sàrl
|
# Copyright 2018 Kamax Sàrl
|
||||||
|
# Copyright 2018 New Vector Ltd
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
|
@ -14,7 +15,7 @@
|
||||||
|
|
||||||
swagger: "2.0"
|
swagger: "2.0"
|
||||||
info:
|
info:
|
||||||
title: "Matrix Client-Identity Versions API"
|
title: "Matrix Identity Service Ping API"
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
host: localhost:8090
|
host: localhost:8090
|
||||||
schemes:
|
schemes:
|
||||||
|
@ -25,19 +26,19 @@ produces:
|
||||||
paths:
|
paths:
|
||||||
"/api/v1":
|
"/api/v1":
|
||||||
get:
|
get:
|
||||||
summary: Checks that an Identity server is available at this API endpopint.
|
summary: Checks that an Identity Service is available at this API endpoint.
|
||||||
description: |-
|
description: |-
|
||||||
Checks that an Identity server is available at this API endpopint.
|
Checks that an Identity Service is available at this API endpoint.
|
||||||
|
|
||||||
To discover that an Identity server is available at a specific URL,
|
To discover that an Identity Service is available at a specific URL,
|
||||||
this endpoint can be queried and will return an empty object.
|
this endpoint can be queried and will return an empty object.
|
||||||
|
|
||||||
This is primarly used for auto-discovery and health check purposes
|
This is primarly used for auto-discovery and health check purposes
|
||||||
by entities acting as a client for the Identity server.
|
by entities acting as a client for the Identity Service.
|
||||||
operationId: ping
|
operationId: ping
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: An Identity server is ready to serve requests.
|
description: An Identity Service is ready to serve requests.
|
||||||
examples:
|
examples:
|
||||||
application/json: {}
|
application/json: {}
|
||||||
schema:
|
schema:
|
||||||
|
|
|
@ -18,8 +18,9 @@ info:
|
||||||
host: localhost:8090
|
host: localhost:8090
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
|
||||||
basePath: /_matrix/identity/api/v1
|
basePath: /_matrix/identity/api/v1
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
paths:
|
paths:
|
||||||
|
@ -45,13 +46,25 @@ paths:
|
||||||
The public key exists.
|
The public key exists.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"public_key": "VXuGitF39UH5iRfvbIknlvlAVKgD1BsLDMvBf0pmp7c"
|
"public_key": "VXuGitF39UH5iRfvbIknlvlAVKgD1BsLDMvBf0pmp7c"
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
public_key:
|
public_key:
|
||||||
type: string
|
type: string
|
||||||
|
description: Unpadded Base64 encoded public key.
|
||||||
|
required: ['public_key']
|
||||||
|
404:
|
||||||
|
description:
|
||||||
|
The public key was not found.
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"errcode": "M_NOT_FOUND",
|
||||||
|
"error": "The public key was not found"
|
||||||
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
"/pubkey/isvalid":
|
"/pubkey/isvalid":
|
||||||
get:
|
get:
|
||||||
summary: Check whether a long-term public key is valid.
|
summary: Check whether a long-term public key is valid.
|
||||||
|
@ -72,14 +85,15 @@ paths:
|
||||||
The validity of the public key.
|
The validity of the public key.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"valid": true
|
"valid": true
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
valid:
|
valid:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: Whether the public key is recognised and is currently valid.
|
description: Whether the public key is recognised and is currently valid.
|
||||||
|
required: ['valid']
|
||||||
"/pubkey/ephemeral/isvalid":
|
"/pubkey/ephemeral/isvalid":
|
||||||
get:
|
get:
|
||||||
summary: Check whether a short-term public key is valid.
|
summary: Check whether a short-term public key is valid.
|
||||||
|
@ -100,11 +114,12 @@ paths:
|
||||||
The validity of the public key.
|
The validity of the public key.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"valid": true
|
"valid": true
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
valid:
|
valid:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: Whether the public key is recognised and is currently valid.
|
description: Whether the public key is recognised and is currently valid.
|
||||||
|
required: ['valid']
|
||||||
|
|
|
@ -18,16 +18,17 @@ info:
|
||||||
host: localhost:8090
|
host: localhost:8090
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
- http
|
|
||||||
basePath: /_matrix/identity/api/v1
|
basePath: /_matrix/identity/api/v1
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
paths:
|
paths:
|
||||||
"/store-invite":
|
"/store-invite":
|
||||||
post:
|
post:
|
||||||
summary: Store pending invitations to a user\'s 3pid.
|
summary: Store pending invitations to a user's 3pid.
|
||||||
description: |-
|
description: |-
|
||||||
Store pending invitations to a user\'s 3pid.
|
Store pending invitations to a user's 3pid.
|
||||||
|
|
||||||
In addition to the request parameters specified below, an arbitrary
|
In addition to the request parameters specified below, an arbitrary
|
||||||
number of other parameters may also be specified. These may be used in
|
number of other parameters may also be specified. These may be used in
|
||||||
|
@ -47,6 +48,8 @@ paths:
|
||||||
|
|
||||||
Also, the generated ephemeral public key will be listed as valid on
|
Also, the generated ephemeral public key will be listed as valid on
|
||||||
requests to ``/_matrix/identity/api/v1/pubkey/ephemeral/isvalid``.
|
requests to ``/_matrix/identity/api/v1/pubkey/ephemeral/isvalid``.
|
||||||
|
|
||||||
|
Currently, invites may only be issued for 3pids of the ``email`` medium.
|
||||||
operationId: storeInvite
|
operationId: storeInvite
|
||||||
parameters:
|
parameters:
|
||||||
- in: body
|
- in: body
|
||||||
|
@ -54,11 +57,11 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
example: {
|
example: {
|
||||||
"medium": "email",
|
"medium": "email",
|
||||||
"address": "foo@bar.baz",
|
"address": "foo@bar.baz",
|
||||||
"room_id": "!something:example.tld",
|
"room_id": "!something:example.tld",
|
||||||
"sender": "@bob:example.com"
|
"sender": "@bob:example.com"
|
||||||
}
|
}
|
||||||
properties:
|
properties:
|
||||||
medium:
|
medium:
|
||||||
type: string
|
type: string
|
||||||
|
@ -84,21 +87,22 @@ paths:
|
||||||
description: The generated token.
|
description: The generated token.
|
||||||
public_keys:
|
public_keys:
|
||||||
type: array
|
type: array
|
||||||
description: A list of [server\'s long-term public key, generated ephemeral public key].
|
description: A list of [server's long-term public key, generated ephemeral public key].
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
display_name:
|
display_name:
|
||||||
type: string
|
type: string
|
||||||
description: The generated (redacted) display_name.
|
description: The generated (redacted) display_name.
|
||||||
|
required: ['token', 'public_keys', 'display_name']
|
||||||
example:
|
example:
|
||||||
application/json: {
|
application/json: {
|
||||||
"token": "sometoken",
|
"token": "sometoken",
|
||||||
"public_keys": [
|
"public_keys": [
|
||||||
"serverpublickey",
|
"serverpublickey",
|
||||||
"ephemeralpublickey"
|
"ephemeralpublickey"
|
||||||
],
|
],
|
||||||
"display_name": "f...@b..."
|
"display_name": "f...@b..."
|
||||||
}
|
}
|
||||||
400:
|
400:
|
||||||
description: |
|
description: |
|
||||||
An error has occured.
|
An error has occured.
|
||||||
|
@ -108,7 +112,9 @@ paths:
|
||||||
error code will be ``M_UNRECOGNIZED``.
|
error code will be ``M_UNRECOGNIZED``.
|
||||||
examples:
|
examples:
|
||||||
application/json: {
|
application/json: {
|
||||||
"errcode": "M_THREEPID_IN_USE",
|
"errcode": "M_THREEPID_IN_USE",
|
||||||
"error": "Binding already known",
|
"error": "Binding already known",
|
||||||
"mxid": mxid
|
"mxid": "@alice:example.com"
|
||||||
}
|
}
|
||||||
|
schema:
|
||||||
|
$ref: "../client-server/definitions/errors/error.yaml"
|
||||||
|
|
|
@ -23,7 +23,8 @@ allOf:
|
||||||
hashes:
|
hashes:
|
||||||
type: object
|
type: object
|
||||||
title: Event Hash
|
title: Event Hash
|
||||||
description: Hashes of the PDU, following the algorithm specified in `Signing Events`_.
|
description: |-
|
||||||
|
Content hashes of the PDU, following the algorithm specified in `Signing Events`_.
|
||||||
example: {
|
example: {
|
||||||
"sha256": "thishashcoversallfieldsincasethisisredacted"
|
"sha256": "thishashcoversallfieldsincasethisisredacted"
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,8 +55,8 @@ properties:
|
||||||
prev_events:
|
prev_events:
|
||||||
type: array
|
type: array
|
||||||
description: |-
|
description: |-
|
||||||
Event IDs and hashes of the most recent events in the room that the homeserver was aware
|
Event IDs and reference hashes for the most recent events in the room
|
||||||
of when it made this event.
|
that the homeserver was aware of when it made this event.
|
||||||
items:
|
items:
|
||||||
type: array
|
type: array
|
||||||
maxItems: 2
|
maxItems: 2
|
||||||
|
@ -86,7 +86,7 @@ properties:
|
||||||
auth_events:
|
auth_events:
|
||||||
type: array
|
type: array
|
||||||
description: |-
|
description: |-
|
||||||
An event reference list containing the authorization events that would
|
Event IDs and reference hashes for the authorization events that would
|
||||||
allow this event to be in the room.
|
allow this event to be in the room.
|
||||||
items:
|
items:
|
||||||
type: array
|
type: array
|
||||||
|
|
|
@ -49,7 +49,8 @@ paths:
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: |-
|
description: |-
|
||||||
The fully resolved state for the room, including the authorization
|
The fully resolved state for the room, prior to considering any state
|
||||||
|
changes induced by the requested event. Includes the authorization
|
||||||
chain for the events.
|
chain for the events.
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
|
@ -96,7 +97,8 @@ paths:
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: |-
|
description: |-
|
||||||
The fully resolved state for the room, including the authorization
|
The fully resolved state for the room, prior to considering any state
|
||||||
|
changes induced by the requested event. Includes the authorization
|
||||||
chain for the events.
|
chain for the events.
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
|
|
189
api/server-server/user_keys.yaml
Normal file
189
api/server-server/user_keys.yaml
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
# Copyright 2018 New Vector Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
swagger: '2.0'
|
||||||
|
info:
|
||||||
|
title: "Matrix Federation User Key Management API"
|
||||||
|
version: "1.0.0"
|
||||||
|
host: localhost:8448
|
||||||
|
schemes:
|
||||||
|
- https
|
||||||
|
basePath: /_matrix/federation/v1
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
securityDefinitions:
|
||||||
|
$ref: definitions/security.yaml
|
||||||
|
paths:
|
||||||
|
"/user/keys/claim":
|
||||||
|
post:
|
||||||
|
summary: Claims one-time encryption keys for a user.
|
||||||
|
description: |-
|
||||||
|
Claims one-time keys for use in pre-key messages.
|
||||||
|
operationId: claimUserEncryptionKeys
|
||||||
|
security:
|
||||||
|
- signedRequest: []
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
type: object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
one_time_keys:
|
||||||
|
type: object
|
||||||
|
description: |-
|
||||||
|
The keys to be claimed. A map from user ID, to a map from
|
||||||
|
device ID to algorithm name.
|
||||||
|
additionalProperties:
|
||||||
|
type: object
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: algorithm
|
||||||
|
example: "signed_curve25519"
|
||||||
|
example: {
|
||||||
|
"@alice:example.com": {
|
||||||
|
"JLAFKJWSCS": "signed_curve25519"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
required:
|
||||||
|
- one_time_keys
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: The claimed keys
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
one_time_keys:
|
||||||
|
type: object
|
||||||
|
description: |-
|
||||||
|
One-time keys for the queried devices. A map from user ID, to a
|
||||||
|
map from devices to a map from ``<algorithm>:<key_id>`` to the key object.
|
||||||
|
additionalProperties:
|
||||||
|
type: object
|
||||||
|
additionalProperties:
|
||||||
|
type:
|
||||||
|
- string
|
||||||
|
- object
|
||||||
|
required: ['one_time_keys']
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"one_time_keys": {
|
||||||
|
"@alice:example.com": {
|
||||||
|
"JLAFKJWSCS": {
|
||||||
|
"signed_curve25518:AAAAHg": {
|
||||||
|
"key": "zKbLg+NrIjpnagy+pIY6uPL4ZwEG2v+8F9lmgsnlZzs",
|
||||||
|
"signatures": {
|
||||||
|
"@alice:example.com": {
|
||||||
|
"ed25519:JLAFKJWSCS": "FLWxXqGbwrb8SM3Y795eB6OA8bwBcoMZFXBqnTn58AYWZSqiD45tlBVcDa2L7RwdKXebW/VzDlnfVJ+9jok1Bw"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"/user/keys/query":
|
||||||
|
post:
|
||||||
|
summary: Download device identity keys.
|
||||||
|
description: |-
|
||||||
|
Returns the current devices and identity keys for the given users.
|
||||||
|
operationId: queryUserEncryptionKeys
|
||||||
|
security:
|
||||||
|
- signedRequest: []
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
type: object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
device_keys:
|
||||||
|
type: object
|
||||||
|
description: |-
|
||||||
|
The keys to be downloaded. A map from user ID, to a list of
|
||||||
|
device IDs, or to an empty list to indicate all devices for the
|
||||||
|
corresponding user.
|
||||||
|
additionalProperties:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: "Device ID"
|
||||||
|
example: {
|
||||||
|
"@alice:example.com": []
|
||||||
|
}
|
||||||
|
required: ['device_keys']
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: The device information.
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
device_keys:
|
||||||
|
type: object
|
||||||
|
description: |-
|
||||||
|
Information on the queried devices. A map from user ID, to a
|
||||||
|
map from device ID to device information. For each device,
|
||||||
|
the information returned will be the same as uploaded via
|
||||||
|
``/keys/upload``, with the addition of an ``unsigned``
|
||||||
|
property.
|
||||||
|
additionalProperties:
|
||||||
|
type: object
|
||||||
|
additionalProperties:
|
||||||
|
allOf:
|
||||||
|
- $ref: ../client-server/definitions/device_keys.yaml
|
||||||
|
properties:
|
||||||
|
unsigned:
|
||||||
|
title: UnsignedDeviceInfo
|
||||||
|
type: object
|
||||||
|
description: |-
|
||||||
|
Additional data added to the device key information
|
||||||
|
by intermediate servers, and not covered by the
|
||||||
|
signatures.
|
||||||
|
properties:
|
||||||
|
device_display_name:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
The display name which the user set on the device.
|
||||||
|
required: ['device_keys']
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"device_keys": {
|
||||||
|
"@alice:example.com": {
|
||||||
|
"JLAFKJWSCS": {
|
||||||
|
"user_id": "@alice:example.com",
|
||||||
|
"device_id": "JLAFKJWSCS",
|
||||||
|
"algorithms": [
|
||||||
|
"m.olm.v1.curve25519-aes-sha256",
|
||||||
|
"m.megolm.v1.aes-sha"
|
||||||
|
],
|
||||||
|
"keys": {
|
||||||
|
"curve25519:JLAFKJWSCS": "3C5BFWi2Y8MaVvjM8M22DBmh24PmgR0nPvJOIArzgyI",
|
||||||
|
"ed25519:JLAFKJWSCS": "lEuiRJBit0IG6nUf5pUzWTUEsRVVe/HJkoKuEww9ULI"
|
||||||
|
},
|
||||||
|
"signatures": {
|
||||||
|
"@alice:example.com": {
|
||||||
|
"ed25519:JLAFKJWSCS": "dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/a+myXS367WT6NAIcBA"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"unsigned": {
|
||||||
|
"device_display_name": "Alice's mobile phone"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
0
changelogs/application_service.rst
Normal file
0
changelogs/application_service.rst
Normal file
1
changelogs/application_service/newsfragments/.gitignore
vendored
Normal file
1
changelogs/application_service/newsfragments/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
!.gitignore
|
30
changelogs/application_service/pyproject.toml
Normal file
30
changelogs/application_service/pyproject.toml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
[tool.towncrier]
|
||||||
|
filename = "../application_service.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"
|
||||||
|
showcontent = true
|
1
changelogs/client_server/newsfragments/1176.new
Normal file
1
changelogs/client_server/newsfragments/1176.new
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Specify how to control the power level required for ``@room``
|
1
changelogs/client_server/newsfragments/1359.feature
Normal file
1
changelogs/client_server/newsfragments/1359.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add ``.well-known`` server discovery method
|
1
changelogs/client_server/newsfragments/1465.feature
Normal file
1
changelogs/client_server/newsfragments/1465.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Share room decryption keys between devices
|
1
changelogs/client_server/newsfragments/1547.feature
Normal file
1
changelogs/client_server/newsfragments/1547.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add a common standard for user, room, and group mentions in messages.
|
|
@ -0,0 +1 @@
|
||||||
|
Update all event examples to be accurate representations of their associated events.
|
1
changelogs/client_server/newsfragments/1567.feature
Normal file
1
changelogs/client_server/newsfragments/1567.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Document the ``validated_at`` and ``added_at`` fields on ``GET /acount/3pid``.
|
1
changelogs/client_server/newsfragments/1567.new
Normal file
1
changelogs/client_server/newsfragments/1567.new
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add ``POST /account/3pid/delete``
|
1
changelogs/client_server/newsfragments/1589.feature
Normal file
1
changelogs/client_server/newsfragments/1589.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add an ``inhibit_login`` registration option.
|
|
@ -0,0 +1 @@
|
||||||
|
Document the 403 error for sending state events.
|
|
@ -0,0 +1 @@
|
||||||
|
specify how to handle multiple olm sessions with the same device
|
1
changelogs/client_server/newsfragments/780.feature
Normal file
1
changelogs/client_server/newsfragments/780.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add more presence options to the ``set_presence`` parameter of ``/sync``. (Thanks @mujx!)
|
0
changelogs/identity_service.rst
Normal file
0
changelogs/identity_service.rst
Normal file
1
changelogs/identity_service/newsfragments/.gitignore
vendored
Normal file
1
changelogs/identity_service/newsfragments/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
!.gitignore
|
30
changelogs/identity_service/pyproject.toml
Normal file
30
changelogs/identity_service/pyproject.toml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
[tool.towncrier]
|
||||||
|
filename = "../identity_service.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"
|
||||||
|
showcontent = true
|
6
changelogs/push_gateway.rst
Normal file
6
changelogs/push_gateway.rst
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
r0.1.0
|
||||||
|
======
|
||||||
|
|
||||||
|
The first release of the Push Gateway specification. This release contains
|
||||||
|
a single endpoint, ``/notify``, that pushers may use to send push notifications
|
||||||
|
to clients.
|
1
changelogs/push_gateway/newsfragments/.gitignore
vendored
Normal file
1
changelogs/push_gateway/newsfragments/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
!.gitignore
|
30
changelogs/push_gateway/pyproject.toml
Normal file
30
changelogs/push_gateway/pyproject.toml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
[tool.towncrier]
|
||||||
|
filename = "../push_gateway.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"
|
||||||
|
showcontent = true
|
0
changelogs/server_server.rst
Normal file
0
changelogs/server_server.rst
Normal file
1
changelogs/server_server/newsfragments/.gitignore
vendored
Normal file
1
changelogs/server_server/newsfragments/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
!.gitignore
|
30
changelogs/server_server/pyproject.toml
Normal file
30
changelogs/server_server/pyproject.toml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
[tool.towncrier]
|
||||||
|
filename = "../server_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"
|
||||||
|
showcontent = true
|
|
@ -44,16 +44,51 @@ except ImportError as e:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
def load_file(path):
|
||||||
|
print("Loading reference: %s" % path)
|
||||||
|
if not path.startswith("file://"):
|
||||||
|
raise Exception("Bad ref: %s" % (path,))
|
||||||
|
path = path[len("file://"):]
|
||||||
|
with open(path, "r") as f:
|
||||||
|
if path.endswith(".json"):
|
||||||
|
return json.load(f)
|
||||||
|
else:
|
||||||
|
# We have to assume it's YAML because some of the YAML examples
|
||||||
|
# do not have file extensions.
|
||||||
|
return yaml.load(f)
|
||||||
|
|
||||||
|
|
||||||
|
def resolve_references(path, schema):
|
||||||
|
if isinstance(schema, dict):
|
||||||
|
# do $ref first
|
||||||
|
if '$ref' in schema:
|
||||||
|
value = schema['$ref']
|
||||||
|
path = os.path.abspath(os.path.join(os.path.dirname(path), value))
|
||||||
|
ref = load_file("file://" + path)
|
||||||
|
result = resolve_references(path, ref)
|
||||||
|
del schema['$ref']
|
||||||
|
else:
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
for key, value in schema.items():
|
||||||
|
result[key] = resolve_references(path, value)
|
||||||
|
return result
|
||||||
|
elif isinstance(schema, list):
|
||||||
|
return [resolve_references(path, value) for value in schema]
|
||||||
|
else:
|
||||||
|
return schema
|
||||||
|
|
||||||
|
|
||||||
def check_example_file(examplepath, schemapath):
|
def check_example_file(examplepath, schemapath):
|
||||||
with open(examplepath) as f:
|
with open(examplepath) as f:
|
||||||
example = yaml.load(f)
|
example = resolve_references(examplepath, json.load(f))
|
||||||
|
|
||||||
with open(schemapath) as f:
|
with open(schemapath) as f:
|
||||||
schema = yaml.load(f)
|
schema = yaml.load(f)
|
||||||
|
|
||||||
fileurl = "file://" + os.path.abspath(schemapath)
|
fileurl = "file://" + os.path.abspath(schemapath)
|
||||||
schema["id"] = fileurl
|
schema["id"] = fileurl
|
||||||
resolver = jsonschema.RefResolver(schemapath, schema, handlers={"file": load_yaml})
|
resolver = jsonschema.RefResolver(schemapath, schema, handlers={"file": load_file})
|
||||||
|
|
||||||
print ("Checking schema for: %r %r" % (examplepath, schemapath))
|
print ("Checking schema for: %r %r" % (examplepath, schemapath))
|
||||||
try:
|
try:
|
||||||
|
@ -71,6 +106,10 @@ def check_example_dir(exampledir, schemadir):
|
||||||
if filename.startswith("."):
|
if filename.startswith("."):
|
||||||
# Skip over any vim .swp files.
|
# Skip over any vim .swp files.
|
||||||
continue
|
continue
|
||||||
|
cwd = os.path.basename(os.path.dirname(os.path.join(root, filename)))
|
||||||
|
if cwd == "core":
|
||||||
|
# Skip checking the underlying definitions
|
||||||
|
continue
|
||||||
examplepath = os.path.join(root, filename)
|
examplepath = os.path.join(root, filename)
|
||||||
schemapath = examplepath.replace(exampledir, schemadir)
|
schemapath = examplepath.replace(exampledir, schemadir)
|
||||||
if schemapath.find("#") >= 0:
|
if schemapath.find("#") >= 0:
|
||||||
|
@ -85,14 +124,6 @@ def check_example_dir(exampledir, schemadir):
|
||||||
raise ValueError("Error validating examples")
|
raise ValueError("Error validating examples")
|
||||||
|
|
||||||
|
|
||||||
def load_yaml(path):
|
|
||||||
if not path.startswith("file:///"):
|
|
||||||
raise Exception("Bad ref: %s" % (path,))
|
|
||||||
path = path[len("file://"):]
|
|
||||||
with open(path, "r") as f:
|
|
||||||
return yaml.load(f)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
check_example_dir("examples", "schema")
|
check_example_dir("examples", "schema")
|
||||||
|
|
6
event-schemas/examples/core/event.json
Normal file
6
event-schemas/examples/core/event.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"content": {
|
||||||
|
"key": "value"
|
||||||
|
},
|
||||||
|
"type": "org.example.custom.event"
|
||||||
|
}
|
4
event-schemas/examples/core/room_edu.json
Normal file
4
event-schemas/examples/core/room_edu.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"$ref": "event.json",
|
||||||
|
"room_id": "!jEsUZKDJdhlrceRyVU:domain.com"
|
||||||
|
}
|
10
event-schemas/examples/core/room_event.json
Normal file
10
event-schemas/examples/core/room_event.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"$ref": "event.json",
|
||||||
|
"event_id": "$143273582443PhrSn:domain.com",
|
||||||
|
"room_id": "!jEsUZKDJdhlrceRyVU:domain.com",
|
||||||
|
"sender": "@example:domain.com",
|
||||||
|
"origin_server_ts": 1432735824653,
|
||||||
|
"unsigned": {
|
||||||
|
"age": 1234
|
||||||
|
}
|
||||||
|
}
|
4
event-schemas/examples/core/state_event.json
Normal file
4
event-schemas/examples/core/state_event.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"$ref": "room_event.json",
|
||||||
|
"state_key": "ArbitraryString"
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.call.answer",
|
||||||
"content": {
|
"content": {
|
||||||
"version" : 0,
|
"version" : 0,
|
||||||
"call_id": "12345",
|
"call_id": "12345",
|
||||||
|
@ -8,10 +9,5 @@
|
||||||
"type" : "answer",
|
"type" : "answer",
|
||||||
"sdp" : "v=0\r\no=- 6584580628695956864 2 IN IP4 127.0.0.1[...]"
|
"sdp" : "v=0\r\no=- 6584580628695956864 2 IN IP4 127.0.0.1[...]"
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.call.answer",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.call.candidates",
|
||||||
"content": {
|
"content": {
|
||||||
"version" : 0,
|
"version" : 0,
|
||||||
"call_id": "12345",
|
"call_id": "12345",
|
||||||
|
@ -10,10 +11,5 @@
|
||||||
"candidate": "candidate:863018703 1 udp 2122260223 10.9.64.156 43670 typ host generation 0"
|
"candidate": "candidate:863018703 1 udp 2122260223 10.9.64.156 43670 typ host generation 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.call.candidates",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.call.hangup",
|
||||||
"content": {
|
"content": {
|
||||||
"version" : 0,
|
"version" : 0,
|
||||||
"call_id": "12345"
|
"call_id": "12345"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.call.hangup",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.call.invite",
|
||||||
"content": {
|
"content": {
|
||||||
"version" : 0,
|
"version" : 0,
|
||||||
"call_id": "12345",
|
"call_id": "12345",
|
||||||
|
@ -8,10 +9,5 @@
|
||||||
"type" : "offer",
|
"type" : "offer",
|
||||||
"sdp" : "v=0\r\no=- 6584580628695956864 2 IN IP4 127.0.0.1[...]"
|
"sdp" : "v=0\r\no=- 6584580628695956864 2 IN IP4 127.0.0.1[...]"
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.call.invite",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
{
|
{
|
||||||
|
"$ref": "core/event.json",
|
||||||
"type": "m.direct",
|
"type": "m.direct",
|
||||||
"content": {
|
"content": {
|
||||||
"@bob:example.com": [
|
"@bob:example.com": [
|
||||||
"!abcdefgh:example.com",
|
"!abcdefgh:example.com",
|
||||||
"!hgfedcba:example.com"
|
"!hgfedcba:example.com"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
14
event-schemas/examples/m.forwarded_room_key
Normal file
14
event-schemas/examples/m.forwarded_room_key
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"content": {
|
||||||
|
"algorithm": "m.megolm.v1.aes-sha2",
|
||||||
|
"room_id": "!Cuyf34gef24t:localhost",
|
||||||
|
"session_id": "X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ",
|
||||||
|
"session_key": "AgAAAADxKHa9uFxcXzwYoNueL5Xqi69IkD4sni8Llf...",
|
||||||
|
"sender_key": "RF3s+E7RkTQTGF2d8Deol0FkQvgII2aJDf3/Jp5mxVU",
|
||||||
|
"sender_claimed_ed25519_key": "aj40p+aw64yPIdsxoog8jhPu9i7l7NcFRecuOQblE3Y",
|
||||||
|
"forwarding_curve25519_key_chain": [
|
||||||
|
"hPQNcabIABgGnx3/ACv/jmMmiQHoeFfuLB17tzWp6Hw"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"type": "m.forwarded_room_key"
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
"$ref": "core/event.json",
|
||||||
"type": "m.ignored_user_list",
|
"type": "m.ignored_user_list",
|
||||||
"content": {
|
"content": {
|
||||||
"ignored_users": {
|
"ignored_users": {
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
{
|
{
|
||||||
|
"$ref": "core/event.json",
|
||||||
|
"sender": "@example:localhost",
|
||||||
|
"type": "m.presence",
|
||||||
"content": {
|
"content": {
|
||||||
"avatar_url": "mxc://localhost:wefuiwegh8742w",
|
"avatar_url": "mxc://localhost:wefuiwegh8742w",
|
||||||
"last_active_ago": 2478593,
|
"last_active_ago": 2478593,
|
||||||
"presence": "online",
|
"presence": "online",
|
||||||
"currently_active": false
|
"currently_active": false
|
||||||
},
|
}
|
||||||
"sender": "@example:localhost",
|
|
||||||
"type": "m.presence"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"type": "m.receipt",
|
"$ref": "core/room_edu.json",
|
||||||
"room_id": "!KpjVgQyZpzBwvMBsnT:matrix.org",
|
"type": "m.receipt",
|
||||||
"content": {
|
"content": {
|
||||||
"$1435641916114394fHBLK:matrix.org": {
|
"$1435641916114394fHBLK:matrix.org": {
|
||||||
"m.read": {
|
"m.read": {
|
||||||
"@rikj:jki.re": {
|
"@rikj:jki.re": {
|
||||||
"ts": 1436451550453
|
"ts": 1436451550453
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
"content": {
|
"state_key": "domain.com",
|
||||||
"aliases": ["#somewhere:localhost", "#another:localhost"]
|
|
||||||
},
|
|
||||||
"state_key": "localhost",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.aliases",
|
"type": "m.room.aliases",
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
"content": {
|
||||||
"sender": "@example:localhost"
|
"aliases": ["#somewhere:domain.com", "#another:domain.com"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.avatar",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"info": {
|
"info": {
|
||||||
"h": 398,
|
"h": 398,
|
||||||
|
@ -7,12 +9,6 @@
|
||||||
"mimetype": "image/jpeg",
|
"mimetype": "image/jpeg",
|
||||||
"size": 31037
|
"size": 31037
|
||||||
},
|
},
|
||||||
"url": "mxc://localhost/JWEIFJgwEIhweiWJE"
|
"url": "mxc://domain.com/JWEIFJgwEIhweiWJE"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.avatar",
|
|
||||||
"state_key": "",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.canonical_alias",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"alias": "#somewhere:localhost"
|
"alias": "#somewhere:localhost"
|
||||||
},
|
}
|
||||||
"state_key": "",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.canonical_alias",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
"content": {
|
|
||||||
"creator": "@example:localhost"
|
|
||||||
},
|
|
||||||
"state_key": "",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.create",
|
"type": "m.room.create",
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
"state_key": "",
|
||||||
"sender": "@example:localhost"
|
"content": {
|
||||||
|
"creator": "@example:domain.com",
|
||||||
|
"room_version": "1",
|
||||||
|
"m.federate": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
{
|
{
|
||||||
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.encrypted",
|
||||||
"content": {
|
"content": {
|
||||||
"algorithm": "m.megolm.v1.aes-sha2",
|
"algorithm": "m.megolm.v1.aes-sha2",
|
||||||
"ciphertext": "AwgAEnACgAkLmt6qF84IK++J7UDH2Za1YVchHyprqTqsg...",
|
"ciphertext": "AwgAEnACgAkLmt6qF84IK++J7UDH2Za1YVchHyprqTqsg...",
|
||||||
"device_id": "RJYKSTBOIE",
|
"device_id": "RJYKSTBOIE",
|
||||||
"sender_key": "IlRMeOPX2e0MurIyfWEucYBRVOEEUMrOHqn/8mLqMjA",
|
"sender_key": "IlRMeOPX2e0MurIyfWEucYBRVOEEUMrOHqn/8mLqMjA",
|
||||||
"session_id": "X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ"
|
"session_id": "X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ"
|
||||||
},
|
}
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"origin_server_ts": 1476648761524,
|
|
||||||
"sender": "@example:localhost",
|
|
||||||
"type": "m.room.encrypted"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
|
"$ref": "core/room_event.json",
|
||||||
"type": "m.room.encrypted",
|
"type": "m.room.encrypted",
|
||||||
"sender": "@example:localhost",
|
|
||||||
"content": {
|
"content": {
|
||||||
"algorithm": "m.olm.v1.curve25519-aes-sha2",
|
"algorithm": "m.olm.v1.curve25519-aes-sha2",
|
||||||
"sender_key": "Szl29ksW/L8yZGWAX+8dY1XyFi+i5wm+DRhTGkbMiwU",
|
"sender_key": "Szl29ksW/L8yZGWAX+8dY1XyFi+i5wm+DRhTGkbMiwU",
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
{
|
{
|
||||||
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.encryption",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"algorithm": "m.megolm.v1.aes-sha2",
|
"algorithm": "m.megolm.v1.aes-sha2",
|
||||||
"rotation_period_ms": 604800000,
|
"rotation_period_ms": 604800000,
|
||||||
"rotation_period_msgs": 100
|
"rotation_period_msgs": 100
|
||||||
},
|
}
|
||||||
"event_id": "$WLGTSEFJJKJ:localhost",
|
|
||||||
"origin_server_ts": 1476648761524,
|
|
||||||
"sender": "@example:localhost",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"state_key": "",
|
|
||||||
"type": "m.room.encryption"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242353,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.guest_access",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"guest_access": "can_join"
|
"guest_access": "can_join"
|
||||||
},
|
}
|
||||||
"state_key": "",
|
|
||||||
"origin_server_ts": 1431961217938,
|
|
||||||
"event_id": "$WLGTSEFSEG:localhost",
|
|
||||||
"type": "m.room.guest_access",
|
|
||||||
"room_id": "!Cuyf34gef24u:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.history_visibility",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"history_visibility": "shared"
|
"history_visibility": "shared"
|
||||||
},
|
}
|
||||||
"state_key": "",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.history_visibility",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.join_rules",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"join_rule": "public"
|
"join_rule": "public"
|
||||||
},
|
}
|
||||||
"state_key": "",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.join_rules",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"state_key": "@alice:domain.com",
|
||||||
|
"type": "m.room.member",
|
||||||
"content": {
|
"content": {
|
||||||
"membership": "join",
|
"membership": "join",
|
||||||
"avatar_url": "mxc://localhost/SEsfnsuifSDFSSEF#auto",
|
"avatar_url": "mxc://domain.com/SEsfnsuifSDFSSEF#auto",
|
||||||
"displayname": "Alice Margatroid"
|
"displayname": "Alice Margatroid"
|
||||||
},
|
}
|
||||||
"state_key": "@alice:localhost",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.member",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "m.room.member",
|
||||||
"content": {
|
"content": {
|
||||||
"membership": "invite",
|
"membership": "invite",
|
||||||
"avatar_url": "mxc://localhost/SEsfnsuifSDFSSEF#auto",
|
"avatar_url": "mxc://domain.com/SEsfnsuifSDFSSEF#auto",
|
||||||
"displayname": "Alice Margatroid"
|
"displayname": "Alice Margatroid"
|
||||||
},
|
},
|
||||||
"unsigned": {
|
"unsigned": {
|
||||||
|
"age": 1234,
|
||||||
"invite_room_state": [
|
"invite_room_state": [
|
||||||
{
|
{
|
||||||
"type": "m.room.name",
|
"type": "m.room.name",
|
||||||
|
@ -22,11 +23,5 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
}
|
||||||
"state_key": "@alice:localhost",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.member",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "m.room.member",
|
||||||
"content": {
|
"content": {
|
||||||
"membership": "invite",
|
"membership": "invite",
|
||||||
"avatar_url": "mxc://localhost/SEsfnsuifSDFSSEF#auto",
|
"avatar_url": "mxc://domain.com/SEsfnsuifSDFSSEF#auto",
|
||||||
"displayname": "Alice Margatroid",
|
"displayname": "Alice Margatroid",
|
||||||
"third_party_invite": {
|
"third_party_invite": {
|
||||||
"display_name": "alice",
|
"display_name": "alice",
|
||||||
"signed": {
|
"signed": {
|
||||||
"mxid": "@alice:localhost",
|
"mxid": "@alice:domain.com",
|
||||||
"signatures": {
|
"signatures": {
|
||||||
"magic.forest": {
|
"magic.forest": {
|
||||||
"ed25519:3": "fQpGIW1Snz+pwLZu6sTy2aHy/DYWWTspTJRPyNp0PKkymfIsNffysMl6ObMMFdIJhk6g6pwlIqZ54rxo8SLmAg"
|
"ed25519:3": "fQpGIW1Snz+pwLZu6sTy2aHy/DYWWTspTJRPyNp0PKkymfIsNffysMl6ObMMFdIJhk6g6pwlIqZ54rxo8SLmAg"
|
||||||
|
@ -16,11 +16,5 @@
|
||||||
"token": "abc123"
|
"token": "abc123"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
"state_key": "@alice:localhost",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.member",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,14 @@
|
||||||
{
|
{
|
||||||
"age": 146,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "Bee Gees - Stayin' Alive",
|
"body": "Bee Gees - Stayin' Alive",
|
||||||
"url": "mxc://localhost/ffed755USFFxlgbQYZGtryd",
|
"url": "mxc://domain.com/ffed755USFFxlgbQYZGtryd",
|
||||||
"info": {
|
"info": {
|
||||||
"duration": 2140786,
|
"duration": 2140786,
|
||||||
"size": 1563685,
|
"size": 1563685,
|
||||||
"mimetype": "audio/mpeg"
|
"mimetype": "audio/mpeg"
|
||||||
},
|
},
|
||||||
"msgtype": "m.audio"
|
"msgtype": "m.audio"
|
||||||
},
|
}
|
||||||
"event_id": "$143273582443PhrSn:localhost",
|
|
||||||
"origin_server_ts": 1432735824653,
|
|
||||||
"room_id": "!jEsUZKDJdhlrceRyVU:localhost",
|
|
||||||
"type": "m.room.message",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "thinks this is an example emote",
|
"body": "thinks this is an example emote",
|
||||||
"msgtype": "m.emote",
|
"msgtype": "m.emote",
|
||||||
"format": "org.matrix.custom.html",
|
"format": "org.matrix.custom.html",
|
||||||
"formatted_body": "thinks <b>this</b> is an example emote"
|
"formatted_body": "thinks <b>this</b> is an example emote"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.message",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"age": 146,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "something-important.doc",
|
"body": "something-important.doc",
|
||||||
"filename": "something-important.doc",
|
"filename": "something-important.doc",
|
||||||
|
@ -8,11 +9,6 @@
|
||||||
"size": 46144
|
"size": 46144
|
||||||
},
|
},
|
||||||
"msgtype": "m.file",
|
"msgtype": "m.file",
|
||||||
"url": "mxc://localhost/FHyPlCeYUSFFxlgbQYZmoEoe"
|
"url": "mxc://domain.com/FHyPlCeYUSFFxlgbQYZmoEoe"
|
||||||
},
|
}
|
||||||
"event_id": "$143273582443PhrSn:localhost",
|
|
||||||
"origin_server_ts": 1432735824653,
|
|
||||||
"room_id": "!jEsUZKDJdhlrceRyVU:localhost",
|
|
||||||
"type": "m.room.message",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "filename.jpg",
|
"body": "filename.jpg",
|
||||||
"info": {
|
"info": {
|
||||||
|
@ -8,12 +9,7 @@
|
||||||
"mimetype": "image/jpeg",
|
"mimetype": "image/jpeg",
|
||||||
"size": 31037
|
"size": 31037
|
||||||
},
|
},
|
||||||
"url": "mxc://localhost/JWEIFJgwEIhweiWJE",
|
"url": "mxc://domain.com/JWEIFJgwEIhweiWJE",
|
||||||
"msgtype": "m.image"
|
"msgtype": "m.image"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.message",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
{
|
{
|
||||||
"age": 146,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "Big Ben, London, UK",
|
"body": "Big Ben, London, UK",
|
||||||
"geo_uri": "geo:51.5008,0.1247",
|
"geo_uri": "geo:51.5008,0.1247",
|
||||||
"info": {
|
"info": {
|
||||||
"thumbnail_url": "mxc://localhost/FHyPlCeYUSFFxlgbQYZmoEoe",
|
"thumbnail_url": "mxc://domain.com/FHyPlCeYUSFFxlgbQYZmoEoe",
|
||||||
"thumbnail_info": {
|
"thumbnail_info": {
|
||||||
"mimetype": "image/jpeg",
|
"mimetype": "image/jpeg",
|
||||||
"size": 46144,
|
"size": 46144,
|
||||||
|
@ -13,10 +14,5 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"msgtype": "m.location"
|
"msgtype": "m.location"
|
||||||
},
|
}
|
||||||
"event_id": "$143273582443PhrSn:localhost",
|
|
||||||
"origin_server_ts": 1432735824653,
|
|
||||||
"room_id": "!jEsUZKDJdhlrceRyVU:localhost",
|
|
||||||
"type": "m.room.message",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "This is an example notice",
|
"body": "This is an example notice",
|
||||||
"msgtype": "m.notice",
|
"msgtype": "m.notice",
|
||||||
"format": "org.matrix.custom.html",
|
"format": "org.matrix.custom.html",
|
||||||
"formatted_body": "This is an <strong>example</strong> notice"
|
"formatted_body": "This is an <strong>example</strong> notice"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.message",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "This is an example text message",
|
"body": "This is an example text message",
|
||||||
"msgtype": "m.text",
|
"msgtype": "m.text",
|
||||||
"format": "org.matrix.custom.html",
|
"format": "org.matrix.custom.html",
|
||||||
"formatted_body": "<b>This is an example text message</b>"
|
"formatted_body": "<b>This is an example text message</b>"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.message",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
{
|
{
|
||||||
"age": 146,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "Gangnam Style",
|
"body": "Gangnam Style",
|
||||||
"url": "mxc://localhost/a526eYUSFFxlgbQYZmo442",
|
"url": "mxc://domain.com/a526eYUSFFxlgbQYZmo442",
|
||||||
"info": {
|
"info": {
|
||||||
"thumbnail_url": "mxc://localhost/FHyPlCeYUSFFxlgbQYZmoEoe",
|
"thumbnail_url": "mxc://domain.com/FHyPlCeYUSFFxlgbQYZmoEoe",
|
||||||
"thumbnail_info": {
|
"thumbnail_info": {
|
||||||
"mimetype": "image/jpeg",
|
"mimetype": "image/jpeg",
|
||||||
"size": 46144,
|
"size": 46144,
|
||||||
|
@ -18,10 +19,5 @@
|
||||||
"mimetype": "video/mp4"
|
"mimetype": "video/mp4"
|
||||||
},
|
},
|
||||||
"msgtype": "m.video"
|
"msgtype": "m.video"
|
||||||
},
|
}
|
||||||
"event_id": "$143273582443PhrSn:localhost",
|
|
||||||
"origin_server_ts": 1432735824653,
|
|
||||||
"room_id": "!jEsUZKDJdhlrceRyVU:localhost",
|
|
||||||
"type": "m.room.message",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.room.message.feedback",
|
||||||
"content": {
|
"content": {
|
||||||
"type": "delivered",
|
"type": "delivered",
|
||||||
"target_event_id": "$WEIGFHFW:localhost"
|
"target_event_id": "$WEIGFHFW:localhost"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.message.feedback",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.name",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"name": "The room name"
|
"name": "The room name"
|
||||||
},
|
}
|
||||||
"state_key": "",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.name",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
"content": {
|
|
||||||
"pinned": ["$someevent:localhost"]
|
|
||||||
},
|
|
||||||
"state_key": "",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.pinned_events",
|
"type": "m.room.pinned_events",
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
"state_key": "",
|
||||||
"sender": "@example:localhost"
|
"content": {
|
||||||
|
"pinned": ["$someevent:domain.com"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.power_levels",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"ban": 50,
|
"ban": 50,
|
||||||
"events": {
|
"events": {
|
||||||
|
@ -14,12 +16,9 @@
|
||||||
"users": {
|
"users": {
|
||||||
"@example:localhost": 100
|
"@example:localhost": 100
|
||||||
},
|
},
|
||||||
"users_default": 0
|
"users_default": 0,
|
||||||
},
|
"notifications": {
|
||||||
"state_key": "",
|
"room": 20
|
||||||
"origin_server_ts": 1431961217939,
|
}
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
}
|
||||||
"type": "m.room.power_levels",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,8 @@
|
||||||
{
|
{
|
||||||
"unsigned": {
|
"$ref": "core/room_event.json",
|
||||||
"age": 242352
|
"type": "m.room.redaction",
|
||||||
},
|
"redacts": "$fukweghifu23:localhost",
|
||||||
"content": {
|
"content": {
|
||||||
"reason": "Spamming"
|
"reason": "Spamming"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.redaction",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"redacts": "$fukweghifu23:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.third_party_invite",
|
||||||
|
"state_key": "pc98",
|
||||||
"content": {
|
"content": {
|
||||||
"display_name": "Alice Margatroid",
|
"display_name": "Alice Margatroid",
|
||||||
"key_validity_url": "https://magic.forest/verifykey",
|
"key_validity_url": "https://magic.forest/verifykey",
|
||||||
|
@ -8,11 +10,5 @@
|
||||||
"public_key": "def456",
|
"public_key": "def456",
|
||||||
"key_validity_url": "https://magic.forest/verifykey"
|
"key_validity_url": "https://magic.forest/verifykey"
|
||||||
}]
|
}]
|
||||||
},
|
}
|
||||||
"state_key": "pc98",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.third_party_invite",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/state_event.json",
|
||||||
|
"type": "m.room.topic",
|
||||||
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"topic": "A room topic"
|
"topic": "A room topic"
|
||||||
},
|
}
|
||||||
"state_key": "",
|
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.room.topic",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
{
|
{
|
||||||
|
"$ref": "core/event.json",
|
||||||
|
"type": "m.room_key",
|
||||||
"content": {
|
"content": {
|
||||||
"algorithm": "m.megolm.v1.aes-sha2",
|
"algorithm": "m.megolm.v1.aes-sha2",
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
"room_id": "!Cuyf34gef24t:localhost",
|
||||||
"session_id": "X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ",
|
"session_id": "X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ",
|
||||||
"session_key": "AgAAAADxKHa9uFxcXzwYoNueL5Xqi69IkD4sni8LlfJL7qNBEY..."
|
"session_key": "AgAAAADxKHa9uFxcXzwYoNueL5Xqi69IkD4sni8LlfJL7qNBEY..."
|
||||||
},
|
}
|
||||||
"type": "m.room_key"
|
|
||||||
}
|
}
|
||||||
|
|
8
event-schemas/examples/m.room_key_request#cancel_request
Normal file
8
event-schemas/examples/m.room_key_request#cancel_request
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"content": {
|
||||||
|
"action": "cancel_request",
|
||||||
|
"requesting_device_id": "RJYKSTBOIE",
|
||||||
|
"request_id": "1495474790150.19"
|
||||||
|
},
|
||||||
|
"type": "m.room_key_request"
|
||||||
|
}
|
14
event-schemas/examples/m.room_key_request#request
Normal file
14
event-schemas/examples/m.room_key_request#request
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"content": {
|
||||||
|
"body": {
|
||||||
|
"algorithm": "m.megolm.v1.aes-sha2",
|
||||||
|
"room_id": "!Cuyf34gef24t:localhost",
|
||||||
|
"session_id": "X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ",
|
||||||
|
"sender_key": "RF3s+E7RkTQTGF2d8Deol0FkQvgII2aJDf3/Jp5mxVU"
|
||||||
|
},
|
||||||
|
"action": "request",
|
||||||
|
"requesting_device_id": "RJYKSTBOIE",
|
||||||
|
"request_id": "1495474790150.19"
|
||||||
|
},
|
||||||
|
"type": "m.room_key_request"
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"age": 242352,
|
"$ref": "core/room_event.json",
|
||||||
|
"type": "m.sticker",
|
||||||
"content": {
|
"content": {
|
||||||
"body": "Landing",
|
"body": "Landing",
|
||||||
"info": {
|
"info": {
|
||||||
|
@ -16,10 +17,5 @@
|
||||||
"size": 73602
|
"size": 73602
|
||||||
},
|
},
|
||||||
"url": "mxc://matrix.org/sHhqkFCvSkFwtmvtETOtKnLP"
|
"url": "mxc://matrix.org/sHhqkFCvSkFwtmvtETOtKnLP"
|
||||||
},
|
}
|
||||||
"origin_server_ts": 1431961217939,
|
|
||||||
"event_id": "$WLGTSEFSEF:localhost",
|
|
||||||
"type": "m.sticker",
|
|
||||||
"room_id": "!Cuyf34gef24t:localhost",
|
|
||||||
"sender": "@example:localhost"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
"$ref": "core/event.json",
|
||||||
"type": "m.tag",
|
"type": "m.tag",
|
||||||
"content": {
|
"content": {
|
||||||
"tags": {
|
"tags": {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"type": "m.typing",
|
"$ref": "core/room_edu.json",
|
||||||
"room_id": "!z0mnsuiwhifuhwwfw:matrix.org",
|
"type": "m.typing",
|
||||||
"content": {
|
"content": {
|
||||||
"user_ids": ["@alice:matrix.org", "@bob:example.com"]
|
"user_ids": ["@alice:matrix.org", "@bob:example.com"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,11 @@ properties:
|
||||||
state_key:
|
state_key:
|
||||||
description: A unique key which defines the overwriting semantics for this piece
|
description: A unique key which defines the overwriting semantics for this piece
|
||||||
of room state. This value is often a zero-length string. The presence of this
|
of room state. This value is often a zero-length string. The presence of this
|
||||||
key makes this event a State Event. The key MUST NOT start with '_'.
|
key makes this event a State Event.
|
||||||
|
|
||||||
|
State keys starting with an ``@`` are reserved for referencing user IDs, such
|
||||||
|
as room members. With the exception of a few events, state events set with a
|
||||||
|
given user's ID as the state key MUST only be set by that user.
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- state_key
|
- state_key
|
||||||
|
|
59
event-schemas/schema/m.forwarded_room_key
Normal file
59
event-schemas/schema/m.forwarded_room_key
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
allOf:
|
||||||
|
- $ref: core-event-schema/event.yaml
|
||||||
|
|
||||||
|
description: |-
|
||||||
|
This event type is used to forward keys for end-to-end encryption. Typically
|
||||||
|
it is encrypted as an ``m.room.encrypted`` event, then sent as a `to-device`_
|
||||||
|
event.
|
||||||
|
properties:
|
||||||
|
content:
|
||||||
|
properties:
|
||||||
|
algorithm:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
The encryption algorithm the key in this event is to be used with.
|
||||||
|
room_id:
|
||||||
|
type: string
|
||||||
|
description: The room where the key is used.
|
||||||
|
sender_key:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
The Curve25519 key of the device which initiated the session originally.
|
||||||
|
session_id:
|
||||||
|
type: string
|
||||||
|
description: The ID of the session that the key is for.
|
||||||
|
session_key:
|
||||||
|
type: string
|
||||||
|
description: The key to be exchanged.
|
||||||
|
sender_claimed_ed25519_key:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
The Ed25519 key of the device which initiated the session originally.
|
||||||
|
It is 'claimed' because the receiving device has no way to tell that the
|
||||||
|
original room_key actually came from a device which owns the private part of
|
||||||
|
this key unless they have done device verification.
|
||||||
|
forwarding_curve25519_key_chain:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
Chain of Curve25519 keys. It starts out empty, but each time the
|
||||||
|
key is forwarded to another device, the previous sender in the chain is added
|
||||||
|
to the end of the list. For example, if the key is forwarded from A to B to
|
||||||
|
C, this field is empty between A and B, and contains A's Curve25519 key between
|
||||||
|
B and C.
|
||||||
|
required:
|
||||||
|
- algorithm
|
||||||
|
- room_id
|
||||||
|
- session_id
|
||||||
|
- session_key
|
||||||
|
- sender_claimed_ed25519_key
|
||||||
|
- forwarding_curve25519_key_chain
|
||||||
|
- sender_key
|
||||||
|
type: object
|
||||||
|
type:
|
||||||
|
enum:
|
||||||
|
- m.forwarded_room_key
|
||||||
|
type: string
|
||||||
|
type: object
|
|
@ -105,7 +105,10 @@ properties:
|
||||||
title: EventContent
|
title: EventContent
|
||||||
type: object
|
type: object
|
||||||
state_key:
|
state_key:
|
||||||
description: The ``user_id`` this membership event relates to.
|
description: |-
|
||||||
|
The ``user_id`` this membership event relates to. In all cases except for when ``membership`` is
|
||||||
|
``join``, the user ID sending the event does not need to match the user ID in the ``state_key``,
|
||||||
|
unlike other events. Regular authorisation rules still apply.
|
||||||
type: string
|
type: string
|
||||||
type:
|
type:
|
||||||
enum:
|
enum:
|
||||||
|
|
|
@ -85,6 +85,18 @@ properties:
|
||||||
``user_id`` is mentioned in the ``users`` key. Defaults to 0 if
|
``user_id`` is mentioned in the ``users`` key. Defaults to 0 if
|
||||||
unspecified.
|
unspecified.
|
||||||
type: integer
|
type: integer
|
||||||
|
notifications:
|
||||||
|
properties:
|
||||||
|
room:
|
||||||
|
type: integer
|
||||||
|
description: The level required to trigger an ``@room`` notification. Defaults to 50 if unspecified.
|
||||||
|
additionalProperties:
|
||||||
|
type: integer
|
||||||
|
description: |-
|
||||||
|
The power level requirements for specific notification types.
|
||||||
|
This is a mapping from ``key`` to power level for that notifications key.
|
||||||
|
title: Notifications
|
||||||
|
type: object
|
||||||
type: object
|
type: object
|
||||||
state_key:
|
state_key:
|
||||||
description: A zero-length string.
|
description: A zero-length string.
|
||||||
|
|
61
event-schemas/schema/m.room_key_request
Normal file
61
event-schemas/schema/m.room_key_request
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
---
|
||||||
|
allOf:
|
||||||
|
- $ref: core-event-schema/event.yaml
|
||||||
|
|
||||||
|
description: |-
|
||||||
|
This event type is used to request keys for end-to-end encryption. It is sent as an
|
||||||
|
unencrypted `to-device`_ event.
|
||||||
|
properties:
|
||||||
|
content:
|
||||||
|
properties:
|
||||||
|
body:
|
||||||
|
description: |-
|
||||||
|
Information about the requested key. Required when ``action`` is
|
||||||
|
``request``.
|
||||||
|
properties:
|
||||||
|
algorithm:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
The encryption algorithm the requested key in this event is to be used
|
||||||
|
with.
|
||||||
|
room_id:
|
||||||
|
type: string
|
||||||
|
description: The room where the key is used.
|
||||||
|
sender_key:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
The Curve25519 key of the device which initiated the session originally.
|
||||||
|
session_id:
|
||||||
|
type: string
|
||||||
|
description: The ID of the session that the key is for.
|
||||||
|
required:
|
||||||
|
- algorithm
|
||||||
|
- room_id
|
||||||
|
- session_id
|
||||||
|
- sender_key
|
||||||
|
type: object
|
||||||
|
title: RequestedKeyInfo
|
||||||
|
action:
|
||||||
|
enum:
|
||||||
|
- request
|
||||||
|
- cancel_request
|
||||||
|
type: string
|
||||||
|
requesting_device_id:
|
||||||
|
description: ID of the device requesting the key.
|
||||||
|
type: string
|
||||||
|
request_id:
|
||||||
|
description: |-
|
||||||
|
A random string uniquely identifying the request for a key. If the key is
|
||||||
|
requested multiple times, it should be reused. It should also reused in order
|
||||||
|
to cancel a request.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- action
|
||||||
|
- requesting_device_id
|
||||||
|
- request_id
|
||||||
|
type: object
|
||||||
|
type:
|
||||||
|
enum:
|
||||||
|
- m.room_key_request
|
||||||
|
type: string
|
||||||
|
type: object
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue