mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 10:33:11 -06:00
Refactor QueryRoomVersionForRoom
This commit is contained in:
parent
8919a2b05d
commit
9b8602418e
|
|
@ -338,9 +338,8 @@ func buildMembershipEvents(
|
||||||
evs := []*gomatrixserverlib.HeaderedEvent{}
|
evs := []*gomatrixserverlib.HeaderedEvent{}
|
||||||
|
|
||||||
for _, roomID := range roomIDs {
|
for _, roomID := range roomIDs {
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
roomVersion, err := rsAPI.QueryRoomVersionForRoom(ctx, roomID)
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
if err != nil {
|
||||||
if err := rsAPI.QueryRoomVersionForRoom(ctx, &verReq, &verRes); err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -372,7 +371,7 @@ func buildMembershipEvents(
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
evs = append(evs, event.Headered(verRes.RoomVersion))
|
evs = append(evs, event.Headered(roomVersion))
|
||||||
}
|
}
|
||||||
|
|
||||||
return evs, nil
|
return evs, nil
|
||||||
|
|
|
||||||
|
|
@ -76,9 +76,8 @@ func SendEvent(
|
||||||
rsAPI api.ClientRoomserverAPI,
|
rsAPI api.ClientRoomserverAPI,
|
||||||
txnCache *transactions.Cache,
|
txnCache *transactions.Cache,
|
||||||
) util.JSONResponse {
|
) util.JSONResponse {
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
roomVersion, err := rsAPI.QueryRoomVersionForRoom(req.Context(), roomID)
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
if err != nil {
|
||||||
if err := rsAPI.QueryRoomVersionForRoom(req.Context(), &verReq, &verRes); err != nil {
|
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
|
JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
|
||||||
|
|
@ -185,7 +184,7 @@ func SendEvent(
|
||||||
req.Context(), rsAPI,
|
req.Context(), rsAPI,
|
||||||
api.KindNew,
|
api.KindNew,
|
||||||
[]*gomatrixserverlib.HeaderedEvent{
|
[]*gomatrixserverlib.HeaderedEvent{
|
||||||
e.Headered(verRes.RoomVersion),
|
e.Headered(roomVersion),
|
||||||
},
|
},
|
||||||
device.UserDomain(),
|
device.UserDomain(),
|
||||||
domain,
|
domain,
|
||||||
|
|
@ -200,7 +199,7 @@ func SendEvent(
|
||||||
util.GetLogger(req.Context()).WithFields(logrus.Fields{
|
util.GetLogger(req.Context()).WithFields(logrus.Fields{
|
||||||
"event_id": e.EventID(),
|
"event_id": e.EventID(),
|
||||||
"room_id": roomID,
|
"room_id": roomID,
|
||||||
"room_version": verRes.RoomVersion,
|
"room_version": roomVersion,
|
||||||
}).Info("Sent event to roomserver")
|
}).Info("Sent event to roomserver")
|
||||||
|
|
||||||
res := util.JSONResponse{
|
res := util.JSONResponse{
|
||||||
|
|
|
||||||
|
|
@ -42,9 +42,8 @@ func MakeJoin(
|
||||||
roomID, userID string,
|
roomID, userID string,
|
||||||
remoteVersions []gomatrixserverlib.RoomVersion,
|
remoteVersions []gomatrixserverlib.RoomVersion,
|
||||||
) util.JSONResponse {
|
) util.JSONResponse {
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
roomVersion, err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), roomID)
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
if err != nil {
|
||||||
if err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), &verReq, &verRes); err != nil {
|
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusInternalServerError,
|
Code: http.StatusInternalServerError,
|
||||||
JSON: jsonerror.InternalServerError(),
|
JSON: jsonerror.InternalServerError(),
|
||||||
|
|
@ -57,7 +56,7 @@ func MakeJoin(
|
||||||
// https://matrix.org/docs/spec/server_server/r0.1.3#get-matrix-federation-v1-make-join-roomid-userid
|
// https://matrix.org/docs/spec/server_server/r0.1.3#get-matrix-federation-v1-make-join-roomid-userid
|
||||||
remoteSupportsVersion := false
|
remoteSupportsVersion := false
|
||||||
for _, v := range remoteVersions {
|
for _, v := range remoteVersions {
|
||||||
if v == verRes.RoomVersion {
|
if v == roomVersion {
|
||||||
remoteSupportsVersion = true
|
remoteSupportsVersion = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
@ -66,7 +65,7 @@ func MakeJoin(
|
||||||
if !remoteSupportsVersion {
|
if !remoteSupportsVersion {
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
JSON: jsonerror.IncompatibleRoomVersion(verRes.RoomVersion),
|
JSON: jsonerror.IncompatibleRoomVersion(roomVersion),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -109,7 +108,7 @@ func MakeJoin(
|
||||||
|
|
||||||
// Check if the restricted join is allowed. If the room doesn't
|
// Check if the restricted join is allowed. If the room doesn't
|
||||||
// support restricted joins then this is effectively a no-op.
|
// support restricted joins then this is effectively a no-op.
|
||||||
res, authorisedVia, err := checkRestrictedJoin(httpReq, rsAPI, verRes.RoomVersion, roomID, userID)
|
res, authorisedVia, err := checkRestrictedJoin(httpReq, rsAPI, roomVersion, roomID, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.GetLogger(httpReq.Context()).WithError(err).Error("checkRestrictedJoin failed")
|
util.GetLogger(httpReq.Context()).WithError(err).Error("checkRestrictedJoin failed")
|
||||||
return jsonerror.InternalServerError()
|
return jsonerror.InternalServerError()
|
||||||
|
|
@ -144,7 +143,7 @@ func MakeJoin(
|
||||||
}
|
}
|
||||||
|
|
||||||
queryRes := api.QueryLatestEventsAndStateResponse{
|
queryRes := api.QueryLatestEventsAndStateResponse{
|
||||||
RoomVersion: verRes.RoomVersion,
|
RoomVersion: roomVersion,
|
||||||
}
|
}
|
||||||
event, err := eventutil.QueryAndBuildEvent(httpReq.Context(), &builder, cfg.Matrix, identity, time.Now(), rsAPI, &queryRes)
|
event, err := eventutil.QueryAndBuildEvent(httpReq.Context(), &builder, cfg.Matrix, identity, time.Now(), rsAPI, &queryRes)
|
||||||
if err == eventutil.ErrRoomNoExists {
|
if err == eventutil.ErrRoomNoExists {
|
||||||
|
|
@ -180,7 +179,7 @@ func MakeJoin(
|
||||||
Code: http.StatusOK,
|
Code: http.StatusOK,
|
||||||
JSON: map[string]interface{}{
|
JSON: map[string]interface{}{
|
||||||
"event": builder,
|
"event": builder,
|
||||||
"room_version": verRes.RoomVersion,
|
"room_version": roomVersion,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -197,21 +196,20 @@ func SendJoin(
|
||||||
keys gomatrixserverlib.JSONVerifier,
|
keys gomatrixserverlib.JSONVerifier,
|
||||||
roomID, eventID string,
|
roomID, eventID string,
|
||||||
) util.JSONResponse {
|
) util.JSONResponse {
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
roomVersion, err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), roomID)
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
if err != nil {
|
||||||
if err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), &verReq, &verRes); err != nil {
|
|
||||||
util.GetLogger(httpReq.Context()).WithError(err).Error("rsAPI.QueryRoomVersionForRoom failed")
|
util.GetLogger(httpReq.Context()).WithError(err).Error("rsAPI.QueryRoomVersionForRoom failed")
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusInternalServerError,
|
Code: http.StatusInternalServerError,
|
||||||
JSON: jsonerror.InternalServerError(),
|
JSON: jsonerror.InternalServerError(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
verImpl, err := gomatrixserverlib.GetRoomVersion(verRes.RoomVersion)
|
verImpl, err := gomatrixserverlib.GetRoomVersion(roomVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusInternalServerError,
|
Code: http.StatusInternalServerError,
|
||||||
JSON: jsonerror.UnsupportedRoomVersion(
|
JSON: jsonerror.UnsupportedRoomVersion(
|
||||||
fmt.Sprintf("QueryRoomVersionForRoom returned unknown room version: %s", verRes.RoomVersion),
|
fmt.Sprintf("QueryRoomVersionForRoom returned unknown room version: %s", roomVersion),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -140,21 +140,20 @@ func SendLeave(
|
||||||
keys gomatrixserverlib.JSONVerifier,
|
keys gomatrixserverlib.JSONVerifier,
|
||||||
roomID, eventID string,
|
roomID, eventID string,
|
||||||
) util.JSONResponse {
|
) util.JSONResponse {
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
roomVersion, err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), roomID)
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
if err != nil {
|
||||||
if err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), &verReq, &verRes); err != nil {
|
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
|
JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
verImpl, err := gomatrixserverlib.GetRoomVersion(verRes.RoomVersion)
|
verImpl, err := gomatrixserverlib.GetRoomVersion(roomVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusInternalServerError,
|
Code: http.StatusInternalServerError,
|
||||||
JSON: jsonerror.UnsupportedRoomVersion(
|
JSON: jsonerror.UnsupportedRoomVersion(
|
||||||
fmt.Sprintf("QueryRoomVersionForRoom returned unknown version: %s", verRes.RoomVersion),
|
fmt.Sprintf("QueryRoomVersionForRoom returned unknown version: %s", roomVersion),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -313,7 +312,7 @@ func SendLeave(
|
||||||
InputRoomEvents: []api.InputRoomEvent{
|
InputRoomEvents: []api.InputRoomEvent{
|
||||||
{
|
{
|
||||||
Kind: api.KindNew,
|
Kind: api.KindNew,
|
||||||
Event: event.Headered(verRes.RoomVersion),
|
Event: event.Headered(roomVersion),
|
||||||
SendAsServer: string(cfg.Matrix.ServerName),
|
SendAsServer: string(cfg.Matrix.ServerName),
|
||||||
TransactionID: nil,
|
TransactionID: nil,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,8 @@ func Peek(
|
||||||
remoteVersions []gomatrixserverlib.RoomVersion,
|
remoteVersions []gomatrixserverlib.RoomVersion,
|
||||||
) util.JSONResponse {
|
) util.JSONResponse {
|
||||||
// TODO: check if we're just refreshing an existing peek by querying the federationapi
|
// TODO: check if we're just refreshing an existing peek by querying the federationapi
|
||||||
|
roomVersion, err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), roomID)
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
if err != nil {
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
|
||||||
if err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), &verReq, &verRes); err != nil {
|
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusInternalServerError,
|
Code: http.StatusInternalServerError,
|
||||||
JSON: jsonerror.InternalServerError(),
|
JSON: jsonerror.InternalServerError(),
|
||||||
|
|
@ -50,7 +48,7 @@ func Peek(
|
||||||
// the peek URL.
|
// the peek URL.
|
||||||
remoteSupportsVersion := false
|
remoteSupportsVersion := false
|
||||||
for _, v := range remoteVersions {
|
for _, v := range remoteVersions {
|
||||||
if v == verRes.RoomVersion {
|
if v == roomVersion {
|
||||||
remoteSupportsVersion = true
|
remoteSupportsVersion = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
@ -59,7 +57,7 @@ func Peek(
|
||||||
if !remoteSupportsVersion {
|
if !remoteSupportsVersion {
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
JSON: jsonerror.IncompatibleRoomVersion(verRes.RoomVersion),
|
JSON: jsonerror.IncompatibleRoomVersion(roomVersion),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,7 +67,7 @@ func Peek(
|
||||||
renewalInterval := int64(60 * 60 * 1000 * 1000)
|
renewalInterval := int64(60 * 60 * 1000 * 1000)
|
||||||
|
|
||||||
var response api.PerformInboundPeekResponse
|
var response api.PerformInboundPeekResponse
|
||||||
err := rsAPI.PerformInboundPeek(
|
err = rsAPI.PerformInboundPeek(
|
||||||
httpReq.Context(),
|
httpReq.Context(),
|
||||||
&api.PerformInboundPeekRequest{
|
&api.PerformInboundPeekRequest{
|
||||||
RoomID: roomID,
|
RoomID: roomID,
|
||||||
|
|
|
||||||
|
|
@ -69,9 +69,8 @@ func CreateInvitesFrom3PIDInvites(
|
||||||
|
|
||||||
evs := []*gomatrixserverlib.HeaderedEvent{}
|
evs := []*gomatrixserverlib.HeaderedEvent{}
|
||||||
for _, inv := range body.Invites {
|
for _, inv := range body.Invites {
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: inv.RoomID}
|
roomVersion, err := rsAPI.QueryRoomVersionForRoom(req.Context(), inv.RoomID)
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
if err != nil {
|
||||||
if err := rsAPI.QueryRoomVersionForRoom(req.Context(), &verReq, &verRes); err != nil {
|
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
|
JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
|
||||||
|
|
@ -86,7 +85,7 @@ func CreateInvitesFrom3PIDInvites(
|
||||||
return jsonerror.InternalServerError()
|
return jsonerror.InternalServerError()
|
||||||
}
|
}
|
||||||
if event != nil {
|
if event != nil {
|
||||||
evs = append(evs, event.Headered(verRes.RoomVersion))
|
evs = append(evs, event.Headered(roomVersion))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -162,9 +161,8 @@ func ExchangeThirdPartyInvite(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
roomVersion, err := rsAPI.QueryRoomVersionForRoom(httpReq.Context(), roomID)
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
if err != nil {
|
||||||
if err = rsAPI.QueryRoomVersionForRoom(httpReq.Context(), &verReq, &verRes); err != nil {
|
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
|
JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
|
||||||
|
|
@ -185,7 +183,7 @@ func ExchangeThirdPartyInvite(
|
||||||
|
|
||||||
// Ask the requesting server to sign the newly created event so we know it
|
// Ask the requesting server to sign the newly created event so we know it
|
||||||
// acknowledged it
|
// acknowledged it
|
||||||
inviteReq, err := fclient.NewInviteV2Request(event.Headered(verRes.RoomVersion), nil)
|
inviteReq, err := fclient.NewInviteV2Request(event.Headered(roomVersion), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.GetLogger(httpReq.Context()).WithError(err).Error("failed to make invite v2 request")
|
util.GetLogger(httpReq.Context()).WithError(err).Error("failed to make invite v2 request")
|
||||||
return jsonerror.InternalServerError()
|
return jsonerror.InternalServerError()
|
||||||
|
|
@ -195,9 +193,9 @@ func ExchangeThirdPartyInvite(
|
||||||
util.GetLogger(httpReq.Context()).WithError(err).Error("federation.SendInvite failed")
|
util.GetLogger(httpReq.Context()).WithError(err).Error("federation.SendInvite failed")
|
||||||
return jsonerror.InternalServerError()
|
return jsonerror.InternalServerError()
|
||||||
}
|
}
|
||||||
verImpl, err := gomatrixserverlib.GetRoomVersion(verRes.RoomVersion)
|
verImpl, err := gomatrixserverlib.GetRoomVersion(roomVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.GetLogger(httpReq.Context()).WithError(err).Errorf("unknown room version: %s", verRes.RoomVersion)
|
util.GetLogger(httpReq.Context()).WithError(err).Errorf("unknown room version: %s", roomVersion)
|
||||||
return jsonerror.InternalServerError()
|
return jsonerror.InternalServerError()
|
||||||
}
|
}
|
||||||
inviteEvent, err := verImpl.NewEventFromUntrustedJSON(signedEvent.Event)
|
inviteEvent, err := verImpl.NewEventFromUntrustedJSON(signedEvent.Event)
|
||||||
|
|
@ -211,7 +209,7 @@ func ExchangeThirdPartyInvite(
|
||||||
httpReq.Context(), rsAPI,
|
httpReq.Context(), rsAPI,
|
||||||
api.KindNew,
|
api.KindNew,
|
||||||
[]*gomatrixserverlib.HeaderedEvent{
|
[]*gomatrixserverlib.HeaderedEvent{
|
||||||
inviteEvent.Headered(verRes.RoomVersion),
|
inviteEvent.Headered(roomVersion),
|
||||||
},
|
},
|
||||||
request.Destination(),
|
request.Destination(),
|
||||||
request.Origin(),
|
request.Origin(),
|
||||||
|
|
@ -239,12 +237,6 @@ func createInviteFrom3PIDInvite(
|
||||||
inv invite, federation fclient.FederationClient,
|
inv invite, federation fclient.FederationClient,
|
||||||
userAPI userapi.FederationUserAPI,
|
userAPI userapi.FederationUserAPI,
|
||||||
) (*gomatrixserverlib.Event, error) {
|
) (*gomatrixserverlib.Event, error) {
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: inv.RoomID}
|
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
|
||||||
if err := rsAPI.QueryRoomVersionForRoom(ctx, &verReq, &verRes); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, server, err := gomatrixserverlib.SplitID('@', inv.MXID)
|
_, server, err := gomatrixserverlib.SplitID('@', inv.MXID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
||||||
|
|
@ -115,14 +115,13 @@ func (t *TxnReq) ProcessTransaction(ctx context.Context) (*fclient.RespSend, *ut
|
||||||
if v, ok := roomVersions[roomID]; ok {
|
if v, ok := roomVersions[roomID]; ok {
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
roomVersion, err := t.rsAPI.QueryRoomVersionForRoom(ctx, roomID)
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
if err != nil {
|
||||||
if err := t.rsAPI.QueryRoomVersionForRoom(ctx, &verReq, &verRes); err != nil {
|
util.GetLogger(ctx).WithError(err).Debug("Transaction: Failed to query room version for room", roomID)
|
||||||
util.GetLogger(ctx).WithError(err).Debug("Transaction: Failed to query room version for room", verReq.RoomID)
|
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
roomVersions[roomID] = verRes.RoomVersion
|
roomVersions[roomID] = roomVersion
|
||||||
return verRes.RoomVersion
|
return roomVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, pdu := range t.PDUs {
|
for _, pdu := range t.PDUs {
|
||||||
|
|
|
||||||
|
|
@ -72,14 +72,12 @@ type FakeRsAPI struct {
|
||||||
|
|
||||||
func (r *FakeRsAPI) QueryRoomVersionForRoom(
|
func (r *FakeRsAPI) QueryRoomVersionForRoom(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
req *rsAPI.QueryRoomVersionForRoomRequest,
|
roomID string,
|
||||||
res *rsAPI.QueryRoomVersionForRoomResponse,
|
) (gomatrixserverlib.RoomVersion, error) {
|
||||||
) error {
|
|
||||||
if r.shouldFailQuery {
|
if r.shouldFailQuery {
|
||||||
return fmt.Errorf("Failure")
|
return "", fmt.Errorf("Failure")
|
||||||
}
|
}
|
||||||
res.RoomVersion = gomatrixserverlib.RoomVersionV10
|
return gomatrixserverlib.RoomVersionV10, nil
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *FakeRsAPI) QueryServerBannedFromRoom(
|
func (r *FakeRsAPI) QueryServerBannedFromRoom(
|
||||||
|
|
@ -722,11 +720,9 @@ func (t *testRoomserverAPI) QueryServerJoinedToRoom(
|
||||||
// Asks for the room version for a given room.
|
// Asks for the room version for a given room.
|
||||||
func (t *testRoomserverAPI) QueryRoomVersionForRoom(
|
func (t *testRoomserverAPI) QueryRoomVersionForRoom(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *rsAPI.QueryRoomVersionForRoomRequest,
|
roomID string,
|
||||||
response *rsAPI.QueryRoomVersionForRoomResponse,
|
) (gomatrixserverlib.RoomVersion, error) {
|
||||||
) error {
|
return testRoomVersion, nil
|
||||||
response.RoomVersion = testRoomVersion
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *testRoomserverAPI) QueryServerBannedFromRoom(
|
func (t *testRoomserverAPI) QueryServerBannedFromRoom(
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ type ClientRoomserverAPI interface {
|
||||||
QueryStateAfterEvents(ctx context.Context, req *QueryStateAfterEventsRequest, res *QueryStateAfterEventsResponse) error
|
QueryStateAfterEvents(ctx context.Context, req *QueryStateAfterEventsRequest, res *QueryStateAfterEventsResponse) error
|
||||||
// QueryKnownUsers returns a list of users that we know about from our joined rooms.
|
// QueryKnownUsers returns a list of users that we know about from our joined rooms.
|
||||||
QueryKnownUsers(ctx context.Context, req *QueryKnownUsersRequest, res *QueryKnownUsersResponse) error
|
QueryKnownUsers(ctx context.Context, req *QueryKnownUsersRequest, res *QueryKnownUsersResponse) error
|
||||||
QueryRoomVersionForRoom(ctx context.Context, req *QueryRoomVersionForRoomRequest, res *QueryRoomVersionForRoomResponse) error
|
QueryRoomVersionForRoom(ctx context.Context, roomID string) (gomatrixserverlib.RoomVersion, error)
|
||||||
QueryPublishedRooms(ctx context.Context, req *QueryPublishedRoomsRequest, res *QueryPublishedRoomsResponse) error
|
QueryPublishedRooms(ctx context.Context, req *QueryPublishedRoomsRequest, res *QueryPublishedRoomsResponse) error
|
||||||
|
|
||||||
GetRoomIDForAlias(ctx context.Context, req *GetRoomIDForAliasRequest, res *GetRoomIDForAliasResponse) error
|
GetRoomIDForAlias(ctx context.Context, req *GetRoomIDForAliasRequest, res *GetRoomIDForAliasResponse) error
|
||||||
|
|
@ -183,7 +183,7 @@ type FederationRoomserverAPI interface {
|
||||||
// QueryServerBannedFromRoom returns whether a server is banned from a room by server ACLs.
|
// QueryServerBannedFromRoom returns whether a server is banned from a room by server ACLs.
|
||||||
QueryServerBannedFromRoom(ctx context.Context, req *QueryServerBannedFromRoomRequest, res *QueryServerBannedFromRoomResponse) error
|
QueryServerBannedFromRoom(ctx context.Context, req *QueryServerBannedFromRoomRequest, res *QueryServerBannedFromRoomResponse) error
|
||||||
QueryMembershipsForRoom(ctx context.Context, req *QueryMembershipsForRoomRequest, res *QueryMembershipsForRoomResponse) error
|
QueryMembershipsForRoom(ctx context.Context, req *QueryMembershipsForRoomRequest, res *QueryMembershipsForRoomResponse) error
|
||||||
QueryRoomVersionForRoom(ctx context.Context, req *QueryRoomVersionForRoomRequest, res *QueryRoomVersionForRoomResponse) error
|
QueryRoomVersionForRoom(ctx context.Context, roomID string) (gomatrixserverlib.RoomVersion, error)
|
||||||
GetRoomIDForAlias(ctx context.Context, req *GetRoomIDForAliasRequest, res *GetRoomIDForAliasResponse) error
|
GetRoomIDForAlias(ctx context.Context, req *GetRoomIDForAliasRequest, res *GetRoomIDForAliasResponse) error
|
||||||
// QueryEventsByID queries a list of events by event ID for one room. If no room is specified, it will try to determine
|
// QueryEventsByID queries a list of events by event ID for one room. If no room is specified, it will try to determine
|
||||||
// which room to use by querying the first events roomID.
|
// which room to use by querying the first events roomID.
|
||||||
|
|
|
||||||
|
|
@ -319,9 +319,7 @@ func publishNewRoomAndUnpublishOldRoom(
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Upgrader) validateRoomExists(ctx context.Context, roomID string) error {
|
func (r *Upgrader) validateRoomExists(ctx context.Context, roomID string) error {
|
||||||
verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
|
if _, err := r.URSAPI.QueryRoomVersionForRoom(ctx, roomID); err != nil {
|
||||||
verRes := api.QueryRoomVersionForRoomResponse{}
|
|
||||||
if err := r.URSAPI.QueryRoomVersionForRoom(ctx, &verReq, &verRes); err != nil {
|
|
||||||
return &api.PerformError{
|
return &api.PerformError{
|
||||||
Code: api.PerformErrorNoRoom,
|
Code: api.PerformErrorNoRoom,
|
||||||
Msg: "Room does not exist",
|
Msg: "Room does not exist",
|
||||||
|
|
|
||||||
|
|
@ -692,26 +692,20 @@ func GetAuthChain(
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryRoomVersionForRoom implements api.RoomserverInternalAPI
|
// QueryRoomVersionForRoom implements api.RoomserverInternalAPI
|
||||||
func (r *Queryer) QueryRoomVersionForRoom(
|
func (r *Queryer) QueryRoomVersionForRoom(ctx context.Context, roomID string) (gomatrixserverlib.RoomVersion, error) {
|
||||||
ctx context.Context,
|
if roomVersion, ok := r.Cache.GetRoomVersion(roomID); ok {
|
||||||
request *api.QueryRoomVersionForRoomRequest,
|
return roomVersion, nil
|
||||||
response *api.QueryRoomVersionForRoomResponse,
|
|
||||||
) error {
|
|
||||||
if roomVersion, ok := r.Cache.GetRoomVersion(request.RoomID); ok {
|
|
||||||
response.RoomVersion = roomVersion
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err := r.DB.RoomInfo(ctx, request.RoomID)
|
info, err := r.DB.RoomInfo(ctx, roomID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return "", err
|
||||||
}
|
}
|
||||||
if info == nil {
|
if info == nil {
|
||||||
return fmt.Errorf("QueryRoomVersionForRoom: missing room info for room %s", request.RoomID)
|
return "", fmt.Errorf("QueryRoomVersionForRoom: missing room info for room %s", roomID)
|
||||||
}
|
}
|
||||||
response.RoomVersion = info.RoomVersion
|
r.Cache.StoreRoomVersion(roomID, info.RoomVersion)
|
||||||
r.Cache.StoreRoomVersion(request.RoomID, response.RoomVersion)
|
return info.RoomVersion, nil
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Queryer) QueryPublishedRooms(
|
func (r *Queryer) QueryPublishedRooms(
|
||||||
|
|
|
||||||
|
|
@ -325,10 +325,8 @@ func (rc *reqCtx) fetchUnknownEvent(eventID, roomID string) *gomatrixserverlib.H
|
||||||
}
|
}
|
||||||
logger := util.GetLogger(rc.ctx).WithField("room_id", roomID)
|
logger := util.GetLogger(rc.ctx).WithField("room_id", roomID)
|
||||||
// if they supplied a room_id, check the room exists.
|
// if they supplied a room_id, check the room exists.
|
||||||
var queryVerRes roomserver.QueryRoomVersionForRoomResponse
|
|
||||||
err := rc.rsAPI.QueryRoomVersionForRoom(rc.ctx, &roomserver.QueryRoomVersionForRoomRequest{
|
roomVersion, err := rc.rsAPI.QueryRoomVersionForRoom(rc.ctx, roomID)
|
||||||
RoomID: roomID,
|
|
||||||
}, &queryVerRes)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.WithError(err).Warn("failed to query room version for room, does this room exist?")
|
logger.WithError(err).Warn("failed to query room version for room, does this room exist?")
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -367,7 +365,7 @@ func (rc *reqCtx) fetchUnknownEvent(eventID, roomID string) *gomatrixserverlib.H
|
||||||
// Inject the response into the roomserver to remember the event across multiple calls and to set
|
// Inject the response into the roomserver to remember the event across multiple calls and to set
|
||||||
// unexplored flags correctly.
|
// unexplored flags correctly.
|
||||||
for _, srv := range serversToQuery {
|
for _, srv := range serversToQuery {
|
||||||
res, err := rc.MSC2836EventRelationships(eventID, srv, queryVerRes.RoomVersion)
|
res, err := rc.MSC2836EventRelationships(eventID, srv, roomVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue