From a142a7adf5e27216de89666170e256fe1d033116 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Sun, 26 Jan 2020 08:06:02 +0530 Subject: [PATCH] Fix build issues --- cmd/dendrite-monolith-server/main.go | 2 +- roomserver/api/canonical_alias.go | 6 +- roomserver/canonical_alias/canonical_alias.go | 71 ++++++++----------- roomserver/roomserver.go | 10 ++- .../postgres/room_canonical_aliases_table.go | 2 +- roomserver/storage/postgres/storage.go | 4 +- 6 files changed, 40 insertions(+), 55 deletions(-) diff --git a/cmd/dendrite-monolith-server/main.go b/cmd/dendrite-monolith-server/main.go index b3de9adde..43365aa29 100644 --- a/cmd/dendrite-monolith-server/main.go +++ b/cmd/dendrite-monolith-server/main.go @@ -55,7 +55,7 @@ func main() { federation := base.CreateFederationClient() keyRing := keydb.CreateKeyRing(federation.Client, keyDB) - alias, input, query := roomserver.SetupRoomServerComponent(base) + alias, _, input, query := roomserver.SetupRoomServerComponent(base) typingInputAPI := typingserver.SetupTypingServerComponent(base, cache.NewTypingCache()) asQuery := appservice.SetupAppServiceAPIComponent( base, accountDB, deviceDB, federation, alias, query, transactions.New(), diff --git a/roomserver/api/canonical_alias.go b/roomserver/api/canonical_alias.go index f71880c16..9dbf68784 100644 --- a/roomserver/api/canonical_alias.go +++ b/roomserver/api/canonical_alias.go @@ -34,10 +34,8 @@ type SetRoomCanonicalAliasRequest struct { // SetRoomCanonicalAliasResponse is a response to SetRoomCanonicalAlias type SetRoomCanonicalAliasResponse struct { - // Does the alias already refer to a room? - AliasExists bool `json:"alias_exists"` - // Does the alias refer to a different room? - DifferentRoom bool `json:"different_room"` + // Does the canonical alias already belong to a room? + CanonicalAliasExists bool `json:"canonical_alias_exists"` } // GetRoomIDForCanonicalAliasRequest is a request to GetRoomIDForCanonicalAlias diff --git a/roomserver/canonical_alias/canonical_alias.go b/roomserver/canonical_alias/canonical_alias.go index 2cb1a4642..801bbc42a 100644 --- a/roomserver/canonical_alias/canonical_alias.go +++ b/roomserver/canonical_alias/canonical_alias.go @@ -19,7 +19,6 @@ import ( "encoding/json" "net/http" - appserviceAPI "github.com/matrix-org/dendrite/appservice/api" "github.com/matrix-org/dendrite/common" "github.com/matrix-org/dendrite/common/config" roomserverAPI "github.com/matrix-org/dendrite/roomserver/api" @@ -42,16 +41,14 @@ type RoomserverCanonicalAPIDatabase interface { GetCreatorIDForCanonicalAlias(ctx context.Context, canonical_alias string) (string, error) // Remove a given room canonical alias. // Returns an error if there was a problem talking to the database. - RemoveRoomCanonicalAlias(ctx context.Context, canonical_alias string) error + RemoveRoomCanonicalAlias(ctx context.Context, roomID string) error } // RoomserverCanonicalAliasAPI is an implementation of alias.RoomserverCanonicalAliasAPI type RoomserverCanonicalAliasAPI struct { - DB RoomserverCanonicalAPIDatabase - Cfg *config.Dendrite - InputAPI roomserverAPI.RoomserverInputAPI - QueryAPI roomserverAPI.RoomserverQueryAPI - AppserviceAPI appserviceAPI.AppServiceQueryAPI + DB RoomserverCanonicalAPIDatabase + Cfg *config.Dendrite + AliasAPI roomserverAPI.RoomserverAliasAPI } // SetRoomCanonicalAlias implements alias.RoomserverCanonicalAliasAPI @@ -63,32 +60,41 @@ func (r *RoomserverCanonicalAliasAPI) SetRoomCanonicalAlias( // SPEC: Room with `m.room.canonical_alias` with empty alias field should be // treated same as room without a canonical alias. if request.CanonicalAlias == "" { - return r.DB.RemoveCanonicalAlias(ctx, request.RoomID) + return r.DB.RemoveRoomCanonicalAlias(ctx, request.RoomID) } - roomID, err := r.DB.GetRoomIDForAlias(ctx, request.CanonicalAlias) + aliasReq := roomserverAPI.GetRoomIDForAliasRequest{Alias: request.CanonicalAlias} + var aliasResp roomserverAPI.GetRoomIDForAliasResponse + err := r.AliasAPI.GetRoomIDForAlias(ctx, &aliasReq, &aliasResp) if err != nil { return err } - // Check if alias exists - if len(roomID) == 0 { - response.AliasExists = false - return nil - } - response.AliasExists = true - - // The alias belongs to a different room - if roomID != request.roomID { - // RFC: Is there a standard bool for wrong room? - response.DifferentRoom = true + // Check if the alias has been assigned to a different room + if len(aliasResp.RoomID) > 0 && aliasResp.RoomID != request.RoomID { + response.CanonicalAliasExists = true return nil } - response.DifferentRoom = false + // Create alias if not already assigned + if aliasResp.RoomID == "" { + // RFC: Creating an alias if not already is convienent for users + // but makes the code coupled with changes in alias.go + setAliasReq := roomserverAPI.SetRoomAliasRequest{ + Alias: request.CanonicalAlias, + RoomID: request.RoomID, + UserID: request.UserID, + } + var setAliasResp roomserverAPI.SetRoomAliasResponse + err = r.AliasAPI.SetRoomAlias(ctx, &setAliasReq, &setAliasResp) + if err != nil { + return err + } + } // Save the new canonical alias - if err := r.DB.SetRoomCanonicalAlias(ctx, request.CanonicalAlias, request.RoomID, request.UserID); err != nil { + err = r.DB.SetRoomCanonicalAlias(ctx, request.CanonicalAlias, request.RoomID, request.UserID) + if err != nil { return err } @@ -102,29 +108,12 @@ func (r *RoomserverCanonicalAliasAPI) GetRoomIDForCanonicalAlias( response *roomserverAPI.GetRoomIDForCanonicalAliasResponse, ) error { // Look up the room ID in the database - roomID, err := r.DB.GetRoomIDForCanonicalAlias(ctx, request.Alias) + roomID, err := r.DB.GetRoomIDForCanonicalAlias(ctx, request.CanonicalAlias) if err != nil { return err } // RFC: Should we search in application service for canonical aliases?` - if roomID == "" { - // No room found locally, try our application services by making a call to - // the appservice component - aliasReq := appserviceAPI.RoomAliasExistsRequest{Alias: request.Alias} - var aliasResp appserviceAPI.RoomAliasExistsResponse - if err = r.AppserviceAPI.RoomAliasExists(ctx, &aliasReq, &aliasResp); err != nil { - return err - } - - if aliasResp.AliasExists { - roomID, err = r.DB.GetRoomIDForAlias(ctx, request.Alias) - if err != nil { - return err - } - } - } - response.RoomID = roomID return nil } @@ -151,7 +140,7 @@ func (r *RoomserverCanonicalAliasAPI) GetCreatorIDForCanonicalAlias( request *roomserverAPI.GetCreatorIDForCanonicalAliasRequest, response *roomserverAPI.GetCreatorIDForCanonicalAliasResponse, ) error { - // Look up the aliases in the database for the given RoomID + // Look up the creator id in the database for the given CanonicalAlias creatorID, err := r.DB.GetCreatorIDForCanonicalAlias(ctx, request.CanonicalAlias) if err != nil { return err diff --git a/roomserver/roomserver.go b/roomserver/roomserver.go index 0adc19d93..bd8dd0e4b 100644 --- a/roomserver/roomserver.go +++ b/roomserver/roomserver.go @@ -65,12 +65,10 @@ func SetupRoomServerComponent( aliasAPI.SetupHTTP(http.DefaultServeMux) - canonicalAliasAPI := canonicalAlias.RoomserverCanonicalAliasAPI{ - DB: roomserverDB, - Cfg: base.Cfg, - InputAPI: &inputAPI, - QueryAPI: &queryAPI, - AppserviceAPI: &asAPI, + canonicalAliasAPI := canonical_alias.RoomserverCanonicalAliasAPI{ + DB: roomserverDB, + Cfg: base.Cfg, + AliasAPI: &aliasAPI, } canonicalAliasAPI.SetupHTTP(http.DefaultServeMux) diff --git a/roomserver/storage/postgres/room_canonical_aliases_table.go b/roomserver/storage/postgres/room_canonical_aliases_table.go index fe4712321..a5fc6b60e 100644 --- a/roomserver/storage/postgres/room_canonical_aliases_table.go +++ b/roomserver/storage/postgres/room_canonical_aliases_table.go @@ -49,7 +49,7 @@ const selectCreatorIDFromCanonicalAliasSQL = "" + "SELECT creator_id FROM roomserver_canonical_aliases WHERE canonical_alias = $1" const deleteRoomCanonicalAliasSQL = "" + - "DELETE FROM roomserver_canonical_aliases WHERE canonical_alias = $1" + "DELETE FROM roomserver_canonical_aliases WHERE room_id = $1" type roomCanonicalAliasStatements struct { insertRoomCanonicalAliasStmt *sql.Stmt diff --git a/roomserver/storage/postgres/storage.go b/roomserver/storage/postgres/storage.go index ef0c161b8..cabac005d 100644 --- a/roomserver/storage/postgres/storage.go +++ b/roomserver/storage/postgres/storage.go @@ -491,8 +491,8 @@ func (d *Database) GetCreatorIDForCanonicalAlias( } // RemoveRoomCanonicalAlias implements alias.RoomserverCanonicalAliasAPIDB -func (d *Database) RemoveRoomCanonicalAlias(ctx context.Context, canonical_alias string) error { - return d.statements.deleteRoomCanonicalAlias(ctx, canonical_alias) +func (d *Database) RemoveRoomCanonicalAlias(ctx context.Context, roomID string) error { + return d.statements.deleteRoomCanonicalAlias(ctx, roomID) } // StateEntriesForTuples implements state.RoomStateDatabase