Fix build issues

This commit is contained in:
Abhishek Kumar 2020-01-26 08:06:02 +05:30
parent 5f15826c2f
commit a142a7adf5
6 changed files with 40 additions and 55 deletions

View file

@ -55,7 +55,7 @@ func main() {
federation := base.CreateFederationClient() federation := base.CreateFederationClient()
keyRing := keydb.CreateKeyRing(federation.Client, keyDB) keyRing := keydb.CreateKeyRing(federation.Client, keyDB)
alias, input, query := roomserver.SetupRoomServerComponent(base) alias, _, input, query := roomserver.SetupRoomServerComponent(base)
typingInputAPI := typingserver.SetupTypingServerComponent(base, cache.NewTypingCache()) typingInputAPI := typingserver.SetupTypingServerComponent(base, cache.NewTypingCache())
asQuery := appservice.SetupAppServiceAPIComponent( asQuery := appservice.SetupAppServiceAPIComponent(
base, accountDB, deviceDB, federation, alias, query, transactions.New(), base, accountDB, deviceDB, federation, alias, query, transactions.New(),

View file

@ -34,10 +34,8 @@ type SetRoomCanonicalAliasRequest struct {
// SetRoomCanonicalAliasResponse is a response to SetRoomCanonicalAlias // SetRoomCanonicalAliasResponse is a response to SetRoomCanonicalAlias
type SetRoomCanonicalAliasResponse struct { type SetRoomCanonicalAliasResponse struct {
// Does the alias already refer to a room? // Does the canonical alias already belong to a room?
AliasExists bool `json:"alias_exists"` CanonicalAliasExists bool `json:"canonical_alias_exists"`
// Does the alias refer to a different room?
DifferentRoom bool `json:"different_room"`
} }
// GetRoomIDForCanonicalAliasRequest is a request to GetRoomIDForCanonicalAlias // GetRoomIDForCanonicalAliasRequest is a request to GetRoomIDForCanonicalAlias

View file

@ -19,7 +19,6 @@ import (
"encoding/json" "encoding/json"
"net/http" "net/http"
appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/common" "github.com/matrix-org/dendrite/common"
"github.com/matrix-org/dendrite/common/config" "github.com/matrix-org/dendrite/common/config"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api" roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
@ -42,16 +41,14 @@ type RoomserverCanonicalAPIDatabase interface {
GetCreatorIDForCanonicalAlias(ctx context.Context, canonical_alias string) (string, error) GetCreatorIDForCanonicalAlias(ctx context.Context, canonical_alias string) (string, error)
// Remove a given room canonical alias. // Remove a given room canonical alias.
// Returns an error if there was a problem talking to the database. // 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 // RoomserverCanonicalAliasAPI is an implementation of alias.RoomserverCanonicalAliasAPI
type RoomserverCanonicalAliasAPI struct { type RoomserverCanonicalAliasAPI struct {
DB RoomserverCanonicalAPIDatabase DB RoomserverCanonicalAPIDatabase
Cfg *config.Dendrite Cfg *config.Dendrite
InputAPI roomserverAPI.RoomserverInputAPI AliasAPI roomserverAPI.RoomserverAliasAPI
QueryAPI roomserverAPI.RoomserverQueryAPI
AppserviceAPI appserviceAPI.AppServiceQueryAPI
} }
// SetRoomCanonicalAlias implements alias.RoomserverCanonicalAliasAPI // 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 // SPEC: Room with `m.room.canonical_alias` with empty alias field should be
// treated same as room without a canonical alias. // treated same as room without a canonical alias.
if request.CanonicalAlias == "" { 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 { if err != nil {
return err return err
} }
// Check if alias exists // Check if the alias has been assigned to a different room
if len(roomID) == 0 { if len(aliasResp.RoomID) > 0 && aliasResp.RoomID != request.RoomID {
response.AliasExists = false response.CanonicalAliasExists = true
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
return nil 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 // 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 return err
} }
@ -102,29 +108,12 @@ func (r *RoomserverCanonicalAliasAPI) GetRoomIDForCanonicalAlias(
response *roomserverAPI.GetRoomIDForCanonicalAliasResponse, response *roomserverAPI.GetRoomIDForCanonicalAliasResponse,
) error { ) error {
// Look up the room ID in the database // 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 { if err != nil {
return err return err
} }
// RFC: Should we search in application service for canonical aliases?` // 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 response.RoomID = roomID
return nil return nil
} }
@ -151,7 +140,7 @@ func (r *RoomserverCanonicalAliasAPI) GetCreatorIDForCanonicalAlias(
request *roomserverAPI.GetCreatorIDForCanonicalAliasRequest, request *roomserverAPI.GetCreatorIDForCanonicalAliasRequest,
response *roomserverAPI.GetCreatorIDForCanonicalAliasResponse, response *roomserverAPI.GetCreatorIDForCanonicalAliasResponse,
) error { ) 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) creatorID, err := r.DB.GetCreatorIDForCanonicalAlias(ctx, request.CanonicalAlias)
if err != nil { if err != nil {
return err return err

View file

@ -65,12 +65,10 @@ func SetupRoomServerComponent(
aliasAPI.SetupHTTP(http.DefaultServeMux) aliasAPI.SetupHTTP(http.DefaultServeMux)
canonicalAliasAPI := canonicalAlias.RoomserverCanonicalAliasAPI{ canonicalAliasAPI := canonical_alias.RoomserverCanonicalAliasAPI{
DB: roomserverDB, DB: roomserverDB,
Cfg: base.Cfg, Cfg: base.Cfg,
InputAPI: &inputAPI, AliasAPI: &aliasAPI,
QueryAPI: &queryAPI,
AppserviceAPI: &asAPI,
} }
canonicalAliasAPI.SetupHTTP(http.DefaultServeMux) canonicalAliasAPI.SetupHTTP(http.DefaultServeMux)

View file

@ -49,7 +49,7 @@ const selectCreatorIDFromCanonicalAliasSQL = "" +
"SELECT creator_id FROM roomserver_canonical_aliases WHERE canonical_alias = $1" "SELECT creator_id FROM roomserver_canonical_aliases WHERE canonical_alias = $1"
const deleteRoomCanonicalAliasSQL = "" + const deleteRoomCanonicalAliasSQL = "" +
"DELETE FROM roomserver_canonical_aliases WHERE canonical_alias = $1" "DELETE FROM roomserver_canonical_aliases WHERE room_id = $1"
type roomCanonicalAliasStatements struct { type roomCanonicalAliasStatements struct {
insertRoomCanonicalAliasStmt *sql.Stmt insertRoomCanonicalAliasStmt *sql.Stmt

View file

@ -491,8 +491,8 @@ func (d *Database) GetCreatorIDForCanonicalAlias(
} }
// RemoveRoomCanonicalAlias implements alias.RoomserverCanonicalAliasAPIDB // RemoveRoomCanonicalAlias implements alias.RoomserverCanonicalAliasAPIDB
func (d *Database) RemoveRoomCanonicalAlias(ctx context.Context, canonical_alias string) error { func (d *Database) RemoveRoomCanonicalAlias(ctx context.Context, roomID string) error {
return d.statements.deleteRoomCanonicalAlias(ctx, canonical_alias) return d.statements.deleteRoomCanonicalAlias(ctx, roomID)
} }
// StateEntriesForTuples implements state.RoomStateDatabase // StateEntriesForTuples implements state.RoomStateDatabase