mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-17 20:03:10 -06:00
Fix build issues
This commit is contained in:
parent
5f15826c2f
commit
a142a7adf5
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue