Compare commits

..

1 commit

Author SHA1 Message Date
Johannes Marbach 01b653e2d1
Merge c94b54dab1 into 4ed55a60ec 2025-05-21 10:21:53 +02:00
13 changed files with 134 additions and 94 deletions

View file

@ -1 +0,0 @@
Rooms published in `/publicRooms` don't necessarily have `public` join rules or `world_readable` history visibility.

View file

@ -1 +0,0 @@
Fix typo: as->has.

View file

@ -1 +0,0 @@
Rooms published in `/publicRooms` don't necessarily have `public` join rules or `world_readable` history visibility.

View file

@ -492,10 +492,10 @@ via the query string). It is expected that the application service use
the transactions pushed to it to handle events rather than syncing with the transactions pushed to it to handle events rather than syncing with
the user implied by `sender_localpart`. the user implied by `sender_localpart`.
#### Published room directories #### Application service room directories
Application services can maintain their own published room directories for Application services can maintain their own room directories for their
their defined third-party protocols. These directories may be accessed by defined third-party protocols. These room directories may be accessed by
clients through additional parameters on the `/publicRooms` clients through additional parameters on the `/publicRooms`
client-server endpoint. client-server endpoint.

View file

@ -2846,35 +2846,7 @@ re-invited.
{{% http-api spec="client-server" api="banning" %}} {{% http-api spec="client-server" api="banning" %}}
### Published room directory ### Listing rooms
Homeservers MAY publish a room directory to allow users to discover rooms. A room
can have one of two visibility settings in the directory:
- `public`: The room will be shown in the published room directory.
- `private`: The room will be hidden from the published room directory.
Clients can define a room's initial visibility in the directory via the `visibility`
parameter in [`/createRoom`](#post_matrixclientv3createroom). Irrespective of room
creation, clients can query and change a room's visibility in the directory through
the endpoints listed below, provided that the server permits this.
{{% boxes/warning %}}
The visibility setting merely defines whether a room is included in the published
room directory or not. It doesn't make any guarantees about the room's
[join rule](#mroomjoin_rules) or [history visibility](#room-history-visibility).
In particular, a visibility setting of `public` should not be confused with a `public`
join rule. Rooms with a join rule of `knock`, for instance, could reasonably be published
in the directory, too.
Similarly, a visibility setting of `public` does not necessarily imply a `world_readable`
history visibility.
To increase performance or by preference, servers MAY apply additional filters when listing the
directory, for instance, by automatically excluding rooms with `invite` join rules
that are not `world_readable` regardless of their visibility.
{{% /boxes/warning %}}
{{% http-api spec="client-server" api="list_public_rooms" %}} {{% http-api spec="client-server" api="list_public_rooms" %}}

View file

@ -528,7 +528,7 @@ messages, Alice only sends one request event (an event with type
`m.room.message` with `msgtype: m.key.verification.request`, rather than an `m.room.message` with `msgtype: m.key.verification.request`, rather than an
event with type `m.key.verification.request`), to the room. In addition, Alice event with type `m.key.verification.request`), to the room. In addition, Alice
does not send an `m.key.verification.cancel` event to tell Bob's other devices does not send an `m.key.verification.cancel` event to tell Bob's other devices
that the request has already been accepted; instead, when Bob's other devices that the request as already been accepted; instead, when Bob's other devices
see his `m.key.verification.ready` event, they will know that the request has see his `m.key.verification.ready` event, they will know that the request has
already been accepted, and that they should ignore the request. already been accepted, and that they should ignore the request.

View file

@ -1048,10 +1048,11 @@ user's Matrix ID and the token delivered when the invite was stored,
this verification will prove that the `m.room.member` invite event comes this verification will prove that the `m.room.member` invite event comes
from the user owning the invited third-party identifier. from the user owning the invited third-party identifier.
## Published Room Directory ## Public Room Directory
To complement the [room directory in the Client-Server API](/client-server-api#published-room-directory), To complement the [Client-Server
homeservers need a way to query the published rooms of another server. API](/client-server-api)'s room directory,
homeservers need a way to query the public rooms for another server.
This can be done by making a request to the `/publicRooms` endpoint for This can be done by making a request to the `/publicRooms` endpoint for
the server the room directory should be retrieved for. the server the room directory should be retrieved for.

View file

@ -13,21 +13,18 @@
# limitations under the License. # limitations under the License.
openapi: 3.1.0 openapi: 3.1.0
info: info:
title: Matrix Client-Server Application Service Published Room Directory API title: Matrix Client-Server Application Service Room Directory API
version: 1.0.0 version: 1.0.0
paths: paths:
"/directory/list/appservice/{networkId}/{roomId}": "/directory/list/appservice/{networkId}/{roomId}":
put: put:
summary: |- summary: Updates a room's visibility in the application service's room directory.
Updates a room's visibility in the application service's published room
directory.
description: |- description: |-
Updates the visibility of a given room in the application service's Updates the visibility of a given room on the application service's room
published room directory. directory.
This API is similar to the This API is similar to the room directory visibility API used by clients
[visibility API](/client-server-api#put_matrixclientv3directorylistroomroomid) to update the homeserver's more general room directory.
used by clients to update the homeserver's more general published room directory.
This API requires the use of an application service access token (`as_token`) This API requires the use of an application service access token (`as_token`)
instead of a typical client's access_token. This API cannot be invoked by instead of a typical client's access_token. This API cannot be invoked by

View file

@ -87,9 +87,12 @@ paths:
- public - public
- private - private
description: |- description: |-
The room's visibility in the server's A `public` visibility indicates that the room will be shown
[published room directory](/client-server-api#published-room-directory). in the published room list. A `private` visibility will hide
Defaults to `private`. the room from the published room list. Rooms default to
`private` visibility if this key is not included. NB: This
should not be confused with `join_rules` which also uses the
word `public`.
room_alias_name: room_alias_name:
type: string type: string
description: |- description: |-

View file

@ -13,7 +13,7 @@
# limitations under the License. # limitations under the License.
type: object type: object
title: "PublishedRoomsChunk" title: "PublicRoomsChunk"
properties: properties:
canonical_alias: canonical_alias:
type: string type: string

View file

@ -13,15 +13,28 @@
# limitations under the License. # limitations under the License.
type: object type: object
description: A list of the published rooms on the server. description: A list of the rooms on the server.
required: ["chunk"] required: ["chunk"]
properties: properties:
chunk: chunk:
type: array type: array
description: |- description: |-
A paginated chunk of published rooms. A paginated chunk of public rooms.
items: items:
$ref: "public_rooms_chunk.yaml" allOf:
- $ref: "public_rooms_chunk.yaml"
- type: object
title: PublicRoomsChunk
properties:
# Override description of join_rule
join_rule:
type: string
description: |-
The room's join rule. When not present, the room is assumed to
be `public`. Note that rooms with `invite` join rules are not
expected here, but rooms with `knock` rules are given their
near-public nature.
example: "public"
next_batch: next_batch:
type: string type: string
description: |- description: |-
@ -37,7 +50,7 @@ properties:
total_room_count_estimate: total_room_count_estimate:
type: integer type: integer
description: |- description: |-
An estimate on the total number of published rooms, if the An estimate on the total number of public rooms, if the
server has an estimate. server has an estimate.
example: { example: {
"chunk": [ "chunk": [

View file

@ -13,15 +13,14 @@
# limitations under the License. # limitations under the License.
openapi: 3.1.0 openapi: 3.1.0
info: info:
title: Matrix Client-Server Published Room Directory API title: Matrix Client-Server Room Directory API
version: 1.0.0 version: 1.0.0
paths: paths:
"/directory/list/room/{roomId}": "/directory/list/room/{roomId}":
get: get:
summary: Gets the visibility of a room in the directory summary: Gets the visibility of a room in the directory
description: |- description: Gets the visibility of a given room on the server's public room
Gets the visibility of a given room in the server's directory.
published room directory.
operationId: getRoomVisibilityOnDirectory operationId: getRoomVisibilityOnDirectory
parameters: parameters:
- in: path - in: path
@ -33,7 +32,7 @@ paths:
type: string type: string
responses: responses:
"200": "200":
description: The visibility of the room in the directory. description: The visibility of the room in the directory
content: content:
application/json: application/json:
schema: schema:
@ -51,7 +50,7 @@ paths:
"visibility": "public" "visibility": "public"
} }
"404": "404":
description: The room is not known to the server. description: The room is not known to the server
content: content:
application/json: application/json:
schema: schema:
@ -65,13 +64,14 @@ paths:
tags: tags:
- Room discovery - Room discovery
put: put:
summary: Sets the visibility of a room in the directory summary: Sets the visibility of a room in the room directory
description: |- description: |-
Sets the visibility of a given room in the server's published room directory. Sets the visibility of a given room in the server's public room
directory.
Servers MAY implement additional access control checks, for instance, Servers may choose to implement additional access control checks
to ensure that a room's visibility can only be changed by the room creator here, for instance that room visibility can only be changed by
or a server administrator. the room creator or a server administrator.
operationId: setRoomVisibilityOnDirectory operationId: setRoomVisibilityOnDirectory
security: security:
- accessTokenQuery: [] - accessTokenQuery: []
@ -97,11 +97,11 @@ paths:
- public - public
description: |- description: |-
The new visibility setting for the room. The new visibility setting for the room.
Defaults to `public`. Defaults to 'public'.
example: { example: {
"visibility": "public" "visibility": "public"
} }
description: The new visibility for the room in the published room directory. description: The new visibility for the room on the room directory.
required: true required: true
responses: responses:
"200": "200":
@ -114,7 +114,7 @@ paths:
response: response:
value: {} value: {}
"404": "404":
description: The room is not known to the server. description: The room is not known to the server
content: content:
application/json: application/json:
schema: schema:
@ -129,9 +129,9 @@ paths:
- Room discovery - Room discovery
/publicRooms: /publicRooms:
get: get:
summary: Lists a server's published room directory summary: Lists the public rooms on the server.
description: |- description: |-
Lists a server's published room directory. Lists the public rooms on the server.
This API returns paginated responses. The rooms are ordered by the number This API returns paginated responses. The rooms are ordered by the number
of joined members, with the largest rooms first. of joined members, with the largest rooms first.
@ -154,13 +154,13 @@ paths:
- in: query - in: query
name: server name: server
description: |- description: |-
The server to fetch the published room directory from. Defaults The server to fetch the public room lists from. Defaults to the
to the local server. Case sensitive. local server. Case sensitive.
schema: schema:
type: string type: string
responses: responses:
"200": "200":
description: A list of the published rooms on the server. description: A list of the rooms on the server.
content: content:
application/json: application/json:
schema: schema:
@ -168,9 +168,9 @@ paths:
tags: tags:
- Room discovery - Room discovery
post: post:
summary: Lists a server's published room directory with an optional filter summary: Lists the public rooms on the server with optional filter.
description: |- description: |-
Lists a server's published room directory with an optional filter. Lists the public rooms on the server, with optional filter.
This API returns paginated responses. The rooms are ordered by the number This API returns paginated responses. The rooms are ordered by the number
of joined members, with the largest rooms first. of joined members, with the largest rooms first.
@ -182,8 +182,8 @@ paths:
- in: query - in: query
name: server name: server
description: |- description: |-
The server to fetch the published room directory from. Defaults The server to fetch the public room lists from. Defaults to the
to the local server. Case sensitive. local server. Case sensitive.
schema: schema:
type: string type: string
requestBody: requestBody:
@ -253,7 +253,7 @@ paths:
required: true required: true
responses: responses:
"200": "200":
description: A filtered list of the published rooms on the server. description: A list of the rooms on the server.
content: content:
application/json: application/json:
schema: schema:

View file

@ -13,20 +13,16 @@
# limitations under the License. # limitations under the License.
openapi: 3.1.0 openapi: 3.1.0
info: info:
title: Matrix Federation Published Room Directory API title: Matrix Federation Public Rooms API
version: 1.0.0 version: 1.0.0
paths: paths:
/publicRooms: /publicRooms:
get: get:
summary: Lists the server's published room directory summary: Get all the public rooms for a homeserver
description: |- description: |-
Lists the server's published room directory. Gets all the public rooms for the homeserver. This should not return
rooms that are listed on another homeserver's directory, just those
This API returns paginated responses. The rooms are ordered by the number listed on the receiving homeserver's directory.
of joined members, with the largest rooms first.
This SHOULD not return rooms that are listed on another homeserver's directory,
just those listed on the receiving homeserver's directory.
operationId: getPublicRooms operationId: getPublicRooms
security: security:
- signedRequest: [] - signedRequest: []
@ -66,18 +62,21 @@ paths:
type: string type: string
responses: responses:
"200": "200":
description: A list of the published rooms on the server. description: The public room list for the homeserver.
content: content:
application/json: application/json:
schema: schema:
$ref: ../client-server/definitions/public_rooms_response.yaml $ref: ../client-server/definitions/public_rooms_response.yaml
post: post:
summary: Lists the server's published room directory with an optional filter summary: Gets the public rooms on the server with optional filter.
description: |- description: |-
Lists the server's published room directory with an optional filter. Lists the public rooms on the server, with optional filter.
This API returns paginated responses. The rooms are ordered by the number This API returns paginated responses. The rooms are ordered by the number
of joined members, with the largest rooms first. of joined members, with the largest rooms first.
Note that this endpoint receives and returns the same format that is seen
in the Client-Server API's `POST /publicRooms` endpoint.
operationId: queryPublicRooms operationId: queryPublicRooms
security: security:
- signedRequest: [] - signedRequest: []
@ -148,11 +147,69 @@ paths:
required: true required: true
responses: responses:
"200": "200":
description: A filtered list of the published rooms on the server. description: A list of the rooms on the server.
content: content:
application/json: application/json:
schema: schema:
$ref: ../client-server/definitions/public_rooms_response.yaml type: object
description: A list of the rooms on the server.
required:
- chunk
properties:
chunk:
title: PublicRoomsChunks
type: array
description: A paginated chunk of public rooms.
items:
allOf:
- $ref: ../client-server/definitions/public_rooms_chunk.yaml
- type: object
properties:
# Override description of join_rule
join_rule:
type: string
description: |-
The room's join rule. When not present, the room is assumed to
be `public`. Note that rooms with `invite` join rules are not
expected here, but rooms with `knock` rules are given their
near-public nature.
next_batch:
type: string
description: |-
A pagination token for the response. The absence of this token
means there are no more results to fetch and the client should
stop paginating.
prev_batch:
type: string
description: |-
A pagination token that allows fetching previous results. The
absence of this token means there are no results before this
batch, i.e. this is the first batch.
total_room_count_estimate:
type: integer
description: |-
An estimate on the total number of public rooms, if the
server has an estimate.
examples:
response:
value: {
"chunk": [
{
"avatar_url": "mxc://bleecker.street/CHEDDARandBRIE",
"guest_can_join": false,
"name": "CHEESE",
"num_joined_members": 37,
"room_id": "!ol19s:bleecker.street",
"topic": "Tasty tasty cheese",
"world_readable": true,
"join_rule": "public",
"room_type": "m.space"
}
],
"next_batch": "p190q",
"prev_batch": "p1902",
"total_room_count_estimate": 115
}
servers: servers:
- url: "{protocol}://{hostname}{basePath}" - url: "{protocol}://{hostname}{basePath}"
variables: variables: