matrix-spec/api/server-server/joins.yaml

327 lines
12 KiB
YAML
Raw Normal View History

2018-07-13 05:35:12 +02:00
# 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 Join Room API"
version: "1.0.0"
host: localhost:8448
schemes:
- https
basePath: /_matrix/federation/%SERVER_MAJOR_VERSION%
consumes:
- application/json
2018-07-13 05:35:12 +02:00
produces:
- application/json
securityDefinitions:
$ref: definitions/security.yaml
2018-07-13 05:35:12 +02:00
paths:
"/make_join/{roomId}/{userId}":
get:
summary: Get information required to make a join event for a room
description: |-
Asks the receiving server to return information that the sending
server will need to prepare a join event to get into the room.
operationId: makeJoin
security:
- signedRequest: []
2018-07-13 05:35:12 +02:00
parameters:
- in: path
name: roomId
type: string
2018-07-18 18:59:04 +02:00
description: The room ID that is about to be joined.
2018-07-13 05:35:12 +02:00
required: true
x-example: "!abc123:matrix.org"
- in: path
name: userId
type: string
2018-07-18 18:59:04 +02:00
description: The user ID the join event will be for.
2018-07-13 05:35:12 +02:00
required: true
x-example: "@someone:example.org"
- in: query
type: array
items:
type: string
name: ver
description: |-
The room versions the sending server has support for. Defaults
to ``[1]``.
x-example: ["1", "2"]
2018-07-13 05:35:12 +02:00
responses:
200:
description: |-
An unsigned event that the server may now use as a template
for the rest of the `Joining Rooms`_ handshake.
schema:
allOf:
- $ref: "definitions/unsigned_pdu.yaml"
- type: object
properties:
# Note: we override a bunch of parameters to change their descriptions
sender:
type: string
2018-07-18 18:59:04 +02:00
description: The user ID of the joining member.
2018-07-13 05:35:12 +02:00
example: "@someone:example.org"
origin:
type: string
2018-07-18 18:59:04 +02:00
description: The name of the resident homeserver.
2018-07-13 05:35:12 +02:00
example: "matrix.org"
origin_server_ts:
type: integer
format: int64
2018-07-18 18:59:04 +02:00
description: A timestamp added by the resident homeserver.
2018-07-13 05:35:12 +02:00
example: 1234567890
type:
type: string
2018-07-18 18:59:04 +02:00
description: The value ``m.room.member``.
2018-07-13 05:35:12 +02:00
example: "m.room.member"
state_key:
type: string
2018-07-18 18:59:04 +02:00
description: The user ID of the joining member.
2018-07-13 05:35:12 +02:00
example: "@someone:example.org"
content:
type: object
title: Membership Event Content
2018-07-18 18:59:04 +02:00
description: The content of the event.
2018-07-13 05:35:12 +02:00
example: {"membership": "join"}
properties:
membership:
type: string
2018-07-26 16:36:12 +02:00
description: The value ``join``.
2018-07-13 05:35:12 +02:00
example: "join"
required: ['membership']
depth:
type: integer
2018-07-18 18:59:04 +02:00
description: This field must be present but is ignored; it may be 0.
2018-07-13 05:35:12 +02:00
example: 12
auth_events:
type: array
description: |-
An event reference list containing the authorization events that would
allow the member to join the room. This should normally be the
``m.room.create``, ``m.room.power_levels``, and ``m.room.join_rules``
events.
2018-07-13 05:35:12 +02:00
items:
type: array
maxItems: 2
minItems: 2
items:
- type: string
title: Event ID
example: "$abc123:matrix.org"
- type: object
title: Event Hash
example: {
"sha256": "abase64encodedsha256hashshouldbe43byteslong"
}
properties:
sha256:
type: string
2018-07-18 18:59:04 +02:00
description: The event hash.
2018-07-13 05:35:12 +02:00
example: abase64encodedsha256hashshouldbe43byteslong
required: ['sha256']
redacts:
type: string
2018-07-18 18:59:04 +02:00
description: Not used.
2018-07-13 05:35:12 +02:00
required:
# Every other field is already flagged as required by the $ref
- state_key
examples:
application/json: {
"$ref": "examples/unsigned_pdu.json",
"type": "m.room.member",
"state_key": "@someone:example.org",
2018-07-13 05:35:12 +02:00
"content": {
"membership": "join"
},
"auth_events": [
["$room_cre4te_3vent:matrix.org", {"sha256": "abase64encodedsha256hashshouldbe43byteslong"}],
["$room_j0in_rul3s_3vent:matrix.org", {"sha256": "abase64encodedsha256hashshouldbe43byteslong"}],
["$room_p0wer_l3vels_3vent:matrix.org", {"sha256": "abase64encodedsha256hashshouldbe43byteslong"}]
]
2018-07-13 05:35:12 +02:00
}
400:
description: |-
The request is invalid or the room the server is attempting
to join has a version that is not listed in the ``ver``
parameters.
The error should be passed through to clients so that they
may give better feedback to users.
schema:
allOf:
- $ref: "../client-server/definitions/errors/error.yaml"
- type: object
properties:
room_version:
type: string
description: |-
The version of the room. Required if the ``errcode``
is ``M_INCOMPATIBLE_ROOM_VERSION``.
examples:
application/json: {
"errcode": "M_INCOMPATIBLE_ROOM_VERSION",
"error": "Your homeserver does not support the features required to join this room",
"room_version": "3"
}
2018-07-13 05:35:12 +02:00
"/send_join/{roomId}/{eventId}":
put:
summary: Submit a signed join event to a resident server
description: |-
Submits a signed join event to the resident server for it
to accept it into the room's graph.
operationId: sendJoin
security:
- signedRequest: []
2018-07-13 05:35:12 +02:00
parameters:
- in: path
name: roomId
type: string
2018-07-18 18:59:04 +02:00
description: The room ID that is about to be joined.
2018-07-13 05:35:12 +02:00
required: true
x-example: "!abc123:matrix.org"
- in: path
name: eventId
type: string
2018-07-18 18:59:04 +02:00
description: The event ID for the join event.
2018-07-13 05:35:12 +02:00
required: true
x-example: "$abc123:example.org"
- in: body
name: body
type: object
required: true
schema:
allOf:
- $ref: "definitions/pdu.yaml"
- type: object
properties:
# Note: we override a bunch of parameters to change their descriptions
sender:
type: string
2018-07-18 18:59:04 +02:00
description: The user ID of the joining member.
2018-07-13 05:35:12 +02:00
example: "@someone:example.org"
origin:
type: string
2018-07-18 18:59:04 +02:00
description: The name of the joining homeserver.
2018-07-13 05:35:12 +02:00
example: "matrix.org"
origin_server_ts:
type: integer
format: int64
2018-07-18 18:59:04 +02:00
description: A timestamp added by the joining homeserver.
2018-07-13 05:35:12 +02:00
example: 1234567890
type:
type: string
2018-07-18 18:59:04 +02:00
description: The value ``m.room.member``.
2018-07-13 05:35:12 +02:00
example: "m.room.member"
state_key:
type: string
2018-07-18 18:59:04 +02:00
description: The user ID of the joining member.
2018-07-13 05:35:12 +02:00
example: "@someone:example.org"
content:
type: object
title: Membership Event Content
2018-07-18 18:59:04 +02:00
description: The content of the event.
2018-07-13 05:35:12 +02:00
example: {"membership": "join"}
properties:
membership:
type: string
2018-07-18 18:59:04 +02:00
description: The value ``join``.
2018-07-13 05:35:12 +02:00
example: "join"
required: ['membership']
depth:
type: integer
2018-07-18 18:59:04 +02:00
description: This field must be present but is ignored; it may be 0.
2018-07-13 05:35:12 +02:00
example: 12
auth_events:
type: array
description: |-
An event reference list containing the authorization events that would
2018-07-18 18:59:04 +02:00
allow the member to join the room.
2018-07-13 05:35:12 +02:00
items:
type: array
maxItems: 2
minItems: 2
items:
- type: string
title: Event ID
example: "$abc123:matrix.org"
- type: object
title: Event Hash
example: {
"sha256": "abase64encodedsha256hashshouldbe43byteslong"
}
properties:
sha256:
type: string
2018-07-18 18:59:04 +02:00
description: The event hash.
2018-07-13 05:35:12 +02:00
example: abase64encodedsha256hashshouldbe43byteslong
required: ['sha256']
redacts:
type: string
2018-07-18 18:59:04 +02:00
description: Not used.
2018-07-13 05:35:12 +02:00
required:
# Every other field is already flagged as required by the $ref
- state_key
example: {
"$ref": "examples/pdu.json",
"type": "m.room.member",
"state_key": "@someone:example.org",
2018-07-13 05:35:12 +02:00
"content": {
"membership": "join"
}
}
responses:
200:
description: |-
2018-07-18 18:59:04 +02:00
The full state for the room, having accepted the join event.
2018-07-13 05:35:12 +02:00
schema:
type: array
minItems: 2
maxItems: 2
items:
- type: integer
2018-07-18 18:59:04 +02:00
description: The value ``200``.
2018-07-13 05:35:12 +02:00
example: 200
- type: object
title: Room State
2018-07-18 18:59:04 +02:00
description: The state for the room.
2018-07-13 05:35:12 +02:00
properties:
origin:
type: string
description: The resident server's DNS name.
2018-07-13 05:35:12 +02:00
auth_chain:
type: array
2018-07-18 18:59:04 +02:00
description: The auth chain.
2018-07-13 05:35:12 +02:00
items:
type: object
schema:
$ref: "definitions/pdu.yaml"
2018-07-13 05:35:12 +02:00
state:
type: array
2018-07-18 18:59:04 +02:00
description: The room state.
2018-07-13 05:35:12 +02:00
items:
type: object
schema:
$ref: "definitions/pdu.yaml"
2018-08-03 00:43:24 +02:00
required: ["auth_chain", "state", "origin"]
2018-07-13 05:35:12 +02:00
examples:
application/json: [
200,
{
"origin": "matrix.org",
"auth_chain": [{"$ref": "examples/pdu.json"}],
"state": [{"$ref": "examples/pdu.json"}]
2018-07-13 05:35:12 +02:00
}
]