aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--appservice/api/query.go36
-rw-r--r--appservice/appservice.go4
-rw-r--r--appservice/inthttp/client.go2
-rw-r--r--appservice/inthttp/server.go2
-rw-r--r--clientapi/clientapi.go2
-rw-r--r--clientapi/routing/createroom.go4
-rw-r--r--clientapi/routing/membership.go16
-rw-r--r--clientapi/routing/profile.go8
-rw-r--r--clientapi/routing/routing.go2
-rw-r--r--clientapi/routing/server_notices.go2
-rw-r--r--clientapi/routing/upgrade_room.go2
-rw-r--r--cmd/dendrite-monolith-server/main.go6
-rw-r--r--federationapi/api/api.go76
-rw-r--r--federationapi/federationapi.go17
-rw-r--r--federationapi/federationapi_test.go4
-rw-r--r--federationapi/internal/perform.go30
-rw-r--r--federationapi/inthttp/client.go13
-rw-r--r--federationapi/inthttp/server.go14
-rw-r--r--federationapi/routing/devices.go2
-rw-r--r--federationapi/routing/keys.go4
-rw-r--r--federationapi/routing/routing.go118
-rw-r--r--federationapi/routing/send.go4
-rw-r--r--internal/httputil/httpapi.go79
-rw-r--r--keyserver/api/api.go18
-rw-r--r--keyserver/internal/internal.go4
-rw-r--r--keyserver/inthttp/client.go2
-rw-r--r--roomserver/api/alias.go12
-rw-r--r--roomserver/api/api.go93
-rw-r--r--roomserver/api/api_trace.go14
-rw-r--r--roomserver/internal/alias.go19
-rw-r--r--roomserver/internal/api.go6
-rw-r--r--roomserver/internal/perform/perform_leave.go2
-rw-r--r--roomserver/inthttp/client.go17
-rw-r--r--roomserver/inthttp/server.go14
-rw-r--r--setup/base/base.go4
-rw-r--r--setup/monolith.go2
-rw-r--r--userapi/api/api.go11
37 files changed, 236 insertions, 429 deletions
diff --git a/appservice/api/query.go b/appservice/api/query.go
index 6db8be85..4d1cf947 100644
--- a/appservice/api/query.go
+++ b/appservice/api/query.go
@@ -26,6 +26,23 @@ import (
"github.com/matrix-org/gomatrixserverlib"
)
+// AppServiceInternalAPI is used to query user and room alias data from application
+// services
+type AppServiceInternalAPI interface {
+ // Check whether a room alias exists within any application service namespaces
+ RoomAliasExists(
+ ctx context.Context,
+ req *RoomAliasExistsRequest,
+ resp *RoomAliasExistsResponse,
+ ) error
+ // Check whether a user ID exists within any application service namespaces
+ UserIDExists(
+ ctx context.Context,
+ req *UserIDExistsRequest,
+ resp *UserIDExistsResponse,
+ ) error
+}
+
// RoomAliasExistsRequest is a request to an application service
// about whether a room alias exists
type RoomAliasExistsRequest struct {
@@ -60,30 +77,13 @@ type UserIDExistsResponse struct {
UserIDExists bool `json:"exists"`
}
-// AppServiceQueryAPI is used to query user and room alias data from application
-// services
-type AppServiceQueryAPI interface {
- // Check whether a room alias exists within any application service namespaces
- RoomAliasExists(
- ctx context.Context,
- req *RoomAliasExistsRequest,
- resp *RoomAliasExistsResponse,
- ) error
- // Check whether a user ID exists within any application service namespaces
- UserIDExists(
- ctx context.Context,
- req *UserIDExistsRequest,
- resp *UserIDExistsResponse,
- ) error
-}
-
// RetrieveUserProfile is a wrapper that queries both the local database and
// application services for a given user's profile
// TODO: Remove this, it's called from federationapi and clientapi but is a pure function
func RetrieveUserProfile(
ctx context.Context,
userID string,
- asAPI AppServiceQueryAPI,
+ asAPI AppServiceInternalAPI,
profileAPI userapi.ClientUserAPI,
) (*authtypes.Profile, error) {
localpart, _, err := gomatrixserverlib.SplitID('@', userID)
diff --git a/appservice/appservice.go b/appservice/appservice.go
index e026a787..bd292767 100644
--- a/appservice/appservice.go
+++ b/appservice/appservice.go
@@ -38,7 +38,7 @@ import (
)
// AddInternalRoutes registers HTTP handlers for internal API calls
-func AddInternalRoutes(router *mux.Router, queryAPI appserviceAPI.AppServiceQueryAPI) {
+func AddInternalRoutes(router *mux.Router, queryAPI appserviceAPI.AppServiceInternalAPI) {
inthttp.AddRoutes(queryAPI, router)
}
@@ -48,7 +48,7 @@ func NewInternalAPI(
base *base.BaseDendrite,
userAPI userapi.AppserviceUserAPI,
rsAPI roomserverAPI.AppserviceRoomserverAPI,
-) appserviceAPI.AppServiceQueryAPI {
+) appserviceAPI.AppServiceInternalAPI {
client := gomatrixserverlib.NewClient(
gomatrixserverlib.WithTimeout(time.Second*30),
gomatrixserverlib.WithKeepAlives(false),
diff --git a/appservice/inthttp/client.go b/appservice/inthttp/client.go
index 7e3cb208..0a8baea9 100644
--- a/appservice/inthttp/client.go
+++ b/appservice/inthttp/client.go
@@ -29,7 +29,7 @@ type httpAppServiceQueryAPI struct {
func NewAppserviceClient(
appserviceURL string,
httpClient *http.Client,
-) (api.AppServiceQueryAPI, error) {
+) (api.AppServiceInternalAPI, error) {
if httpClient == nil {
return nil, errors.New("NewRoomserverAliasAPIHTTP: httpClient is <nil>")
}
diff --git a/appservice/inthttp/server.go b/appservice/inthttp/server.go
index 009b7b5d..645b4387 100644
--- a/appservice/inthttp/server.go
+++ b/appservice/inthttp/server.go
@@ -11,7 +11,7 @@ import (
)
// AddRoutes adds the AppServiceQueryAPI handlers to the http.ServeMux.
-func AddRoutes(a api.AppServiceQueryAPI, internalAPIMux *mux.Router) {
+func AddRoutes(a api.AppServiceInternalAPI, internalAPIMux *mux.Router) {
internalAPIMux.Handle(
AppServiceRoomAliasExistsPath,
httputil.MakeInternalAPI("appserviceRoomAliasExists", func(req *http.Request) util.JSONResponse {
diff --git a/clientapi/clientapi.go b/clientapi/clientapi.go
index ad460908..c1e86114 100644
--- a/clientapi/clientapi.go
+++ b/clientapi/clientapi.go
@@ -34,7 +34,7 @@ func AddPublicRoutes(
base *base.BaseDendrite,
federation *gomatrixserverlib.FederationClient,
rsAPI roomserverAPI.ClientRoomserverAPI,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
transactionsCache *transactions.Cache,
fsAPI federationAPI.ClientFederationAPI,
userAPI userapi.ClientUserAPI,
diff --git a/clientapi/routing/createroom.go b/clientapi/routing/createroom.go
index a21abb0e..d40d84a7 100644
--- a/clientapi/routing/createroom.go
+++ b/clientapi/routing/createroom.go
@@ -138,7 +138,7 @@ func CreateRoom(
req *http.Request, device *api.Device,
cfg *config.ClientAPI,
profileAPI api.ClientUserAPI, rsAPI roomserverAPI.ClientRoomserverAPI,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
) util.JSONResponse {
var r createRoomRequest
resErr := httputil.UnmarshalJSONRequest(req, &r)
@@ -165,7 +165,7 @@ func createRoom(
r createRoomRequest, device *api.Device,
cfg *config.ClientAPI,
profileAPI api.ClientUserAPI, rsAPI roomserverAPI.ClientRoomserverAPI,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
evTime time.Time,
) util.JSONResponse {
// TODO (#267): Check room ID doesn't clash with an existing one, and we
diff --git a/clientapi/routing/membership.go b/clientapi/routing/membership.go
index 7d91c7b0..cfdf6f2d 100644
--- a/clientapi/routing/membership.go
+++ b/clientapi/routing/membership.go
@@ -41,7 +41,7 @@ var errMissingUserID = errors.New("'user_id' must be supplied")
func SendBan(
req *http.Request, profileAPI userapi.ClientUserAPI, device *userapi.Device,
roomID string, cfg *config.ClientAPI,
- rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceQueryAPI,
+ rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceInternalAPI,
) util.JSONResponse {
body, evTime, roomVer, reqErr := extractRequestData(req, roomID, rsAPI)
if reqErr != nil {
@@ -84,7 +84,7 @@ func SendBan(
func sendMembership(ctx context.Context, profileAPI userapi.ClientUserAPI, device *userapi.Device,
roomID, membership, reason string, cfg *config.ClientAPI, targetUserID string, evTime time.Time,
roomVer gomatrixserverlib.RoomVersion,
- rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceQueryAPI) util.JSONResponse {
+ rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceInternalAPI) util.JSONResponse {
event, err := buildMembershipEvent(
ctx, targetUserID, reason, profileAPI, device, membership,
@@ -127,7 +127,7 @@ func sendMembership(ctx context.Context, profileAPI userapi.ClientUserAPI, devic
func SendKick(
req *http.Request, profileAPI userapi.ClientUserAPI, device *userapi.Device,
roomID string, cfg *config.ClientAPI,
- rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceQueryAPI,
+ rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceInternalAPI,
) util.JSONResponse {
body, evTime, roomVer, reqErr := extractRequestData(req, roomID, rsAPI)
if reqErr != nil {
@@ -167,7 +167,7 @@ func SendKick(
func SendUnban(
req *http.Request, profileAPI userapi.ClientUserAPI, device *userapi.Device,
roomID string, cfg *config.ClientAPI,
- rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceQueryAPI,
+ rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceInternalAPI,
) util.JSONResponse {
body, evTime, roomVer, reqErr := extractRequestData(req, roomID, rsAPI)
if reqErr != nil {
@@ -202,7 +202,7 @@ func SendUnban(
func SendInvite(
req *http.Request, profileAPI userapi.ClientUserAPI, device *userapi.Device,
roomID string, cfg *config.ClientAPI,
- rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceQueryAPI,
+ rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceInternalAPI,
) util.JSONResponse {
body, evTime, _, reqErr := extractRequestData(req, roomID, rsAPI)
if reqErr != nil {
@@ -239,7 +239,7 @@ func sendInvite(
roomID, userID, reason string,
cfg *config.ClientAPI,
rsAPI roomserverAPI.ClientRoomserverAPI,
- asAPI appserviceAPI.AppServiceQueryAPI, evTime time.Time,
+ asAPI appserviceAPI.AppServiceInternalAPI, evTime time.Time,
) (util.JSONResponse, error) {
event, err := buildMembershipEvent(
ctx, userID, reason, profileAPI, device, "invite",
@@ -289,7 +289,7 @@ func buildMembershipEvent(
device *userapi.Device,
membership, roomID string, isDirect bool,
cfg *config.ClientAPI, evTime time.Time,
- rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceQueryAPI,
+ rsAPI roomserverAPI.ClientRoomserverAPI, asAPI appserviceAPI.AppServiceInternalAPI,
) (*gomatrixserverlib.HeaderedEvent, error) {
profile, err := loadProfile(ctx, targetUserID, cfg, profileAPI, asAPI)
if err != nil {
@@ -327,7 +327,7 @@ func loadProfile(
userID string,
cfg *config.ClientAPI,
profileAPI userapi.ClientUserAPI,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
) (*authtypes.Profile, error) {
_, serverName, err := gomatrixserverlib.SplitID('@', userID)
if err != nil {
diff --git a/clientapi/routing/profile.go b/clientapi/routing/profile.go
index 97f86afe..0685c735 100644
--- a/clientapi/routing/profile.go
+++ b/clientapi/routing/profile.go
@@ -37,7 +37,7 @@ import (
func GetProfile(
req *http.Request, profileAPI userapi.ClientUserAPI, cfg *config.ClientAPI,
userID string,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
federation *gomatrixserverlib.FederationClient,
) util.JSONResponse {
profile, err := getProfile(req.Context(), profileAPI, cfg, userID, asAPI, federation)
@@ -65,7 +65,7 @@ func GetProfile(
// GetAvatarURL implements GET /profile/{userID}/avatar_url
func GetAvatarURL(
req *http.Request, profileAPI userapi.ClientUserAPI, cfg *config.ClientAPI,
- userID string, asAPI appserviceAPI.AppServiceQueryAPI,
+ userID string, asAPI appserviceAPI.AppServiceInternalAPI,
federation *gomatrixserverlib.FederationClient,
) util.JSONResponse {
profile, err := getProfile(req.Context(), profileAPI, cfg, userID, asAPI, federation)
@@ -194,7 +194,7 @@ func SetAvatarURL(
// GetDisplayName implements GET /profile/{userID}/displayname
func GetDisplayName(
req *http.Request, profileAPI userapi.ClientUserAPI, cfg *config.ClientAPI,
- userID string, asAPI appserviceAPI.AppServiceQueryAPI,
+ userID string, asAPI appserviceAPI.AppServiceInternalAPI,
federation *gomatrixserverlib.FederationClient,
) util.JSONResponse {
profile, err := getProfile(req.Context(), profileAPI, cfg, userID, asAPI, federation)
@@ -327,7 +327,7 @@ func SetDisplayName(
func getProfile(
ctx context.Context, profileAPI userapi.ClientUserAPI, cfg *config.ClientAPI,
userID string,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
federation *gomatrixserverlib.FederationClient,
) (*authtypes.Profile, error) {
localpart, domain, err := gomatrixserverlib.SplitID('@', userID)
diff --git a/clientapi/routing/routing.go b/clientapi/routing/routing.go
index f9f71ed7..94becf46 100644
--- a/clientapi/routing/routing.go
+++ b/clientapi/routing/routing.go
@@ -51,7 +51,7 @@ func Setup(
publicAPIMux, synapseAdminRouter, dendriteAdminRouter *mux.Router,
cfg *config.ClientAPI,
rsAPI roomserverAPI.ClientRoomserverAPI,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
userAPI userapi.ClientUserAPI,
userDirectoryProvider userapi.QuerySearchProfilesAPI,
federation *gomatrixserverlib.FederationClient,
diff --git a/clientapi/routing/server_notices.go b/clientapi/routing/server_notices.go
index 9c34f2e1..9edeed2f 100644
--- a/clientapi/routing/server_notices.go
+++ b/clientapi/routing/server_notices.go
@@ -58,7 +58,7 @@ func SendServerNotice(
cfgClient *config.ClientAPI,
userAPI userapi.ClientUserAPI,
rsAPI api.ClientRoomserverAPI,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
device *userapi.Device,
senderDevice *userapi.Device,
txnID *string,
diff --git a/clientapi/routing/upgrade_room.go b/clientapi/routing/upgrade_room.go
index 505bf8f5..744e2d88 100644
--- a/clientapi/routing/upgrade_room.go
+++ b/clientapi/routing/upgrade_room.go
@@ -42,7 +42,7 @@ func UpgradeRoom(
cfg *config.ClientAPI,
roomID string, profileAPI userapi.ClientUserAPI,
rsAPI roomserverAPI.ClientRoomserverAPI,
- asAPI appserviceAPI.AppServiceQueryAPI,
+ asAPI appserviceAPI.AppServiceInternalAPI,
) util.JSONResponse {
var r upgradeRoomRequest
if rErr := httputil.UnmarshalJSONRequest(req, &r); rErr != nil {
diff --git a/cmd/dendrite-monolith-server/main.go b/cmd/dendrite-monolith-server/main.go
index 2fa4675a..845b9e46 100644
--- a/cmd/dendrite-monolith-server/main.go
+++ b/cmd/dendrite-monolith-server/main.go
@@ -89,6 +89,7 @@ func main() {
fsAPI := federationapi.NewInternalAPI(
base, federation, rsAPI, base.Caches, nil, false,
)
+ fsImplAPI := fsAPI
if base.UseHTTPAPIs {
federationapi.AddInternalRoutes(base.InternalAPIMux, fsAPI)
fsAPI = base.FederationAPIHTTPClient()
@@ -138,7 +139,10 @@ func main() {
FedClient: federation,
KeyRing: keyRing,
- AppserviceAPI: asAPI, FederationAPI: fsAPI,
+ AppserviceAPI: asAPI,
+ // always use the concrete impl here even in -http mode because adding public routes
+ // must be done on the concrete impl not an HTTP client else fedapi will call itself
+ FederationAPI: fsImplAPI,
RoomserverAPI: rsAPI,
UserAPI: userAPI,
KeyAPI: keyAPI,
diff --git a/federationapi/api/api.go b/federationapi/api/api.go
index 87b03718..fc25194e 100644
--- a/federationapi/api/api.go
+++ b/federationapi/api/api.go
@@ -10,30 +10,6 @@ import (
"github.com/matrix-org/gomatrixserverlib"
)
-// FederationClient is a subset of gomatrixserverlib.FederationClient functions which the fedsender
-// implements as proxy calls, with built-in backoff/retries/etc. Errors returned from functions in
-// this interface are of type FederationClientError
-type FederationClient interface {
- gomatrixserverlib.FederatedStateClient
- GetUserDevices(ctx context.Context, s gomatrixserverlib.ServerName, userID string) (res gomatrixserverlib.RespUserDevices, err error)
- ClaimKeys(ctx context.Context, s gomatrixserverlib.ServerName, oneTimeKeys map[string]map[string]string) (res gomatrixserverlib.RespClaimKeys, err error)
- QueryKeys(ctx context.Context, s gomatrixserverlib.ServerName, keys map[string][]string) (res gomatrixserverlib.RespQueryKeys, err error)
- MSC2836EventRelationships(ctx context.Context, dst gomatrixserverlib.ServerName, r gomatrixserverlib.MSC2836EventRelationshipsRequest, roomVersion gomatrixserverlib.RoomVersion) (res gomatrixserverlib.MSC2836EventRelationshipsResponse, err error)
- MSC2946Spaces(ctx context.Context, dst gomatrixserverlib.ServerName, roomID string, suggestedOnly bool) (res gomatrixserverlib.MSC2946SpacesResponse, err error)
- LookupServerKeys(ctx context.Context, s gomatrixserverlib.ServerName, keyRequests map[gomatrixserverlib.PublicKeyLookupRequest]gomatrixserverlib.Timestamp) ([]gomatrixserverlib.ServerKeys, error)
-}
-
-// FederationClientError is returned from FederationClient methods in the event of a problem.
-type FederationClientError struct {
- Err string
- RetryAfter time.Duration
- Blacklisted bool
-}
-
-func (e *FederationClientError) Error() string {
- return fmt.Sprintf("%s - (retry_after=%s, blacklisted=%v)", e.Err, e.RetryAfter.String(), e.Blacklisted)
-}
-
// FederationInternalAPI is used to query information from the federation sender.
type FederationInternalAPI interface {
FederationClient
@@ -43,22 +19,7 @@ type FederationInternalAPI interface {
QueryServerKeys(ctx context.Context, request *QueryServerKeysRequest, response *QueryServerKeysResponse) error
- // Query the server names of the joined hosts in a room.
- // Unlike QueryJoinedHostsInRoom, this function returns a de-duplicated slice
- // containing only the server names (without information for membership events).
- // The response will include this server if they are joined to the room.
- QueryJoinedHostServerNamesInRoom(
- ctx context.Context,
- request *QueryJoinedHostServerNamesInRoomRequest,
- response *QueryJoinedHostServerNamesInRoomResponse,
- ) error
- // Notifies the federation sender that these servers may be online and to retry sending messages.
- PerformServersAlive(
- ctx context.Context,
- request *PerformServersAliveRequest,
- response *PerformServersAliveResponse,
- ) error
- // Broadcasts an EDU to all servers in rooms we are joined to.
+ // Broadcasts an EDU to all servers in rooms we are joined to. Used in the yggdrasil demos.
PerformBroadcastEDU(
ctx context.Context,
request *PerformBroadcastEDURequest,
@@ -67,6 +28,10 @@ type FederationInternalAPI interface {
}
type ClientFederationAPI interface {
+ // Query the server names of the joined hosts in a room.
+ // Unlike QueryJoinedHostsInRoom, this function returns a de-duplicated slice
+ // containing only the server names (without information for membership events).
+ // The response will include this server if they are joined to the room.
QueryJoinedHostServerNamesInRoom(ctx context.Context, request *QueryJoinedHostServerNamesInRoomRequest, response *QueryJoinedHostServerNamesInRoomResponse) error
}
@@ -95,6 +60,30 @@ type RoomserverFederationAPI interface {
LookupMissingEvents(ctx context.Context, s gomatrixserverlib.ServerName, roomID string, missing gomatrixserverlib.MissingEvents, roomVersion gomatrixserverlib.RoomVersion) (res gomatrixserverlib.RespMissingEvents, err error)
}
+// FederationClient is a subset of gomatrixserverlib.FederationClient functions which the fedsender
+// implements as proxy calls, with built-in backoff/retries/etc. Errors returned from functions in
+// this interface are of type FederationClientError
+type FederationClient interface {
+ gomatrixserverlib.FederatedStateClient
+ GetUserDevices(ctx context.Context, s gomatrixserverlib.ServerName, userID string) (res gomatrixserverlib.RespUserDevices, err error)
+ ClaimKeys(ctx context.Context, s gomatrixserverlib.ServerName, oneTimeKeys map[string]map[string]string) (res gomatrixserverlib.RespClaimKeys, err error)
+ QueryKeys(ctx context.Context, s gomatrixserverlib.ServerName, keys map[string][]string) (res gomatrixserverlib.RespQueryKeys, err error)
+ MSC2836EventRelationships(ctx context.Context, dst gomatrixserverlib.ServerName, r gomatrixserverlib.MSC2836EventRelationshipsRequest, roomVersion gomatrixserverlib.RoomVersion) (res gomatrixserverlib.MSC2836EventRelationshipsResponse, err error)
+ MSC2946Spaces(ctx context.Context, dst gomatrixserverlib.ServerName, roomID string, suggestedOnly bool) (res gomatrixserverlib.MSC2946SpacesResponse, err error)
+ LookupServerKeys(ctx context.Context, s gomatrixserverlib.ServerName, keyRequests map[gomatrixserverlib.PublicKeyLookupRequest]gomatrixserverlib.Timestamp) ([]gomatrixserverlib.ServerKeys, error)
+}
+
+// FederationClientError is returned from FederationClient methods in the event of a problem.
+type FederationClientError struct {
+ Err string
+ RetryAfter time.Duration
+ Blacklisted bool
+}
+
+func (e *FederationClientError) Error() string {
+ return fmt.Sprintf("%s - (retry_after=%s, blacklisted=%v)", e.Err, e.RetryAfter.String(), e.Blacklisted)
+}
+
type QueryServerKeysRequest struct {
ServerName gomatrixserverlib.ServerName
KeyIDToCriteria map[gomatrixserverlib.KeyID]gomatrixserverlib.PublicKeyNotaryQueryCriteria
@@ -174,13 +163,6 @@ type PerformInviteResponse struct {
Event *gomatrixserverlib.HeaderedEvent `json:"event"`
}
-type PerformServersAliveRequest struct {
- Servers []gomatrixserverlib.ServerName
-}
-
-type PerformServersAliveResponse struct {
-}
-
// QueryJoinedHostServerNamesInRoomRequest is a request to QueryJoinedHostServerNames
type QueryJoinedHostServerNamesInRoomRequest struct {
RoomID string `json:"room_id"`
diff --git a/federationapi/federationapi.go b/federationapi/federationapi.go
index 632994db..e52377c9 100644
--- a/federationapi/federationapi.go
+++ b/federationapi/federationapi.go
@@ -50,8 +50,8 @@ func AddPublicRoutes(
federation *gomatrixserverlib.FederationClient,
keyRing gomatrixserverlib.JSONVerifier,
rsAPI roomserverAPI.FederationRoomserverAPI,
- federationAPI federationAPI.FederationInternalAPI,
- keyAPI keyserverAPI.KeyInternalAPI,
+ fedAPI federationAPI.FederationInternalAPI,
+ keyAPI keyserverAPI.FederationKeyAPI,
servers federationAPI.ServersInRoomProvider,
) {
cfg := &base.Cfg.FederationAPI
@@ -67,12 +67,23 @@ func AddPublicRoutes(
UserAPI: userAPI,
}
+ // the federationapi component is a bit unique in that it attaches public routes AND serves
+ // internal APIs (because it used to be 2 components: the 2nd being fedsender). As a result,
+ // the constructor shape is a bit wonky in that it is not valid to AddPublicRoutes without a
+ // concrete impl of FederationInternalAPI as the public routes and the internal API _should_
+ // be the same thing now.
+ f, ok := fedAPI.(*internal.FederationInternalAPI)
+ if !ok {
+ panic("federationapi.AddPublicRoutes called with a FederationInternalAPI impl which was not " +
+ "FederationInternalAPI. This is a programming error.")
+ }
+
routing.Setup(
base.PublicFederationAPIMux,
base.PublicKeyAPIMux,
base.PublicWellKnownAPIMux,
cfg,
- rsAPI, federationAPI, keyRing,
+ rsAPI, f, keyRing,
federation, userAPI, keyAPI, mscCfg,
servers, producer,
)
diff --git a/federationapi/federationapi_test.go b/federationapi/federationapi_test.go
index 68724164..eedebc6c 100644
--- a/federationapi/federationapi_test.go
+++ b/federationapi/federationapi_test.go
@@ -7,6 +7,7 @@ import (
"testing"
"github.com/matrix-org/dendrite/federationapi"
+ "github.com/matrix-org/dendrite/federationapi/internal"
"github.com/matrix-org/dendrite/internal/test"
"github.com/matrix-org/dendrite/setup/base"
"github.com/matrix-org/dendrite/setup/config"
@@ -27,10 +28,9 @@ func TestRoomsV3URLEscapeDoNot404(t *testing.T) {
cfg.FederationAPI.Database.ConnectionString = config.DataSource("file::memory:")
base := base.NewBaseDendrite(cfg, "Monolith")
keyRing := &test.NopJSONVerifier{}
- fsAPI := base.FederationAPIHTTPClient()
// TODO: This is pretty fragile, as if anything calls anything on these nils this test will break.
// Unfortunately, it makes little sense to instantiate these dependencies when we just want to test routing.
- federationapi.AddPublicRoutes(base, nil, nil, keyRing, nil, fsAPI, nil, nil)
+ federationapi.AddPublicRoutes(base, nil, nil, keyRing, nil, &internal.FederationInternalAPI{}, nil, nil)
baseURL, cancel := test.ListenAndServe(t, base.PublicFederationAPIMux, true)
defer cancel()
serverName := gomatrixserverlib.ServerName(strings.TrimPrefix(baseURL, "https://"))
diff --git a/federationapi/internal/perform.go b/federationapi/internal/perform.go
index aac36cc7..577cb70e 100644
--- a/federationapi/internal/perform.go
+++ b/federationapi/internal/perform.go
@@ -564,20 +564,6 @@ func (r *FederationInternalAPI) PerformInvite(
}
// PerformServersAlive implements api.FederationInternalAPI
-func (r *FederationInternalAPI) PerformServersAlive(
- ctx context.Context,
- request *api.PerformServersAliveRequest,
- response *api.PerformServersAliveResponse,
-) (err error) {
- for _, srv := range request.Servers {
- _ = r.db.RemoveServerFromBlacklist(srv)
- r.queues.RetryServer(srv)
- }
-
- return nil
-}
-
-// PerformServersAlive implements api.FederationInternalAPI
func (r *FederationInternalAPI) PerformBroadcastEDU(
ctx context.Context,
request *api.PerformBroadcastEDURequest,
@@ -600,18 +586,18 @@ func (r *FederationInternalAPI) PerformBroadcastEDU(
if err = r.queues.SendEDU(edu, r.cfg.Matrix.ServerName, destinations); err != nil {
return fmt.Errorf("r.queues.SendEDU: %w", err)
}
-
- wakeReq := &api.PerformServersAliveRequest{
- Servers: destinations,
- }
- wakeRes := &api.PerformServersAliveResponse{}
- if err := r.PerformServersAlive(ctx, wakeReq, wakeRes); err != nil {
- return fmt.Errorf("r.PerformServersAlive: %w", err)
- }
+ r.MarkServersAlive(destinations)
return nil
}
+func (r *FederationInternalAPI) MarkServersAlive(destinations []gomatrixserverlib.ServerName) {
+ for _, srv := range destinations {
+ _ = r.db.RemoveServerFromBlacklist(srv)
+ r.queues.RetryServer(srv)
+ }
+}
+
func sanityCheckAuthChain(authChain []*gomatrixserverlib.Event) error {
// sanity check we have a create event and it has a known room version
for _, ev := range authChain {
diff --git a/federationapi/inthttp/client.go b/federationapi/inthttp/client.go
index 01ca6595..295ddc49 100644
--- a/federationapi/inthttp/client.go
+++ b/federationapi/inthttp/client.go
@@ -23,7 +23,6 @@ const (
FederationAPIPerformLeaveRequestPath = "/federationapi/performLeaveRequest"
FederationAPIPerformInviteRequestPath = "/federationapi/performInviteRequest"
FederationAPIPerformOutboundPeekRequestPath = "/federationapi/performOutboundPeekRequest"
- FederationAPIPerformServersAlivePath = "/federationapi/performServersAlive"
FederationAPIPerformBroadcastEDUPath = "/federationapi/performBroadcastEDU"
FederationAPIGetUserDevicesPath = "/federationapi/client/getUserDevices"
@@ -97,18 +96,6 @@ func (h *httpFederationInternalAPI) PerformOutboundPeek(
return httputil.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
}
-func (h *httpFederationInternalAPI) PerformServersAlive(
- ctx context.Context,
- request *api.PerformServersAliveRequest,
- response *api.PerformServersAliveResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "PerformServersAlive")
- defer span.Finish()
-
- apiURL := h.federationAPIURL + FederationAPIPerformServersAlivePath
- return httputil.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
-
// QueryJoinedHostServerNamesInRoom implements FederationInternalAPI
func (h *httpFederationInternalAPI) QueryJoinedHostServerNamesInRoom(
ctx context.Context,
diff --git a/federationapi/inthttp/server.go b/federationapi/inthttp/server.go
index ca4930f2..28e52b32 100644
--- a/federationapi/inthttp/server.go
+++ b/federationapi/inthttp/server.go
@@ -82,20 +82,6 @@ func AddRoutes(intAPI api.FederationInternalAPI, internalAPIMux *mux.Router) {
}),
)
internalAPIMux.Handle(
- FederationAPIPerformServersAlivePath,
- httputil.MakeInternalAPI("PerformServersAliveRequest", func(req *http.Request) util.JSONResponse {
- var request api.PerformServersAliveRequest
- var response api.PerformServersAliveResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.MessageResponse(http.StatusBadRequest, err.Error())
- }
- if err := intAPI.PerformServersAlive(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- internalAPIMux.Handle(
FederationAPIPerformBroadcastEDUPath,
httputil.MakeInternalAPI("PerformBroadcastEDU", func(req *http.Request) util.JSONResponse {
var request api.PerformBroadcastEDURequest
diff --git a/federationapi/routing/devices.go b/federationapi/routing/devices.go
index 57286fa9..1a092645 100644
--- a/federationapi/routing/devices.go
+++ b/federationapi/routing/devices.go
@@ -26,7 +26,7 @@ import (
// GetUserDevices for the given user id
func GetUserDevices(
req *http.Request,
- keyAPI keyapi.KeyInternalAPI,
+ keyAPI keyapi.FederationKeyAPI,
userID string,
) util.JSONResponse {
var res keyapi.QueryDeviceMessagesResponse
diff --git a/federationapi/routing/keys.go b/federationapi/routing/keys.go
index 49a6c558..b1a9b671 100644
--- a/federationapi/routing/keys.go
+++ b/federationapi/routing/keys.go
@@ -37,7 +37,7 @@ type queryKeysRequest struct {
// QueryDeviceKeys returns device keys for users on this server.
// https://matrix.org/docs/spec/server_server/latest#post-matrix-federation-v1-user-keys-query
func QueryDeviceKeys(
- httpReq *http.Request, request *gomatrixserverlib.FederationRequest, keyAPI api.KeyInternalAPI, thisServer gomatrixserverlib.ServerName,
+ httpReq *http.Request, request *gomatrixserverlib.FederationRequest, keyAPI api.FederationKeyAPI, thisServer gomatrixserverlib.ServerName,
) util.JSONResponse {
var qkr queryKeysRequest
err := json.Unmarshal(request.Content(), &qkr)
@@ -89,7 +89,7 @@ type claimOTKsRequest struct {
// ClaimOneTimeKeys claims OTKs for users on this server.
// https://matrix.org/docs/spec/server_server/latest#post-matrix-federation-v1-user-keys-claim
func ClaimOneTimeKeys(
- httpReq *http.Request, request *gomatrixserverlib.FederationRequest, keyAPI api.KeyInternalAPI, thisServer gomatrixserverlib.ServerName,
+ httpReq *http.Request, request *gomatrixserverlib.FederationRequest, keyAPI api.FederationKeyAPI, thisServer gomatrixserverlib.ServerName,
) util.JSONResponse {
var cor claimOTKsRequest
err := json.Unmarshal(request.Content(), &cor)
diff --git a/federationapi/routing/routing.go b/federationapi/routing/routing.go
index 51adc279..9f95ed07 100644
--- a/federationapi/routing/routing.go
+++ b/federationapi/routing/routing.go
@@ -18,10 +18,14 @@ import (
"context"
"fmt"
"net/http"
+ "sync"
+ "time"
+ "github.com/getsentry/sentry-go"
"github.com/gorilla/mux"
"github.com/matrix-org/dendrite/clientapi/jsonerror"
federationAPI "github.com/matrix-org/dendrite/federationapi/api"
+ fedInternal "github.com/matrix-org/dendrite/federationapi/internal"
"github.com/matrix-org/dendrite/federationapi/producers"
"github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/internal/httputil"
@@ -48,11 +52,11 @@ func Setup(
fedMux, keyMux, wkMux *mux.Router,
cfg *config.FederationAPI,
rsAPI roomserverAPI.FederationRoomserverAPI,
- fsAPI federationAPI.FederationInternalAPI,
+ fsAPI *fedInternal.FederationInternalAPI,
keys gomatrixserverlib.JSONVerifier,
federation *gomatrixserverlib.FederationClient,
userAPI userapi.FederationUserAPI,
- keyAPI keyserverAPI.KeyInternalAPI,
+ keyAPI keyserverAPI.FederationKeyAPI,
mscCfg *config.MSCs,
servers federationAPI.ServersInRoomProvider,
producer *producers.SyncAPIProducer,
@@ -65,7 +69,7 @@ func Setup(
v1fedmux := fedMux.PathPrefix("/v1").Subrouter()
v2fedmux := fedMux.PathPrefix("/v2").Subrouter()
- wakeup := &httputil.FederationWakeups{
+ wakeup := &FederationWakeups{
FsAPI: fsAPI,
}
@@ -119,7 +123,7 @@ func Setup(
v2keysmux.Handle("/query/{serverName}/{keyID}", notaryKeys).Methods(http.MethodGet)
mu := internal.NewMutexByRoom()
- v1fedmux.Handle("/send/{txnID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/send/{txnID}", MakeFedAPI(
"federation_send", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
return Send(
@@ -129,7 +133,7 @@ func Setup(
},
)).Methods(http.MethodPut, http.MethodOptions)
- v1fedmux.Handle("/invite/{roomID}/{eventID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/invite/{roomID}/{eventID}", MakeFedAPI(
"federation_invite", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -145,7 +149,7 @@ func Setup(
},
)).Methods(http.MethodPut, http.MethodOptions)
- v2fedmux.Handle("/invite/{roomID}/{eventID}", httputil.MakeFedAPI(
+ v2fedmux.Handle("/invite/{roomID}/{eventID}", MakeFedAPI(
"federation_invite", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -167,7 +171,7 @@ func Setup(
},
)).Methods(http.MethodPost, http.MethodOptions)
- v1fedmux.Handle("/exchange_third_party_invite/{roomID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/exchange_third_party_invite/{roomID}", MakeFedAPI(
"exchange_third_party_invite", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
return ExchangeThirdPartyInvite(
@@ -176,7 +180,7 @@ func Setup(
},
)).Methods(http.MethodPut, http.MethodOptions)
- v1fedmux.Handle("/event/{eventID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/event/{eventID}", MakeFedAPI(
"federation_get_event", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
return GetEvent(
@@ -185,7 +189,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/state/{roomID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/state/{roomID}", MakeFedAPI(
"federation_get_state", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -200,7 +204,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/state_ids/{roomID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/state_ids/{roomID}", MakeFedAPI(
"federation_get_state_ids", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -215,7 +219,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/event_auth/{roomID}/{eventID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/event_auth/{roomID}/{eventID}", MakeFedAPI(
"federation_get_event_auth", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -230,7 +234,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/query/directory", httputil.MakeFedAPI(
+ v1fedmux.Handle("/query/directory", MakeFedAPI(
"federation_query_room_alias", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
return RoomAliasToID(
@@ -239,7 +243,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/query/profile", httputil.MakeFedAPI(
+ v1fedmux.Handle("/query/profile", MakeFedAPI(
"federation_query_profile", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
return GetProfile(
@@ -248,7 +252,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/user/devices/{userID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/user/devices/{userID}", MakeFedAPI(
"federation_user_devices", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
return GetUserDevices(
@@ -258,7 +262,7 @@ func Setup(
)).Methods(http.MethodGet)
if mscCfg.Enabled("msc2444") {
- v1fedmux.Handle("/peek/{roomID}/{peekID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/peek/{roomID}/{peekID}", MakeFedAPI(
"federation_peek", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -289,7 +293,7 @@ func Setup(
)).Methods(http.MethodPut, http.MethodDelete)
}
- v1fedmux.Handle("/make_join/{roomID}/{userID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/make_join/{roomID}/{userID}", MakeFedAPI(
"federation_make_join", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -320,7 +324,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/send_join/{roomID}/{eventID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/send_join/{roomID}/{eventID}", MakeFedAPI(
"federation_send_join", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -352,7 +356,7 @@ func Setup(
},
)).Methods(http.MethodPut)
- v2fedmux.Handle("/send_join/{roomID}/{eventID}", httputil.MakeFedAPI(
+ v2fedmux.Handle("/send_join/{roomID}/{eventID}", MakeFedAPI(
"federation_send_join", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -369,7 +373,7 @@ func Setup(
},
)).Methods(http.MethodPut)
- v1fedmux.Handle("/make_leave/{roomID}/{eventID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/make_leave/{roomID}/{eventID}", MakeFedAPI(
"federation_make_leave", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -386,7 +390,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/send_leave/{roomID}/{eventID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/send_leave/{roomID}/{eventID}", MakeFedAPI(
"federation_send_leave", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -418,7 +422,7 @@ func Setup(
},
)).Methods(http.MethodPut)
- v2fedmux.Handle("/send_leave/{roomID}/{eventID}", httputil.MakeFedAPI(
+ v2fedmux.Handle("/send_leave/{roomID}/{eventID}", MakeFedAPI(
"federation_send_leave", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -442,7 +446,7 @@ func Setup(
},
)).Methods(http.MethodGet)
- v1fedmux.Handle("/get_missing_events/{roomID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/get_missing_events/{roomID}", MakeFedAPI(
"federation_get_missing_events", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -455,7 +459,7 @@ func Setup(
},
)).Methods(http.MethodPost)
- v1fedmux.Handle("/backfill/{roomID}", httputil.MakeFedAPI(
+ v1fedmux.Handle("/backfill/{roomID}", MakeFedAPI(
"federation_backfill", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
if roomserverAPI.IsServerBannedFromRoom(httpReq.Context(), rsAPI, vars["roomID"], request.Origin()) {
@@ -474,14 +478,14 @@ func Setup(
}),
).Methods(http.MethodGet, http.MethodPost)
- v1fedmux.Handle("/user/keys/claim", httputil.MakeFedAPI(
+ v1fedmux.Handle("/user/keys/claim", MakeFedAPI(
"federation_keys_claim", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
return ClaimOneTimeKeys(httpReq, request, keyAPI, cfg.Matrix.ServerName)
},
)).Methods(http.MethodPost)
- v1fedmux.Handle("/user/keys/query", httputil.MakeFedAPI(
+ v1fedmux.Handle("/user/keys/query", MakeFedAPI(
"federation_keys_query", cfg.Matrix.ServerName, keys, wakeup,
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
return QueryDeviceKeys(httpReq, request, keyAPI, cfg.Matrix.ServerName)
@@ -518,3 +522,67 @@ func ErrorIfLocalServerNotInRoom(
}
return nil
}
+
+// MakeFedAPI makes an http.Handler that checks matrix federation authentication.
+func MakeFedAPI(
+ metricsName string,
+ serverName gomatrixserverlib.ServerName,
+ keyRing gomatrixserverlib.JSONVerifier,
+ wakeup *FederationWakeups,
+ f func(*http.Request, *gomatrixserverlib.FederationRequest, map[string]string) util.JSONResponse,
+) http.Handler {
+ h := func(req *http.Request) util.JSONResponse {
+ fedReq, errResp := gomatrixserverlib.VerifyHTTPRequest(
+ req, time.Now(), serverName, keyRing,
+ )
+ if fedReq == nil {
+ return errResp
+ }
+ // add the user to Sentry, if enabled
+ hub := sentry.GetHubFromContext(req.Context())
+ if hub != nil {
+ hub.Scope().SetTag("origin", string(fedReq.Origin()))
+ hub.Scope().SetTag("uri", fedReq.RequestURI())
+ }
+ defer func() {
+ if r := recover(); r != nil {
+ if hub != nil {
+ hub.CaptureException(fmt.Errorf("%s panicked", req.URL.Path))
+ }
+ // re-panic to return the 500
+ panic(r)
+ }
+ }()
+ go wakeup.Wakeup(req.Context(), fedReq.Origin())
+ vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
+ if err != nil {
+ return util.MatrixErrorResponse(400, "M_UNRECOGNISED", "badly encoded query params")
+ }
+
+ jsonRes := f(req, fedReq, vars)
+ // do not log 4xx as errors as they are client fails, not server fails
+ if hub != nil && jsonRes.Code >= 500 {
+ hub.Scope().SetExtra("response", jsonRes)
+ hub.CaptureException(fmt.Errorf("%s returned HTTP %d", req.URL.Path, jsonRes.Code))
+ }
+ return jsonRes
+ }
+ return httputil.MakeExternalAPI(metricsName, h)
+}
+
+type FederationWakeups struct {
+ FsAPI *fedInternal.FederationInternalAPI
+ origins sync.Map
+}
+
+func (f *FederationWakeups) Wakeup(ctx context.Context, origin gomatrixserverlib.ServerName) {
+ key, keyok := f.origins.Load(origin)
+ if keyok {
+ lastTime, ok := key.(time.Time)
+ if ok && time.Since(lastTime) < time.Minute {
+ return
+ }
+ }
+ f.FsAPI.MarkServersAlive([]gomatrixserverlib.ServerName{origin})
+ f.origins.Store(origin, time.Now())
+}
diff --git a/federationapi/routing/send.go b/federationapi/routing/send.go
index b9b6d33b..55a11367 100644
--- a/federationapi/routing/send.go
+++ b/federationapi/routing/send.go
@@ -83,7 +83,7 @@ func Send(
txnID gomatrixserverlib.TransactionID,
cfg *config.FederationAPI,
rsAPI api.FederationRoomserverAPI,
- keyAPI keyapi.KeyInternalAPI,
+ keyAPI keyapi.FederationKeyAPI,
keys gomatrixserverlib.JSONVerifier,
federation *gomatrixserverlib.FederationClient,
mu *internal.MutexByRoom,
@@ -183,7 +183,7 @@ func Send(
type txnReq struct {
gomatrixserverlib.Transaction
rsAPI api.FederationRoomserverAPI
- keyAPI keyapi.KeyInternalAPI
+ keyAPI keyapi.FederationKeyAPI
ourServerName gomatrixserverlib.ServerName
keys gomatrixserverlib.JSONVerifier
federation txnFederationClient
diff --git a/internal/httputil/httpapi.go b/internal/httputil/httpapi.go
index 3a818cc5..aba50ae4 100644
--- a/internal/httputil/httpapi.go
+++ b/internal/httputil/httpapi.go
@@ -15,7 +15,6 @@
package httputil
import (
- "context"
"fmt"
"io"
"net/http"
@@ -23,15 +22,10 @@ import (
"net/http/httputil"
"os"
"strings"
- "sync"
- "time"
"github.com/getsentry/sentry-go"
- "github.com/gorilla/mux"
"github.com/matrix-org/dendrite/clientapi/auth"
- federationapiAPI "github.com/matrix-org/dendrite/federationapi/api"
userapi "github.com/matrix-org/dendrite/userapi/api"
- "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util"
opentracing "github.com/opentracing/opentracing-go"
"github.com/opentracing/opentracing-go/ext"
@@ -226,79 +220,6 @@ func MakeInternalAPI(metricsName string, f func(*http.Request) util.JSONResponse
)
}
-// MakeFedAPI makes an http.Handler that checks matrix federation authentication.
-func MakeFedAPI(
- metricsName string,
- serverName gomatrixserverlib.ServerName,
- keyRing gomatrixserverlib.JSONVerifier,
- wakeup *FederationWakeups,
- f func(*http.Request, *gomatrixserverlib.FederationRequest, map[string]string) util.JSONResponse,
-) http.Handler {
- h := func(req *http.Request) util.JSONResponse {
- fedReq, errResp := gomatrixserverlib.VerifyHTTPRequest(
- req, time.Now(), serverName, keyRing,
- )
- if fedReq == nil {
- return errResp
- }
- // add the user to Sentry, if enabled
- hub := sentry.GetHubFromContext(req.Context())
- if hub != nil {
- hub.Scope().SetTag("origin", string(fedReq.Origin()))
- hub.Scope().SetTag("uri", fedReq.RequestURI())
- }
- defer func() {
- if r := recover(); r != nil {
- if hub != nil {
- hub.CaptureException(fmt.Errorf("%s panicked", req.URL.Path))
- }
- // re-panic to return the 500
- panic(r)
- }
- }()
- go wakeup.Wakeup(req.Context(), fedReq.Origin())
- vars, err := URLDecodeMapValues(mux.Vars(req))
- if err != nil {
- return util.MatrixErrorResponse(400, "M_UNRECOGNISED", "badly encoded query params")
- }
-
- jsonRes := f(req, fedReq, vars)
- // do not log 4xx as errors as they are client fails, not server fails
- if hub != nil && jsonRes.Code >= 500 {
- hub.Scope().SetExtra("response", jsonRes)
- hub.CaptureException(fmt.Errorf("%s returned HTTP %d", req.URL.Path, jsonRes.Code))
- }
- return jsonRes
- }
- return MakeExternalAPI(metricsName, h)
-}
-
-type FederationWakeups struct {
- FsAPI federationapiAPI.FederationInternalAPI
- origins sync.Map
-}
-
-func (f *FederationWakeups) Wakeup(ctx context.Context, origin gomatrixserverlib.ServerName) {
- key, keyok := f.origins.Load(origin)
- if keyok {
- lastTime, ok := key.(time.Time)
- if ok && time.Since(lastTime) < time.Minute {
- return
- }
- }
- aliveReq := federationapiAPI.PerformServersAliveRequest{
- Servers: []gomatrixserverlib.ServerName{origin},
- }
- aliveRes := federationapiAPI.PerformServersAliveResponse{}
- if err := f.FsAPI.PerformServersAlive(ctx, &aliveReq, &aliveRes); err != nil {
- util.GetLogger(ctx).WithError(err).WithFields(logrus.Fields{
- "origin": origin,
- }).Warn("incoming federation request failed to notify server alive")
- } else {
- f.origins.Store(origin, time.Now())
- }
-}
-
// WrapHandlerInBasicAuth adds basic auth to a handler. Only used for /metrics
func WrapHandlerInBasicAuth(h http.Handler, b BasicAuth) http.HandlerFunc {
if b.Username == "" || b.Password == "" {
diff --git a/keyserver/api/api.go b/keyserver/api/api.go
index 6cee2c01..140f0356 100644
--- a/keyserver/api/api.go
+++ b/keyserver/api/api.go
@@ -29,15 +29,11 @@ import (
type KeyInternalAPI interface {
SyncKeyAPI
ClientKeyAPI
+ FederationKeyAPI
UserKeyAPI
// SetUserAPI assigns a user API to query when extracting device names.
- SetUserAPI(i userapi.UserInternalAPI)
- // InputDeviceListUpdate from a federated server EDU
- InputDeviceListUpdate(ctx context.Context, req *InputDeviceListUpdateRequest, res *InputDeviceListUpdateResponse)
-
- QueryDeviceMessages(ctx context.Context, req *QueryDeviceMessagesRequest, res *QueryDeviceMessagesResponse)
- QuerySignatures(ctx context.Context, req *QuerySignaturesRequest, res *QuerySignaturesResponse)
+ SetUserAPI(i userapi.KeyserverUserAPI)
}
// API functions required by the clientapi
@@ -62,6 +58,16 @@ type SyncKeyAPI interface {
QueryOneTimeKeys(ctx context.Context, req *QueryOneTimeKeysRequest, res *QueryOneTimeKeysResponse)
}
+type FederationKeyAPI interface {
+ QueryKeys(ctx context.Context, req *QueryKeysRequest, res *QueryKeysResponse)
+ QuerySignatures(ctx context.Context, req *QuerySignaturesRequest, res *QuerySignaturesResponse)
+ QueryDeviceMessages(ctx context.Context, req *QueryDeviceMessagesRequest, res *QueryDeviceMessagesResponse)
+ // InputDeviceListUpdate from a federated server EDU
+ InputDeviceListUpdate(ctx context.Context, req *InputDeviceListUpdateRequest, res *InputDeviceListUpdateResponse)
+ PerformUploadDeviceKeys(ctx context.Context, req *PerformUploadDeviceKeysRequest, res *PerformUploadDeviceKeysResponse)
+ PerformClaimKeys(ctx context.Context, req *PerformClaimKeysRequest, res *PerformClaimKeysResponse)
+}
+
// KeyError is returned if there was a problem performing/querying the server
type KeyError struct {
Err string `json:"error"`
diff --git a/keyserver/internal/internal.go b/keyserver/internal/internal.go
index e556f44b..be71e575 100644
--- a/keyserver/internal/internal.go
+++ b/keyserver/internal/internal.go
@@ -38,12 +38,12 @@ type KeyInternalAPI struct {
DB storage.Database
ThisServer gomatrixserverlib.ServerName
FedClient fedsenderapi.FederationClient
- UserAPI userapi.UserInternalAPI
+ UserAPI userapi.KeyserverUserAPI
Producer *producers.KeyChange
Updater *DeviceListUpdater
}
-func (a *KeyInternalAPI) SetUserAPI(i userapi.UserInternalAPI) {
+func (a *KeyInternalAPI) SetUserAPI(i userapi.KeyserverUserAPI) {
a.UserAPI = i
}
diff --git a/keyserver/inthttp/client.go b/keyserver/inthttp/client.go
index f50789b8..abce8158 100644
--- a/keyserver/inthttp/client.go
+++ b/keyserver/inthttp/client.go
@@ -60,7 +60,7 @@ type httpKeyInternalAPI struct {
httpClient *http.Client
}
-func (h *httpKeyInternalAPI) SetUserAPI(i userapi.UserInternalAPI) {
+func (h *httpKeyInternalAPI) SetUserAPI(i userapi.KeyserverUserAPI) {
// no-op: doesn't need it
}
func (h *httpKeyInternalAPI) InputDeviceListUpdate(
diff --git a/roomserver/api/alias.go b/roomserver/api/alias.go
index baab2775..37892a44 100644
--- a/roomserver/api/alias.go
+++ b/roomserver/api/alias.go
@@ -59,18 +59,6 @@ type GetAliasesForRoomIDResponse struct {
Aliases []string `json:"aliases"`
}
-// GetCreatorIDForAliasRequest is a request to GetCreatorIDForAlias
-type GetCreatorIDForAliasRequest struct {
- // The alias we want to find the creator of
- Alias string `json:"alias"`
-}
-
-// GetCreatorIDForAliasResponse is a response to GetCreatorIDForAlias
-type GetCreatorIDForAliasResponse struct {
- // The user ID of the alias creator
- UserID string `json:"user_id"`
-}
-
// RemoveRoomAliasRequest is a request to RemoveRoomAlias
type RemoveRoomAliasRequest struct {
// ID of the user removing the alias
diff --git a/roomserver/api/api.go b/roomserver/api/api.go
index 7e1e568c..cbb4cebc 100644
--- a/roomserver/api/api.go
+++ b/roomserver/api/api.go
@@ -12,10 +12,6 @@ import (
// RoomserverInputAPI is used to write events to the room server.
type RoomserverInternalAPI interface {
- InputRoomEventsAPI
- QueryLatestEventsAndStateAPI
- QueryEventsAPI
-
SyncRoomserverAPI
AppserviceRoomserverAPI
ClientRoomserverAPI
@@ -25,101 +21,18 @@ type RoomserverInternalAPI interface {
// needed to avoid chicken and egg scenario when setting up the
// interdependencies between the roomserver and other input APIs
SetFederationAPI(fsAPI fsAPI.RoomserverFederationAPI, keyRing *gomatrixserverlib.KeyRing)
- SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI)
- SetUserAPI(userAPI userapi.UserInternalAPI)
-
- PerformInvite(
- ctx context.Context,
- req *PerformInviteRequest,
- res *PerformInviteResponse,
- ) error
-
- PerformJoin(
- ctx context.Context,
- req *PerformJoinRequest,
- res *PerformJoinResponse,
- )
-
- PerformLeave(
- ctx context.Context,
- req *PerformLeaveRequest,
- res *PerformLeaveResponse,
- ) error
-
- PerformPeek(
- ctx context.Context,
- req *PerformPeekRequest,
- res *PerformPeekResponse,
- )
-
- PerformUnpeek(
- ctx context.Context,
- req *PerformUnpeekRequest,
- res *PerformUnpeekResponse,
- )
-
- PerformPublish(
- ctx context.Context,
- req *PerformPublishRequest,
- res *PerformPublishResponse,
- )
+ SetAppserviceAPI(asAPI asAPI.AppServiceInternalAPI)
+ SetUserAPI(userAPI userapi.RoomserverUserAPI)
// QueryAuthChain returns the entire auth chain for the event IDs given.
// The response includes the events in the request.
// Omits without error for any missing auth events. There will be no duplicates.
+ // Used in MSC2836.
QueryAuthChain(
ctx context.Context,
req *QueryAuthChainRequest,
res *QueryAuthChainResponse,
) error
-
- // QueryRoomsForUser retrieves a list of room IDs matching the given query.
- QueryRoomsForUser(ctx context.Context, req *QueryRoomsForUserRequest, res *QueryRoomsForUserResponse) error
-
- // PerformRoomUpgrade upgrades a room to a newer version
- PerformRoomUpgrade(ctx context.Context, req *PerformRoomUpgradeRequest, resp *PerformRoomUpgradeResponse)
-
- // Asks for the default room version as preferred by the server.
- QueryRoomVersionCapabilities(
- ctx context.Context,
- req *QueryRoomVersionCapabilitiesRequest,
- res *QueryRoomVersionCapabilitiesResponse,
- ) error
-
- // Asks for the room version for a given room.
- QueryRoomVersionForRoom(
- ctx context.Context,
- req *QueryRoomVersionForRoomRequest,
- res *QueryRoomVersionForRoomResponse,
- ) error
-
- // Set a room alias
- SetRoomAlias(
- ctx context.Context,
- req *SetRoomAliasRequest,
- res *SetRoomAliasResponse,
- ) error
-
- // Get the room ID for an alias
- GetRoomIDForAlias(
- ctx context.Context,
- req *GetRoomIDForAliasRequest,
- res *GetRoomIDForAliasResponse,
- ) error
-
- // Get the user ID of the creator of an alias
- GetCreatorIDForAlias(
- ctx context.Context,
- req *GetCreatorIDForAliasRequest,
- res *GetCreatorIDForAliasResponse,
- ) error
-
- // Remove a room alias
- RemoveRoomAlias(
- ctx context.Context,
- req *RemoveRoomAliasRequest,
- res *RemoveRoomAliasResponse,
- ) error
}
type InputRoomEventsAPI interface {
diff --git a/roomserver/api/api_trace.go b/roomserver/api/api_trace.go
index bc60999e..71132464 100644
--- a/roomserver/api/api_trace.go
+++ b/roomserver/api/api_trace.go
@@ -23,11 +23,11 @@ func (t *RoomserverInternalAPITrace) SetFederationAPI(fsAPI fsAPI.RoomserverFede
t.Impl.SetFederationAPI(fsAPI, keyRing)
}
-func (t *RoomserverInternalAPITrace) SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI) {
+func (t *RoomserverInternalAPITrace) SetAppserviceAPI(asAPI asAPI.AppServiceInternalAPI) {
t.Impl.SetAppserviceAPI(asAPI)
}
-func (t *RoomserverInternalAPITrace) SetUserAPI(userAPI userapi.UserInternalAPI) {
+func (t *RoomserverInternalAPITrace) SetUserAPI(userAPI userapi.RoomserverUserAPI) {
t.Impl.SetUserAPI(userAPI)
}
@@ -293,16 +293,6 @@ func (t *RoomserverInternalAPITrace) GetAliasesForRoomID(
return err
}
-func (t *RoomserverInternalAPITrace) GetCreatorIDForAlias(
- ctx context.Context,
- req *GetCreatorIDForAliasRequest,
- res *GetCreatorIDForAliasResponse,
-) error {
- err := t.Impl.GetCreatorIDForAlias(ctx, req, res)
- util.GetLogger(ctx).WithError(err).Infof("GetCreatorIDForAlias req=%+v res=%+v", js(req), js(res))
- return err
-}
-
func (t *RoomserverInternalAPITrace) RemoveRoomAlias(
ctx context.Context,
req *RemoveRoomAliasRequest,
diff --git a/roomserver/internal/alias.go b/roomserver/internal/alias.go
index 02fc4a5a..f47ae47f 100644
--- a/roomserver/internal/alias.go
+++ b/roomserver/internal/alias.go
@@ -41,9 +41,6 @@ type RoomserverInternalAPIDatabase interface {
// Look up all aliases referring to a given room ID.
// Returns an error if there was a problem talking to the database.
GetAliasesForRoomID(ctx context.Context, roomID string) ([]string, error)
- // Get the user ID of the creator of an alias.
- // Returns an error if there was a problem talking to the database.
- GetCreatorIDForAlias(ctx context.Context, alias string) (string, error)
// Remove a given room alias.
// Returns an error if there was a problem talking to the database.
RemoveRoomAlias(ctx context.Context, alias string) error
@@ -134,22 +131,6 @@ func (r *RoomserverInternalAPI) GetAliasesForRoomID(
return nil
}
-// GetCreatorIDForAlias implements alias.RoomserverInternalAPI
-func (r *RoomserverInternalAPI) GetCreatorIDForAlias(
- ctx context.Context,
- request *api.GetCreatorIDForAliasRequest,
- response *api.GetCreatorIDForAliasResponse,
-) error {
- // Look up the aliases in the database for the given RoomID
- creatorID, err := r.DB.GetCreatorIDForAlias(ctx, request.Alias)
- if err != nil {
- return err
- }
-
- response.UserID = creatorID
- return nil
-}
-
// RemoveRoomAlias implements alias.RoomserverInternalAPI
func (r *RoomserverInternalAPI) RemoveRoomAlias(
ctx context.Context,
diff --git a/roomserver/internal/api.go b/roomserver/internal/api.go
index dc0a0a71..afef52da 100644
--- a/roomserver/internal/api.go
+++ b/roomserver/internal/api.go
@@ -44,7 +44,7 @@ type RoomserverInternalAPI struct {
KeyRing gomatrixserverlib.JSONVerifier
ServerACLs *acls.ServerACLs
fsAPI fsAPI.RoomserverFederationAPI
- asAPI asAPI.AppServiceQueryAPI
+ asAPI asAPI.AppServiceInternalAPI
NATSClient *nats.Conn
JetStream nats.JetStreamContext
Durable string
@@ -177,11 +177,11 @@ func (r *RoomserverInternalAPI) SetFederationAPI(fsAPI fsAPI.RoomserverFederatio
}
}
-func (r *RoomserverInternalAPI) SetUserAPI(userAPI userapi.UserInternalAPI) {
+func (r *RoomserverInternalAPI) SetUserAPI(userAPI userapi.RoomserverUserAPI) {
r.Leaver.UserAPI = userAPI
}
-func (r *RoomserverInternalAPI) SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI) {
+func (r *RoomserverInternalAPI) SetAppserviceAPI(asAPI asAPI.AppServiceInternalAPI) {
r.asAPI = asAPI
}
diff --git a/roomserver/internal/perform/perform_leave.go b/roomserver/internal/perform/perform_leave.go
index b006843f..c5b62ac0 100644
--- a/roomserver/internal/perform/perform_leave.go
+++ b/roomserver/internal/perform/perform_leave.go
@@ -38,7 +38,7 @@ type Leaver struct {
Cfg *config.RoomServer
DB storage.Database
FSAPI fsAPI.RoomserverFederationAPI
- UserAPI userapi.UserInternalAPI
+ UserAPI userapi.RoomserverUserAPI
Inputer *input.Inputer
}
diff --git a/roomserver/inthttp/client.go b/roomserver/inthttp/client.go
index 4fc75ff4..09358001 100644
--- a/roomserver/inthttp/client.go
+++ b/roomserver/inthttp/client.go
@@ -91,11 +91,11 @@ func (h *httpRoomserverInternalAPI) SetFederationAPI(fsAPI fsInputAPI.Roomserver
}
// SetAppserviceAPI no-ops in HTTP client mode as there is no chicken/egg scenario
-func (h *httpRoomserverInternalAPI) SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI) {
+func (h *httpRoomserverInternalAPI) SetAppserviceAPI(asAPI asAPI.AppServiceInternalAPI) {
}
// SetUserAPI no-ops in HTTP client mode as there is no chicken/egg scenario
-func (h *httpRoomserverInternalAPI) SetUserAPI(userAPI userapi.UserInternalAPI) {
+func (h *httpRoomserverInternalAPI) SetUserAPI(userAPI userapi.RoomserverUserAPI) {
}
// SetRoomAlias implements RoomserverAliasAPI
@@ -137,19 +137,6 @@ func (h *httpRoomserverInternalAPI) GetAliasesForRoomID(
return httputil.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
}
-// GetCreatorIDForAlias implements RoomserverAliasAPI
-func (h *httpRoomserverInternalAPI) GetCreatorIDForAlias(
- ctx context.Context,
- request *api.GetCreatorIDForAliasRequest,
- response *api.GetCreatorIDForAliasResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "GetCreatorIDForAlias")
- defer span.Finish()
-
- apiURL := h.roomserverURL + RoomserverGetCreatorIDForAliasPath
- return httputil.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
-
// RemoveRoomAlias implements RoomserverAliasAPI
func (h *httpRoomserverInternalAPI) RemoveRoomAlias(
ctx context.Context,
diff --git a/roomserver/inthttp/server.go b/roomserver/inthttp/server.go
index c5159a63..9042e341 100644
--- a/roomserver/inthttp/server.go
+++ b/roomserver/inthttp/server.go
@@ -354,20 +354,6 @@ func AddRoutes(r api.RoomserverInternalAPI, internalAPIMux *mux.Router) {
}),
)
internalAPIMux.Handle(
- RoomserverGetCreatorIDForAliasPath,
- httputil.MakeInternalAPI("GetCreatorIDForAlias", func(req *http.Request) util.JSONResponse {
- var request api.GetCreatorIDForAliasRequest
- var response api.GetCreatorIDForAliasResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.GetCreatorIDForAlias(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- internalAPIMux.Handle(
RoomserverGetAliasesForRoomIDPath,
httputil.MakeInternalAPI("getAliasesForRoomID", func(req *http.Request) util.JSONResponse {
var request api.GetAliasesForRoomIDRequest
diff --git a/setup/base/base.go b/setup/base/base.go
index 9326be1c..d7d5119f 100644
--- a/setup/base/base.go
+++ b/setup/base/base.go
@@ -270,8 +270,8 @@ func (b *BaseDendrite) DatabaseConnection(dbProperties *config.DatabaseOptions,
return nil, nil, fmt.Errorf("no database connections configured")
}
-// AppserviceHTTPClient returns the AppServiceQueryAPI for hitting the appservice component over HTTP.
-func (b *BaseDendrite) AppserviceHTTPClient() appserviceAPI.AppServiceQueryAPI {
+// AppserviceHTTPClient returns the AppServiceInternalAPI for hitting the appservice component over HTTP.
+func (b *BaseDendrite) AppserviceHTTPClient() appserviceAPI.AppServiceInternalAPI {
a, err := asinthttp.NewAppserviceClient(b.Cfg.AppServiceURL(), b.apiHttpClient)
if err != nil {
logrus.WithError(err).Panic("CreateHTTPAppServiceAPIs failed")
diff --git a/setup/monolith.go b/setup/monolith.go
index a0e850d8..41a89702 100644
--- a/setup/monolith.go
+++ b/setup/monolith.go
@@ -39,7 +39,7 @@ type Monolith struct {
Client *gomatrixserverlib.Client
FedClient *gomatrixserverlib.FederationClient
- AppserviceAPI appserviceAPI.AppServiceQueryAPI
+ AppserviceAPI appserviceAPI.AppServiceInternalAPI
FederationAPI federationAPI.FederationInternalAPI
RoomserverAPI roomserverAPI.RoomserverInternalAPI
UserAPI userapi.UserInternalAPI
diff --git a/userapi/api/api.go b/userapi/api/api.go
index dc8c12b7..df9408ac 100644
--- a/userapi/api/api.go
+++ b/userapi/api/api.go
@@ -31,6 +31,8 @@ type UserInternalAPI interface {
ClientUserAPI
MediaUserAPI
FederationUserAPI
+ RoomserverUserAPI
+ KeyserverUserAPI
QuerySearchProfilesAPI // used by p2p demos
}
@@ -41,6 +43,15 @@ type AppserviceUserAPI interface {
PerformDeviceCreation(ctx context.Context, req *PerformDeviceCreationRequest, res *PerformDeviceCreationResponse) error
}
+type KeyserverUserAPI interface {
+ QueryDevices(ctx context.Context, req *QueryDevicesRequest, res *QueryDevicesResponse) error
+ QueryDeviceInfos(ctx context.Context, req *QueryDeviceInfosRequest, res *QueryDeviceInfosResponse) error
+}
+
+type RoomserverUserAPI interface {
+ QueryAccountData(ctx context.Context, req *QueryAccountDataRequest, res *QueryAccountDataResponse) error
+}
+
// api functions required by the media api
type MediaUserAPI interface {
QueryAcccessTokenAPI