From 0e356e2d272afae7640022d92c7ad68ca730e91a Mon Sep 17 00:00:00 2001 From: Brendan Abolivier Date: Mon, 11 Sep 2017 18:24:01 +0100 Subject: [PATCH] Implement same behaviour as synapse --- .../federationapi/writers/threepid.go | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/github.com/matrix-org/dendrite/federationapi/writers/threepid.go b/src/github.com/matrix-org/dendrite/federationapi/writers/threepid.go index 8f3dedf72..677c71699 100644 --- a/src/github.com/matrix-org/dendrite/federationapi/writers/threepid.go +++ b/src/github.com/matrix-org/dendrite/federationapi/writers/threepid.go @@ -122,13 +122,26 @@ func createInviteFrom3PIDInvite( if !queryRes.RoomExists { // Use federation to auth the event - var remoteServer gomatrixserverlib.ServerName - _, remoteServer, err = gomatrixserverlib.SplitID('!', inv.RoomID) + var remoteServers []gomatrixserverlib.ServerName + _, remoteServers[0], err = gomatrixserverlib.SplitID('@', inv.Sender) if err != nil { return nil, err } - err = federation.ExchangeThirdPartyInvite(remoteServer, *builder) - return nil, err + // Fallback to the room's server if the sender's domain is the same as + // the current server's + _, remoteServers[1], err = gomatrixserverlib.SplitID('!', inv.RoomID) + if err != nil { + return nil, err + } + + for _, server := range remoteServers { + if server == cfg.Matrix.ServerName { + continue + } + + err = federation.ExchangeThirdPartyInvite(server, *builder) + return nil, err + } } // Auth the event locally