aboutsummaryrefslogtreecommitdiff
path: root/roomserver/api
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-07-02 15:41:18 +0100
committerGitHub <noreply@github.com>2020-07-02 15:41:18 +0100
commit4c1e6597c0ea82f5390b73f35036db58e65542cc (patch)
tree641e916f8b4f753f5d45ec674f3512fdb9fbb74b /roomserver/api
parent55bc82c439057f379361871c863aa9611d70fce2 (diff)
Replace publicroomsapi with a combination of clientapi/roomserver/currentstateserver (#1174)
* Use content_value instead of membership * Fix build * Replace publicroomsapi with a combination of clientapi/roomserver/currentstateserver - All public rooms paths are now handled by clientapi - Requests to (un)publish rooms are sent to the roomserver via `PerformPublish` which are stored in a new `published_table.go` - Requests for public rooms are handled in clientapi by: * Fetch all room IDs which are published using `QueryPublishedRooms` on the roomserver. * Apply pagination parameters to the slice. * Do a `QueryBulkStateContent` request to the currentstateserver to pull out required state event *content* (not entire events). * Aggregate and return the chunk. Mostly but not fully implemented (DB queries on currentstateserver are missing) * Fix pq query * Make postgres work * Make sqlite work * Fix tests * Unbreak pagination tests * Linting
Diffstat (limited to 'roomserver/api')
-rw-r--r--roomserver/api/api.go12
-rw-r--r--roomserver/api/api_trace.go19
-rw-r--r--roomserver/api/perform.go10
-rw-r--r--roomserver/api/query.go10
4 files changed, 51 insertions, 0 deletions
diff --git a/roomserver/api/api.go b/roomserver/api/api.go
index 26ec8ca1..0a5845dd 100644
--- a/roomserver/api/api.go
+++ b/roomserver/api/api.go
@@ -36,6 +36,18 @@ type RoomserverInternalAPI interface {
res *PerformLeaveResponse,
) error
+ PerformPublish(
+ ctx context.Context,
+ req *PerformPublishRequest,
+ res *PerformPublishResponse,
+ )
+
+ QueryPublishedRooms(
+ ctx context.Context,
+ req *QueryPublishedRoomsRequest,
+ res *QueryPublishedRoomsResponse,
+ ) error
+
// Query the latest events and state for a room from the room server.
QueryLatestEventsAndState(
ctx context.Context,
diff --git a/roomserver/api/api_trace.go b/roomserver/api/api_trace.go
index 8645b6f2..bdebc57b 100644
--- a/roomserver/api/api_trace.go
+++ b/roomserver/api/api_trace.go
@@ -57,6 +57,25 @@ func (t *RoomserverInternalAPITrace) PerformLeave(
return err
}
+func (t *RoomserverInternalAPITrace) PerformPublish(
+ ctx context.Context,
+ req *PerformPublishRequest,
+ res *PerformPublishResponse,
+) {
+ t.Impl.PerformPublish(ctx, req, res)
+ util.GetLogger(ctx).Infof("PerformPublish req=%+v res=%+v", js(req), js(res))
+}
+
+func (t *RoomserverInternalAPITrace) QueryPublishedRooms(
+ ctx context.Context,
+ req *QueryPublishedRoomsRequest,
+ res *QueryPublishedRoomsResponse,
+) error {
+ err := t.Impl.QueryPublishedRooms(ctx, req, res)
+ util.GetLogger(ctx).WithError(err).Infof("QueryPublishedRooms req=%+v res=%+v", js(req), js(res))
+ return err
+}
+
func (t *RoomserverInternalAPITrace) QueryLatestEventsAndState(
ctx context.Context,
req *QueryLatestEventsAndStateRequest,
diff --git a/roomserver/api/perform.go b/roomserver/api/perform.go
index 5d8d88a5..9e844733 100644
--- a/roomserver/api/perform.go
+++ b/roomserver/api/perform.go
@@ -136,3 +136,13 @@ type PerformBackfillResponse struct {
// Missing events, arbritrary order.
Events []gomatrixserverlib.HeaderedEvent `json:"events"`
}
+
+type PerformPublishRequest struct {
+ RoomID string
+ Visibility string
+}
+
+type PerformPublishResponse struct {
+ // If non-nil, the publish request failed. Contains more information why it failed.
+ Error *PerformError
+}
diff --git a/roomserver/api/query.go b/roomserver/api/query.go
index f0cb9374..4e1d09c3 100644
--- a/roomserver/api/query.go
+++ b/roomserver/api/query.go
@@ -215,3 +215,13 @@ type QueryRoomVersionForRoomRequest struct {
type QueryRoomVersionForRoomResponse struct {
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
}
+
+type QueryPublishedRoomsRequest struct {
+ // Optional. If specified, returns whether this room is published or not.
+ RoomID string
+}
+
+type QueryPublishedRoomsResponse struct {
+ // The list of published rooms.
+ RoomIDs []string
+}