aboutsummaryrefslogtreecommitdiff
path: root/federationapi/routing/threepid.go
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-03-27 16:28:22 +0000
committerGitHub <noreply@github.com>2020-03-27 16:28:22 +0000
commit05e1ae8745725245ee3b85a588000b0d26bae96c (patch)
treea54f2dfbc751fca5cf9b02327825bc7e9c340b3c /federationapi/routing/threepid.go
parent314da91f1dff5e4c3921b06180110e7a15b38f22 (diff)
Further room version wiring (#936)
* Room version 2 by default, other wiring updates, update gomatrixserverlib * Fix nil pointer exception * Fix some more nil pointer exceptions hopefully * Update gomatrixserverlib * Send all room versions when joining, not just stable ones * Remove room version cquery * Get room version when getting events from the roomserver database * Reset default back to room version 2 * Don't generate event IDs unless needed * Revert "Remove room version cquery" This reverts commit a170d5873360dd059614460acc8b21ab2cda9767. * Query room version in federation API, client API as needed * Improvements to make_join send_join dance * Make room server producers use headered events * Lint tweaks * Update gomatrixserverlib * Versioned SendJoin * Query room version in syncapi backfill * Handle transaction marshalling/unmarshalling within Dendrite * Sorta fix federation (kinda) * whoops commit federation API too * Use NewEventFromTrustedJSON when getting events from the database * Update gomatrixserverlib * Strip headers on federationapi endpoints * Fix bug in clientapi profile room version query * Update gomatrixserverlib * Return more useful error if room version query doesn't find the room * Update gomatrixserverlib * Update gomatrixserverlib * Maybe fix federation * Fix formatting directive * Update sytest whitelist and blacklist * Temporarily disable room versions 3 and 4 until gmsl is fixed * Fix count of EDUs in logging * Update gomatrixserverlib * Update gomatrixserverlib * Update gomatrixserverlib * Rely on EventBuilder in gmsl to generate the event IDs for us * Some review comments fixed * Move function out of common and into gmsl * Comment in federationsender destinationqueue * Update gomatrixserverlib
Diffstat (limited to 'federationapi/routing/threepid.go')
-rw-r--r--federationapi/routing/threepid.go41
1 files changed, 35 insertions, 6 deletions
diff --git a/federationapi/routing/threepid.go b/federationapi/routing/threepid.go
index 18ebc07e..da717473 100644
--- a/federationapi/routing/threepid.go
+++ b/federationapi/routing/threepid.go
@@ -18,7 +18,6 @@ import (
"context"
"encoding/json"
"errors"
- "fmt"
"net/http"
"time"
@@ -28,6 +27,7 @@ import (
"github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/producers"
"github.com/matrix-org/dendrite/common/config"
+ "github.com/matrix-org/dendrite/roomserver/api"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/gomatrixserverlib"
@@ -68,8 +68,17 @@ func CreateInvitesFrom3PIDInvites(
return *reqErr
}
- evs := []gomatrixserverlib.Event{}
+ evs := []gomatrixserverlib.HeaderedEvent{}
for _, inv := range body.Invites {
+ verReq := api.QueryRoomVersionForRoomRequest{RoomID: inv.RoomID}
+ verRes := api.QueryRoomVersionForRoomResponse{}
+ if err := queryAPI.QueryRoomVersionForRoom(req.Context(), &verReq, &verRes); err != nil {
+ return util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
+ }
+ }
+
event, err := createInviteFrom3PIDInvite(
req.Context(), queryAPI, asAPI, cfg, inv, federation, accountDB,
)
@@ -78,7 +87,7 @@ func CreateInvitesFrom3PIDInvites(
return jsonerror.InternalServerError()
}
if event != nil {
- evs = append(evs, *event)
+ evs = append(evs, (*event).Headered(verRes.RoomVersion))
}
}
@@ -137,6 +146,15 @@ func ExchangeThirdPartyInvite(
}
}
+ verReq := api.QueryRoomVersionForRoomRequest{RoomID: roomID}
+ verRes := api.QueryRoomVersionForRoomResponse{}
+ if err = queryAPI.QueryRoomVersionForRoom(httpReq.Context(), &verReq, &verRes); err != nil {
+ return util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
+ }
+ }
+
// Auth and build the event from what the remote server sent us
event, err := buildMembershipEvent(httpReq.Context(), &builder, queryAPI, cfg)
if err == errNotInRoom {
@@ -159,7 +177,12 @@ func ExchangeThirdPartyInvite(
// Send the event to the roomserver
if _, err = producer.SendEvents(
- httpReq.Context(), []gomatrixserverlib.Event{signedEvent.Event}, cfg.Matrix.ServerName, nil,
+ httpReq.Context(),
+ []gomatrixserverlib.HeaderedEvent{
+ signedEvent.Event.Headered(verRes.RoomVersion),
+ },
+ cfg.Matrix.ServerName,
+ nil,
); err != nil {
util.GetLogger(httpReq.Context()).WithError(err).Error("producer.SendEvents failed")
return jsonerror.InternalServerError()
@@ -181,6 +204,12 @@ func createInviteFrom3PIDInvite(
inv invite, federation *gomatrixserverlib.FederationClient,
accountDB accounts.Database,
) (*gomatrixserverlib.Event, error) {
+ verReq := api.QueryRoomVersionForRoomRequest{RoomID: inv.RoomID}
+ verRes := api.QueryRoomVersionForRoomResponse{}
+ if err := queryAPI.QueryRoomVersionForRoom(ctx, &verReq, &verRes); err != nil {
+ return nil, err
+ }
+
_, server, err := gomatrixserverlib.SplitID('@', inv.MXID)
if err != nil {
return nil, err
@@ -280,9 +309,9 @@ func buildMembershipEvent(
}
builder.AuthEvents = refs
- eventID := fmt.Sprintf("$%s:%s", util.RandomString(16), cfg.Matrix.ServerName)
event, err := builder.Build(
- eventID, time.Now(), cfg.Matrix.ServerName, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey,
+ time.Now(), cfg.Matrix.ServerName, cfg.Matrix.KeyID,
+ cfg.Matrix.PrivateKey, queryRes.RoomVersion,
)
return &event, err