From 4eb7f5d75f45fbfdf51095bf13a924ca59fb777c Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 5 Feb 2020 13:39:04 +0000 Subject: [PATCH] Add wiring for querying the roomserver for the default room version --- roomserver/api/query.go | 31 +++++++++++++++++++++++++++++++ roomserver/query/query.go | 11 +++++++++++ 2 files changed, 42 insertions(+) diff --git a/roomserver/api/query.go b/roomserver/api/query.go index b3fa01840..edf4de983 100644 --- a/roomserver/api/query.go +++ b/roomserver/api/query.go @@ -244,6 +244,14 @@ type QueryServersInRoomAtEventResponse struct { Servers []gomatrixserverlib.ServerName `json:"servers"` } +// QueryDefaultRoomVersion asks for the default room version +type QueryDefaultRoomVersionRequest struct{} + +// QueryDefaultRoomVersionResponse is a response to QueryServersInRoomAtEventResponse +type QueryDefaultRoomVersionResponse struct { + RoomVersion int64 +} + // RoomserverQueryAPI is used to query information from the room server. type RoomserverQueryAPI interface { // Query the latest events and state for a room from the room server. @@ -323,6 +331,13 @@ type RoomserverQueryAPI interface { request *QueryServersInRoomAtEventRequest, response *QueryServersInRoomAtEventResponse, ) error + + // Asks for the default room version as preferred by the server. + QueryDefaultRoomVersion( + ctx context.Context, + request *QueryDefaultRoomVersionRequest, + response *QueryDefaultRoomVersionResponse, + ) error } // RoomserverQueryLatestEventsAndStatePath is the HTTP path for the QueryLatestEventsAndState API. @@ -358,6 +373,9 @@ const RoomserverQueryBackfillPath = "/api/roomserver/queryBackfill" // RoomserverQueryServersInRoomAtEventPath is the HTTP path for the QueryServersInRoomAtEvent API const RoomserverQueryServersInRoomAtEventPath = "/api/roomserver/queryServersInRoomAtEvents" +// RoomserverQueryDefaultRoomVersionPath is the HTTP path for the QueryDefaultRoomVersion API +const RoomserverQueryDefaultRoomVersionPath = "/api/roomserver/queryDefaultRoomVersion" + // NewRoomserverQueryAPIHTTP creates a RoomserverQueryAPI implemented by talking to a HTTP POST API. // If httpClient is nil then it uses the http.DefaultClient func NewRoomserverQueryAPIHTTP(roomserverURL string, httpClient *http.Client) RoomserverQueryAPI { @@ -514,3 +532,16 @@ func (h *httpRoomserverQueryAPI) QueryServersInRoomAtEvent( apiURL := h.roomserverURL + RoomserverQueryServersInRoomAtEventPath return commonHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response) } + +// QueryServersInRoomAtEvent implements RoomServerQueryAPI +func (h *httpRoomserverQueryAPI) QueryDefaultRoomVersion( + ctx context.Context, + request *QueryDefaultRoomVersionRequest, + response *QueryDefaultRoomVersionResponse, +) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "QueryDefaultRoomVersion") + defer span.Finish() + + apiURL := h.roomserverURL + RoomserverQueryDefaultRoomVersionPath + return commonHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response) +} diff --git a/roomserver/query/query.go b/roomserver/query/query.go index d318fc001..907e45bb7 100644 --- a/roomserver/query/query.go +++ b/roomserver/query/query.go @@ -25,6 +25,7 @@ import ( "github.com/matrix-org/dendrite/roomserver/state" "github.com/matrix-org/dendrite/roomserver/state/database" "github.com/matrix-org/dendrite/roomserver/types" + "github.com/matrix-org/dendrite/roomserver/version" "github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/util" ) @@ -723,6 +724,16 @@ func (r *RoomserverQueryAPI) QueryServersInRoomAtEvent( return nil } +// QueryDefaultRoomVersion implements api.RoomserverQueryAPI +func (r *RoomserverQueryAPI) QueryDefaultRoomVersion( + ctx context.Context, + request *api.QueryDefaultRoomVersionRequest, + response *api.QueryDefaultRoomVersionResponse, +) error { + response.RoomVersion = int64(version.GetDefaultRoomVersion()) + return nil +} + // SetupHTTP adds the RoomserverQueryAPI handlers to the http.ServeMux. // nolint: gocyclo func (r *RoomserverQueryAPI) SetupHTTP(servMux *http.ServeMux) {