aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-12-18 13:33:28 +0000
committerGitHub <noreply@github.com>2020-12-18 13:33:28 +0000
commitfac71edc62508e517b188e00fb64651910761ff0 (patch)
tree8da8cc87de327c3fffa0325f16491b47ab34d2fb
parent65ff5c9a2c0b81cb9c6df6fb6e27418577eb1160 (diff)
Fix #1655 by re-adding the appservice alias query (#1660)
-rw-r--r--appservice/api/query.go4
-rw-r--r--build/gobind/monolith.go1
-rw-r--r--cmd/dendrite-demo-libp2p/main.go1
-rw-r--r--cmd/dendrite-demo-yggdrasil/main.go1
-rw-r--r--cmd/dendrite-monolith-server/main.go1
-rw-r--r--cmd/dendrite-polylith-multi/personalities/roomserver.go2
-rw-r--r--cmd/dendritejs/main.go1
-rw-r--r--roomserver/api/api.go2
-rw-r--r--roomserver/api/api_trace.go5
-rw-r--r--roomserver/internal/alias.go16
-rw-r--r--roomserver/internal/api.go6
-rw-r--r--roomserver/inthttp/client.go5
12 files changed, 34 insertions, 11 deletions
diff --git a/appservice/api/query.go b/appservice/api/query.go
index 29e374ac..cd74d866 100644
--- a/appservice/api/query.go
+++ b/appservice/api/query.go
@@ -20,9 +20,9 @@ package api
import (
"context"
"database/sql"
+ "errors"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
- "github.com/matrix-org/dendrite/internal/eventutil"
"github.com/matrix-org/dendrite/userapi/storage/accounts"
"github.com/matrix-org/gomatrixserverlib"
)
@@ -109,7 +109,7 @@ func RetrieveUserProfile(
// If no user exists, return
if !userResp.UserIDExists {
- return nil, eventutil.ErrProfileNoExists
+ return nil, errors.New("no known profile for given user ID")
}
// Try to query the user from the local database again
diff --git a/build/gobind/monolith.go b/build/gobind/monolith.go
index 1fda9a62..8cd5cb8b 100644
--- a/build/gobind/monolith.go
+++ b/build/gobind/monolith.go
@@ -130,6 +130,7 @@ func (m *DendriteMonolith) Start() {
)
asAPI := appservice.NewInternalAPI(base, userAPI, rsAPI)
+ rsAPI.SetAppserviceAPI(asAPI)
ygg.SetSessionFunc(func(address string) {
req := &api.PerformServersAliveRequest{
diff --git a/cmd/dendrite-demo-libp2p/main.go b/cmd/dendrite-demo-libp2p/main.go
index 92c283b5..3acec2fd 100644
--- a/cmd/dendrite-demo-libp2p/main.go
+++ b/cmd/dendrite-demo-libp2p/main.go
@@ -161,6 +161,7 @@ func main() {
&base.Base, cache.New(), userAPI,
)
asAPI := appservice.NewInternalAPI(&base.Base, userAPI, rsAPI)
+ rsAPI.SetAppserviceAPI(asAPI)
fsAPI := federationsender.NewInternalAPI(
&base.Base, federation, rsAPI, keyRing,
)
diff --git a/cmd/dendrite-demo-yggdrasil/main.go b/cmd/dendrite-demo-yggdrasil/main.go
index 16f92cfa..aea6f7c4 100644
--- a/cmd/dendrite-demo-yggdrasil/main.go
+++ b/cmd/dendrite-demo-yggdrasil/main.go
@@ -113,6 +113,7 @@ func main() {
)
asAPI := appservice.NewInternalAPI(base, userAPI, rsAPI)
+ rsAPI.SetAppserviceAPI(asAPI)
fsAPI := federationsender.NewInternalAPI(
base, federation, rsAPI, keyRing,
)
diff --git a/cmd/dendrite-monolith-server/main.go b/cmd/dendrite-monolith-server/main.go
index a1ade789..55bac6fe 100644
--- a/cmd/dendrite-monolith-server/main.go
+++ b/cmd/dendrite-monolith-server/main.go
@@ -126,6 +126,7 @@ func main() {
appservice.AddInternalRoutes(base.InternalAPIMux, asAPI)
asAPI = base.AppserviceHTTPClient()
}
+ rsAPI.SetAppserviceAPI(asAPI)
monolith := setup.Monolith{
Config: base.Cfg,
diff --git a/cmd/dendrite-polylith-multi/personalities/roomserver.go b/cmd/dendrite-polylith-multi/personalities/roomserver.go
index cf52a5c2..72f0f6d1 100644
--- a/cmd/dendrite-polylith-multi/personalities/roomserver.go
+++ b/cmd/dendrite-polylith-multi/personalities/roomserver.go
@@ -24,9 +24,11 @@ func RoomServer(base *setup.BaseDendrite, cfg *config.Dendrite) {
serverKeyAPI := base.SigningKeyServerHTTPClient()
keyRing := serverKeyAPI.KeyRing()
+ asAPI := base.AppserviceHTTPClient()
fsAPI := base.FederationSenderHTTPClient()
rsAPI := roomserver.NewInternalAPI(base, keyRing)
rsAPI.SetFederationSenderAPI(fsAPI)
+ rsAPI.SetAppserviceAPI(asAPI)
roomserver.AddInternalRoutes(base.InternalAPIMux, rsAPI)
base.SetupAndServeHTTP(
diff --git a/cmd/dendritejs/main.go b/cmd/dendritejs/main.go
index f247bc24..1ffb1667 100644
--- a/cmd/dendritejs/main.go
+++ b/cmd/dendritejs/main.go
@@ -207,6 +207,7 @@ func main() {
asQuery := appservice.NewInternalAPI(
base, userAPI, rsAPI,
)
+ rsAPI.SetAppserviceAPI(asQuery)
fedSenderAPI := federationsender.NewInternalAPI(base, federation, rsAPI, &keyRing)
rsAPI.SetFederationSenderAPI(fedSenderAPI)
p2pPublicRoomProvider := NewLibP2PPublicRoomsProvider(node, fedSenderAPI, federation)
diff --git a/roomserver/api/api.go b/roomserver/api/api.go
index ebc068ac..cedd6193 100644
--- a/roomserver/api/api.go
+++ b/roomserver/api/api.go
@@ -3,6 +3,7 @@ package api
import (
"context"
+ asAPI "github.com/matrix-org/dendrite/appservice/api"
fsAPI "github.com/matrix-org/dendrite/federationsender/api"
)
@@ -11,6 +12,7 @@ type RoomserverInternalAPI interface {
// needed to avoid chicken and egg scenario when setting up the
// interdependencies between the roomserver and other input APIs
SetFederationSenderAPI(fsAPI fsAPI.FederationSenderInternalAPI)
+ SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI)
InputRoomEvents(
ctx context.Context,
diff --git a/roomserver/api/api_trace.go b/roomserver/api/api_trace.go
index c279807e..40745975 100644
--- a/roomserver/api/api_trace.go
+++ b/roomserver/api/api_trace.go
@@ -5,6 +5,7 @@ import (
"encoding/json"
"fmt"
+ asAPI "github.com/matrix-org/dendrite/appservice/api"
fsAPI "github.com/matrix-org/dendrite/federationsender/api"
"github.com/matrix-org/util"
)
@@ -19,6 +20,10 @@ func (t *RoomserverInternalAPITrace) SetFederationSenderAPI(fsAPI fsAPI.Federati
t.Impl.SetFederationSenderAPI(fsAPI)
}
+func (t *RoomserverInternalAPITrace) SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI) {
+ t.Impl.SetAppserviceAPI(asAPI)
+}
+
func (t *RoomserverInternalAPITrace) InputRoomEvents(
ctx context.Context,
req *InputRoomEventsRequest,
diff --git a/roomserver/internal/alias.go b/roomserver/internal/alias.go
index 97b2ddf5..843b0bcc 100644
--- a/roomserver/internal/alias.go
+++ b/roomserver/internal/alias.go
@@ -23,6 +23,8 @@ import (
"github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/gomatrixserverlib"
+
+ asAPI "github.com/matrix-org/dendrite/appservice/api"
)
// RoomserverInternalAPIDatabase has the storage APIs needed to implement the alias API.
@@ -90,17 +92,13 @@ func (r *RoomserverInternalAPI) GetRoomIDForAlias(
return err
}
- /*
- TODO: Why is this here? It creates an unnecessary dependency
- from the roomserver to the appservice component, which should be
- altogether optional.
-
+ if r.asAPI != nil { // appservice component is wired in
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 {
+ aliasReq := asAPI.RoomAliasExistsRequest{Alias: request.Alias}
+ var aliasResp asAPI.RoomAliasExistsResponse
+ if err = r.asAPI.RoomAliasExists(ctx, &aliasReq, &aliasResp); err != nil {
return err
}
@@ -111,7 +109,7 @@ func (r *RoomserverInternalAPI) GetRoomIDForAlias(
}
}
}
- */
+ }
response.RoomID = roomID
return nil
diff --git a/roomserver/internal/api.go b/roomserver/internal/api.go
index 1ad971ec..91caa0bd 100644
--- a/roomserver/internal/api.go
+++ b/roomserver/internal/api.go
@@ -4,6 +4,7 @@ import (
"context"
"github.com/Shopify/sarama"
+ asAPI "github.com/matrix-org/dendrite/appservice/api"
fsAPI "github.com/matrix-org/dendrite/federationsender/api"
"github.com/matrix-org/dendrite/internal/caching"
"github.com/matrix-org/dendrite/roomserver/acls"
@@ -35,6 +36,7 @@ type RoomserverInternalAPI struct {
ServerName gomatrixserverlib.ServerName
KeyRing gomatrixserverlib.JSONVerifier
fsAPI fsAPI.FederationSenderInternalAPI
+ asAPI asAPI.AppServiceQueryAPI
OutputRoomEventTopic string // Kafka topic for new output room events
PerspectiveServerNames []gomatrixserverlib.ServerName
}
@@ -126,6 +128,10 @@ func (r *RoomserverInternalAPI) SetFederationSenderAPI(fsAPI fsAPI.FederationSen
}
}
+func (r *RoomserverInternalAPI) SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI) {
+ r.asAPI = asAPI
+}
+
func (r *RoomserverInternalAPI) PerformInvite(
ctx context.Context,
req *api.PerformInviteRequest,
diff --git a/roomserver/inthttp/client.go b/roomserver/inthttp/client.go
index 8a1c91d2..cac813ff 100644
--- a/roomserver/inthttp/client.go
+++ b/roomserver/inthttp/client.go
@@ -6,6 +6,7 @@ import (
"fmt"
"net/http"
+ asAPI "github.com/matrix-org/dendrite/appservice/api"
fsInputAPI "github.com/matrix-org/dendrite/federationsender/api"
"github.com/matrix-org/dendrite/internal/caching"
"github.com/matrix-org/dendrite/internal/httputil"
@@ -84,6 +85,10 @@ func NewRoomserverClient(
func (h *httpRoomserverInternalAPI) SetFederationSenderAPI(fsAPI fsInputAPI.FederationSenderInternalAPI) {
}
+// SetAppserviceAPI no-ops in HTTP client mode as there is no chicken/egg scenario
+func (h *httpRoomserverInternalAPI) SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI) {
+}
+
// SetRoomAlias implements RoomserverAliasAPI
func (h *httpRoomserverInternalAPI) SetRoomAlias(
ctx context.Context,