aboutsummaryrefslogtreecommitdiff
path: root/currentstateserver/internal
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 /currentstateserver/internal
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 'currentstateserver/internal')
-rw-r--r--currentstateserver/internal/api.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/currentstateserver/internal/api.go b/currentstateserver/internal/api.go
index 85fbf51e..c2876047 100644
--- a/currentstateserver/internal/api.go
+++ b/currentstateserver/internal/api.go
@@ -48,3 +48,23 @@ func (a *CurrentStateInternalAPI) QueryRoomsForUser(ctx context.Context, req *ap
res.RoomIDs = roomIDs
return nil
}
+
+func (a *CurrentStateInternalAPI) QueryBulkStateContent(ctx context.Context, req *api.QueryBulkStateContentRequest, res *api.QueryBulkStateContentResponse) error {
+ events, err := a.DB.GetBulkStateContent(ctx, req.RoomIDs, req.StateTuples, req.AllowWildcards)
+ if err != nil {
+ return err
+ }
+ res.Rooms = make(map[string]map[gomatrixserverlib.StateKeyTuple]string)
+ for _, ev := range events {
+ if res.Rooms[ev.RoomID] == nil {
+ res.Rooms[ev.RoomID] = make(map[gomatrixserverlib.StateKeyTuple]string)
+ }
+ room := res.Rooms[ev.RoomID]
+ room[gomatrixserverlib.StateKeyTuple{
+ EventType: ev.EventType,
+ StateKey: ev.StateKey,
+ }] = ev.ContentValue
+ res.Rooms[ev.RoomID] = room
+ }
+ return nil
+}