From 85c564ef9a19824e6510e2182cc137cd513d81f0 Mon Sep 17 00:00:00 2001 From: Will Hunt Date: Tue, 5 Jan 2021 10:54:40 +0000 Subject: [PATCH] Add field ShouldHitAppservice to GetRoomIDForAlias --- clientapi/routing/createroom.go | 3 ++- clientapi/routing/directory.go | 2 +- federationapi/routing/query.go | 2 +- roomserver/api/alias.go | 3 ++- roomserver/internal/alias.go | 13 ++++++++----- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/clientapi/routing/createroom.go b/clientapi/routing/createroom.go index 5a2ffea34..49650f657 100644 --- a/clientapi/routing/createroom.go +++ b/clientapi/routing/createroom.go @@ -216,7 +216,8 @@ func createRoom( roomAlias = fmt.Sprintf("#%s:%s", r.RoomAliasName, cfg.Matrix.ServerName) // check it's free TODO: This races but is better than nothing hasAliasReq := roomserverAPI.GetRoomIDForAliasRequest{ - Alias: roomAlias, + Alias: roomAlias, + ShouldHitAppservice: false, } var aliasResp roomserverAPI.GetRoomIDForAliasResponse diff --git a/clientapi/routing/directory.go b/clientapi/routing/directory.go index 1b844c4e4..2fddba94d 100644 --- a/clientapi/routing/directory.go +++ b/clientapi/routing/directory.go @@ -61,7 +61,7 @@ func DirectoryRoom( var res roomDirectoryResponse // Query the roomserver API to check if the alias exists locally. - queryReq := roomserverAPI.GetRoomIDForAliasRequest{Alias: roomAlias} + queryReq := roomserverAPI.GetRoomIDForAliasRequest{Alias: roomAlias, ShouldHitAppservice: true} var queryRes roomserverAPI.GetRoomIDForAliasResponse if err = rsAPI.GetRoomIDForAlias(req.Context(), &queryReq, &queryRes); err != nil { util.GetLogger(req.Context()).WithError(err).Error("rsAPI.GetRoomIDForAlias failed") diff --git a/federationapi/routing/query.go b/federationapi/routing/query.go index 6c25b4d3f..ea4fff147 100644 --- a/federationapi/routing/query.go +++ b/federationapi/routing/query.go @@ -53,7 +53,7 @@ func RoomAliasToID( var resp gomatrixserverlib.RespDirectory if domain == cfg.Matrix.ServerName { - queryReq := roomserverAPI.GetRoomIDForAliasRequest{Alias: roomAlias} + queryReq := roomserverAPI.GetRoomIDForAliasRequest{Alias: roomAlias, ShouldHitAppservice: true} var queryRes roomserverAPI.GetRoomIDForAliasResponse if err = rsAPI.GetRoomIDForAlias(httpReq.Context(), &queryReq, &queryRes); err != nil { util.GetLogger(httpReq.Context()).WithError(err).Error("aliasAPI.GetRoomIDForAlias failed") diff --git a/roomserver/api/alias.go b/roomserver/api/alias.go index 61fdc6116..2a7049069 100644 --- a/roomserver/api/alias.go +++ b/roomserver/api/alias.go @@ -33,7 +33,8 @@ type SetRoomAliasResponse struct { // GetRoomIDForAliasRequest is a request to GetRoomIDForAlias type GetRoomIDForAliasRequest struct { // Alias we want to lookup - Alias string `json:"alias"` + Alias string `json:"alias"` + ShouldHitAppservice bool `json:"shouldHitAppservice"` } // GetRoomIDForAliasResponse is a response to GetRoomIDForAlias diff --git a/roomserver/internal/alias.go b/roomserver/internal/alias.go index 843b0bccf..e620c5a7f 100644 --- a/roomserver/internal/alias.go +++ b/roomserver/internal/alias.go @@ -88,11 +88,13 @@ func (r *RoomserverInternalAPI) GetRoomIDForAlias( ) error { // Look up the room ID in the database roomID, err := r.DB.GetRoomIDForAlias(ctx, request.Alias) - if err != nil { - return err + if err == nil && roomID != "" { + response.RoomID = roomID + return nil } - if r.asAPI != nil { // appservice component is wired in + // Check appservice on err + if r.asAPI != nil && request.ShouldHitAppservice { // appservice component is wired in if roomID == "" { // No room found locally, try our application services by making a call to // the appservice component @@ -107,12 +109,13 @@ func (r *RoomserverInternalAPI) GetRoomIDForAlias( if err != nil { return err } + response.RoomID = roomID + return nil } } } - response.RoomID = roomID - return nil + return err } // GetAliasesForRoomID implements alias.RoomserverInternalAPI