aboutsummaryrefslogtreecommitdiff
path: root/federationsender
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-06-04 14:27:10 +0100
committerGitHub <noreply@github.com>2020-06-04 14:27:10 +0100
commitf4c676ccddcd661b7167e8f249f71635a0b03491 (patch)
tree104562c774958f297ec9b2d0c822818926a9c260 /federationsender
parentf7025d349946aae75160491d0efcc87100adb406 (diff)
Refactor how federationsender gets created (#1095)
* Refactor how federationsender gets created * s/httpint/inthttp/ for alphabetical niceness with internal package
Diffstat (limited to 'federationsender')
-rw-r--r--federationsender/api/api.go68
-rw-r--r--federationsender/api/perform.go112
-rw-r--r--federationsender/api/query.go63
-rw-r--r--federationsender/federationsender.go9
-rw-r--r--federationsender/internal/api.go90
-rw-r--r--federationsender/inthttp/client.go113
-rw-r--r--federationsender/inthttp/server.go95
7 files changed, 267 insertions, 283 deletions
diff --git a/federationsender/api/api.go b/federationsender/api/api.go
index 4eb20cb6..d8251b54 100644
--- a/federationsender/api/api.go
+++ b/federationsender/api/api.go
@@ -2,8 +2,9 @@ package api
import (
"context"
- "errors"
- "net/http"
+
+ "github.com/matrix-org/dendrite/federationsender/types"
+ "github.com/matrix-org/gomatrixserverlib"
)
// FederationSenderInternalAPI is used to query information from the federation sender.
@@ -50,16 +51,59 @@ type FederationSenderInternalAPI interface {
) error
}
-// NewFederationSenderInternalAPIHTTP creates a FederationSenderInternalAPI implemented by talking to a HTTP POST API.
-// If httpClient is nil an error is returned
-func NewFederationSenderInternalAPIHTTP(federationSenderURL string, httpClient *http.Client) (FederationSenderInternalAPI, error) {
- if httpClient == nil {
- return nil, errors.New("NewFederationSenderInternalAPIHTTP: httpClient is <nil>")
- }
- return &httpFederationSenderInternalAPI{federationSenderURL, httpClient}, nil
+type PerformDirectoryLookupRequest struct {
+ RoomAlias string `json:"room_alias"`
+ ServerName gomatrixserverlib.ServerName `json:"server_name"`
+}
+
+type PerformDirectoryLookupResponse struct {
+ RoomID string `json:"room_id"`
+ ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
+}
+
+type PerformJoinRequest struct {
+ RoomID string `json:"room_id"`
+ UserID string `json:"user_id"`
+ // The sorted list of servers to try. Servers will be tried sequentially, after de-duplication.
+ ServerNames types.ServerNames `json:"server_names"`
+ Content map[string]interface{} `json:"content"`
+}
+
+type PerformJoinResponse struct {
+}
+
+type PerformLeaveRequest struct {
+ RoomID string `json:"room_id"`
+ UserID string `json:"user_id"`
+ ServerNames types.ServerNames `json:"server_names"`
+}
+
+type PerformLeaveResponse struct {
+}
+
+type PerformServersAliveRequest struct {
+ Servers []gomatrixserverlib.ServerName
+}
+
+type PerformServersAliveResponse struct {
+}
+
+// QueryJoinedHostsInRoomRequest is a request to QueryJoinedHostsInRoom
+type QueryJoinedHostsInRoomRequest struct {
+ RoomID string `json:"room_id"`
+}
+
+// QueryJoinedHostsInRoomResponse is a response to QueryJoinedHostsInRoom
+type QueryJoinedHostsInRoomResponse struct {
+ JoinedHosts []types.JoinedHost `json:"joined_hosts"`
+}
+
+// QueryJoinedHostServerNamesRequest is a request to QueryJoinedHostServerNames
+type QueryJoinedHostServerNamesInRoomRequest struct {
+ RoomID string `json:"room_id"`
}
-type httpFederationSenderInternalAPI struct {
- federationSenderURL string
- httpClient *http.Client
+// QueryJoinedHostServerNamesResponse is a response to QueryJoinedHostServerNames
+type QueryJoinedHostServerNamesInRoomResponse struct {
+ ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
}
diff --git a/federationsender/api/perform.go b/federationsender/api/perform.go
deleted file mode 100644
index 5e4d7fe9..00000000
--- a/federationsender/api/perform.go
+++ /dev/null
@@ -1,112 +0,0 @@
-package api
-
-import (
- "context"
-
- "github.com/matrix-org/dendrite/federationsender/types"
- internalHTTP "github.com/matrix-org/dendrite/internal/http"
- "github.com/matrix-org/gomatrixserverlib"
- "github.com/opentracing/opentracing-go"
-)
-
-const (
- // FederationSenderPerformJoinRequestPath is the HTTP path for the PerformJoinRequest API.
- FederationSenderPerformDirectoryLookupRequestPath = "/federationsender/performDirectoryLookup"
-
- // FederationSenderPerformJoinRequestPath is the HTTP path for the PerformJoinRequest API.
- FederationSenderPerformJoinRequestPath = "/federationsender/performJoinRequest"
-
- // FederationSenderPerformLeaveRequestPath is the HTTP path for the PerformLeaveRequest API.
- FederationSenderPerformLeaveRequestPath = "/federationsender/performLeaveRequest"
-
- // FederationSenderPerformServersAlivePath is the HTTP path for the PerformServersAlive API.
- FederationSenderPerformServersAlivePath = "/federationsender/performServersAlive"
-)
-
-type PerformDirectoryLookupRequest struct {
- RoomAlias string `json:"room_alias"`
- ServerName gomatrixserverlib.ServerName `json:"server_name"`
-}
-
-type PerformDirectoryLookupResponse struct {
- RoomID string `json:"room_id"`
- ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
-}
-
-// Handle an instruction to make_join & send_join with a remote server.
-func (h *httpFederationSenderInternalAPI) PerformDirectoryLookup(
- ctx context.Context,
- request *PerformDirectoryLookupRequest,
- response *PerformDirectoryLookupResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "PerformDirectoryLookup")
- defer span.Finish()
-
- apiURL := h.federationSenderURL + FederationSenderPerformDirectoryLookupRequestPath
- return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
-
-type PerformJoinRequest struct {
- RoomID string `json:"room_id"`
- UserID string `json:"user_id"`
- // The sorted list of servers to try. Servers will be tried sequentially, after de-duplication.
- ServerNames types.ServerNames `json:"server_names"`
- Content map[string]interface{} `json:"content"`
-}
-
-type PerformJoinResponse struct {
-}
-
-// Handle an instruction to make_join & send_join with a remote server.
-func (h *httpFederationSenderInternalAPI) PerformJoin(
- ctx context.Context,
- request *PerformJoinRequest,
- response *PerformJoinResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "PerformJoinRequest")
- defer span.Finish()
-
- apiURL := h.federationSenderURL + FederationSenderPerformJoinRequestPath
- return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
-
-type PerformLeaveRequest struct {
- RoomID string `json:"room_id"`
- UserID string `json:"user_id"`
- ServerNames types.ServerNames `json:"server_names"`
-}
-
-type PerformLeaveResponse struct {
-}
-
-// Handle an instruction to make_leave & send_leave with a remote server.
-func (h *httpFederationSenderInternalAPI) PerformLeave(
- ctx context.Context,
- request *PerformLeaveRequest,
- response *PerformLeaveResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "PerformLeaveRequest")
- defer span.Finish()
-
- apiURL := h.federationSenderURL + FederationSenderPerformLeaveRequestPath
- return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
-
-type PerformServersAliveRequest struct {
- Servers []gomatrixserverlib.ServerName
-}
-
-type PerformServersAliveResponse struct {
-}
-
-func (h *httpFederationSenderInternalAPI) PerformServersAlive(
- ctx context.Context,
- request *PerformServersAliveRequest,
- response *PerformServersAliveResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "PerformServersAlive")
- defer span.Finish()
-
- apiURL := h.federationSenderURL + FederationSenderPerformServersAlivePath
- return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
diff --git a/federationsender/api/query.go b/federationsender/api/query.go
deleted file mode 100644
index 4c0f757b..00000000
--- a/federationsender/api/query.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package api
-
-import (
- "context"
-
- "github.com/matrix-org/dendrite/federationsender/types"
- internalHTTP "github.com/matrix-org/dendrite/internal/http"
- "github.com/matrix-org/gomatrixserverlib"
-
- "github.com/opentracing/opentracing-go"
-)
-
-// FederationSenderQueryJoinedHostsInRoomPath is the HTTP path for the QueryJoinedHostsInRoom API.
-const FederationSenderQueryJoinedHostsInRoomPath = "/federationsender/queryJoinedHostsInRoom"
-
-// FederationSenderQueryJoinedHostServerNamesInRoomPath is the HTTP path for the QueryJoinedHostServerNamesInRoom API.
-const FederationSenderQueryJoinedHostServerNamesInRoomPath = "/federationsender/queryJoinedHostServerNamesInRoom"
-
-// QueryJoinedHostsInRoomRequest is a request to QueryJoinedHostsInRoom
-type QueryJoinedHostsInRoomRequest struct {
- RoomID string `json:"room_id"`
-}
-
-// QueryJoinedHostsInRoomResponse is a response to QueryJoinedHostsInRoom
-type QueryJoinedHostsInRoomResponse struct {
- JoinedHosts []types.JoinedHost `json:"joined_hosts"`
-}
-
-// QueryJoinedHostsInRoom implements FederationSenderInternalAPI
-func (h *httpFederationSenderInternalAPI) QueryJoinedHostsInRoom(
- ctx context.Context,
- request *QueryJoinedHostsInRoomRequest,
- response *QueryJoinedHostsInRoomResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "QueryJoinedHostsInRoom")
- defer span.Finish()
-
- apiURL := h.federationSenderURL + FederationSenderQueryJoinedHostsInRoomPath
- return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
-
-// QueryJoinedHostServerNamesRequest is a request to QueryJoinedHostServerNames
-type QueryJoinedHostServerNamesInRoomRequest struct {
- RoomID string `json:"room_id"`
-}
-
-// QueryJoinedHostServerNamesResponse is a response to QueryJoinedHostServerNames
-type QueryJoinedHostServerNamesInRoomResponse struct {
- ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
-}
-
-// QueryJoinedHostServerNamesInRoom implements FederationSenderInternalAPI
-func (h *httpFederationSenderInternalAPI) QueryJoinedHostServerNamesInRoom(
- ctx context.Context,
- request *QueryJoinedHostServerNamesInRoomRequest,
- response *QueryJoinedHostServerNamesInRoomResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "QueryJoinedHostServerNamesInRoom")
- defer span.Finish()
-
- apiURL := h.federationSenderURL + FederationSenderQueryJoinedHostServerNamesInRoomPath
- return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
diff --git a/federationsender/federationsender.go b/federationsender/federationsender.go
index 9e5cc8dd..e25c2723 100644
--- a/federationsender/federationsender.go
+++ b/federationsender/federationsender.go
@@ -18,6 +18,7 @@ import (
"github.com/matrix-org/dendrite/federationsender/api"
"github.com/matrix-org/dendrite/federationsender/consumers"
"github.com/matrix-org/dendrite/federationsender/internal"
+ "github.com/matrix-org/dendrite/federationsender/inthttp"
"github.com/matrix-org/dendrite/federationsender/producers"
"github.com/matrix-org/dendrite/federationsender/queue"
"github.com/matrix-org/dendrite/federationsender/storage"
@@ -65,12 +66,8 @@ func SetupFederationSenderComponent(
logrus.WithError(err).Panic("failed to start typing server consumer")
}
- queryAPI := internal.NewFederationSenderInternalAPI(
- federationSenderDB, base.Cfg, roomserverProducer, federation, keyRing,
- statistics, queues,
- )
-
- queryAPI.SetupHTTP(base.InternalAPIMux)
+ queryAPI := internal.NewFederationSenderInternalAPI(federationSenderDB, base.Cfg, roomserverProducer, federation, keyRing, statistics, queues)
+ inthttp.AddRoutes(queryAPI, base.InternalAPIMux)
return queryAPI
}
diff --git a/federationsender/internal/api.go b/federationsender/internal/api.go
index edf8fb4e..c2ea0d41 100644
--- a/federationsender/internal/api.go
+++ b/federationsender/internal/api.go
@@ -1,19 +1,13 @@
package internal
import (
- "encoding/json"
- "net/http"
-
- "github.com/gorilla/mux"
"github.com/matrix-org/dendrite/federationsender/api"
"github.com/matrix-org/dendrite/federationsender/producers"
"github.com/matrix-org/dendrite/federationsender/queue"
"github.com/matrix-org/dendrite/federationsender/storage"
"github.com/matrix-org/dendrite/federationsender/types"
- "github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/internal/config"
"github.com/matrix-org/gomatrixserverlib"
- "github.com/matrix-org/util"
)
// FederationSenderInternalAPI is an implementation of api.FederationSenderInternalAPI
@@ -46,87 +40,3 @@ func NewFederationSenderInternalAPI(
queues: queues,
}
}
-
-// SetupHTTP adds the FederationSenderInternalAPI handlers to the http.ServeMux.
-func (f *FederationSenderInternalAPI) SetupHTTP(internalAPIMux *mux.Router) {
- internalAPIMux.Handle(
- api.FederationSenderQueryJoinedHostsInRoomPath,
- internal.MakeInternalAPI("QueryJoinedHostsInRoom", func(req *http.Request) util.JSONResponse {
- var request api.QueryJoinedHostsInRoomRequest
- var response api.QueryJoinedHostsInRoomResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := f.QueryJoinedHostsInRoom(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- internalAPIMux.Handle(
- api.FederationSenderQueryJoinedHostServerNamesInRoomPath,
- internal.MakeInternalAPI("QueryJoinedHostServerNamesInRoom", func(req *http.Request) util.JSONResponse {
- var request api.QueryJoinedHostServerNamesInRoomRequest
- var response api.QueryJoinedHostServerNamesInRoomResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := f.QueryJoinedHostServerNamesInRoom(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- internalAPIMux.Handle(api.FederationSenderPerformJoinRequestPath,
- internal.MakeInternalAPI("PerformJoinRequest", func(req *http.Request) util.JSONResponse {
- var request api.PerformJoinRequest
- var response api.PerformJoinResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.MessageResponse(http.StatusBadRequest, err.Error())
- }
- if err := f.PerformJoin(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- internalAPIMux.Handle(api.FederationSenderPerformLeaveRequestPath,
- internal.MakeInternalAPI("PerformLeaveRequest", func(req *http.Request) util.JSONResponse {
- var request api.PerformLeaveRequest
- var response api.PerformLeaveResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.MessageResponse(http.StatusBadRequest, err.Error())
- }
- if err := f.PerformLeave(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- internalAPIMux.Handle(api.FederationSenderPerformDirectoryLookupRequestPath,
- internal.MakeInternalAPI("PerformDirectoryLookupRequest", func(req *http.Request) util.JSONResponse {
- var request api.PerformDirectoryLookupRequest
- var response api.PerformDirectoryLookupResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.MessageResponse(http.StatusBadRequest, err.Error())
- }
- if err := f.PerformDirectoryLookup(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- internalAPIMux.Handle(api.FederationSenderPerformServersAlivePath,
- internal.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 := f.PerformServersAlive(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
-}
diff --git a/federationsender/inthttp/client.go b/federationsender/inthttp/client.go
new file mode 100644
index 00000000..8b3a106d
--- /dev/null
+++ b/federationsender/inthttp/client.go
@@ -0,0 +1,113 @@
+package inthttp
+
+import (
+ "context"
+ "errors"
+ "net/http"
+
+ "github.com/matrix-org/dendrite/federationsender/api"
+ internalHTTP "github.com/matrix-org/dendrite/internal/http"
+ "github.com/opentracing/opentracing-go"
+)
+
+// HTTP paths for the internal HTTP API
+const (
+ FederationSenderQueryJoinedHostsInRoomPath = "/federationsender/queryJoinedHostsInRoom"
+ FederationSenderQueryJoinedHostServerNamesInRoomPath = "/federationsender/queryJoinedHostServerNamesInRoom"
+
+ FederationSenderPerformDirectoryLookupRequestPath = "/federationsender/performDirectoryLookup"
+ FederationSenderPerformJoinRequestPath = "/federationsender/performJoinRequest"
+ FederationSenderPerformLeaveRequestPath = "/federationsender/performLeaveRequest"
+ FederationSenderPerformServersAlivePath = "/federationsender/performServersAlive"
+)
+
+// NewFederationSenderClient creates a FederationSenderInternalAPI implemented by talking to a HTTP POST API.
+// If httpClient is nil an error is returned
+func NewFederationSenderClient(federationSenderURL string, httpClient *http.Client) (api.FederationSenderInternalAPI, error) {
+ if httpClient == nil {
+ return nil, errors.New("NewFederationSenderInternalAPIHTTP: httpClient is <nil>")
+ }
+ return &httpFederationSenderInternalAPI{federationSenderURL, httpClient}, nil
+}
+
+type httpFederationSenderInternalAPI struct {
+ federationSenderURL string
+ httpClient *http.Client
+}
+
+// Handle an instruction to make_leave & send_leave with a remote server.
+func (h *httpFederationSenderInternalAPI) PerformLeave(
+ ctx context.Context,
+ request *api.PerformLeaveRequest,
+ response *api.PerformLeaveResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "PerformLeaveRequest")
+ defer span.Finish()
+
+ apiURL := h.federationSenderURL + FederationSenderPerformLeaveRequestPath
+ return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
+
+func (h *httpFederationSenderInternalAPI) PerformServersAlive(
+ ctx context.Context,
+ request *api.PerformServersAliveRequest,
+ response *api.PerformServersAliveResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "PerformServersAlive")
+ defer span.Finish()
+
+ apiURL := h.federationSenderURL + FederationSenderPerformServersAlivePath
+ return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
+
+// QueryJoinedHostServerNamesInRoom implements FederationSenderInternalAPI
+func (h *httpFederationSenderInternalAPI) QueryJoinedHostServerNamesInRoom(
+ ctx context.Context,
+ request *api.QueryJoinedHostServerNamesInRoomRequest,
+ response *api.QueryJoinedHostServerNamesInRoomResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "QueryJoinedHostServerNamesInRoom")
+ defer span.Finish()
+
+ apiURL := h.federationSenderURL + FederationSenderQueryJoinedHostServerNamesInRoomPath
+ return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
+
+// QueryJoinedHostsInRoom implements FederationSenderInternalAPI
+func (h *httpFederationSenderInternalAPI) QueryJoinedHostsInRoom(
+ ctx context.Context,
+ request *api.QueryJoinedHostsInRoomRequest,
+ response *api.QueryJoinedHostsInRoomResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "QueryJoinedHostsInRoom")
+ defer span.Finish()
+
+ apiURL := h.federationSenderURL + FederationSenderQueryJoinedHostsInRoomPath
+ return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
+
+// Handle an instruction to make_join & send_join with a remote server.
+func (h *httpFederationSenderInternalAPI) PerformJoin(
+ ctx context.Context,
+ request *api.PerformJoinRequest,
+ response *api.PerformJoinResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "PerformJoinRequest")
+ defer span.Finish()
+
+ apiURL := h.federationSenderURL + FederationSenderPerformJoinRequestPath
+ return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
+
+// Handle an instruction to make_join & send_join with a remote server.
+func (h *httpFederationSenderInternalAPI) PerformDirectoryLookup(
+ ctx context.Context,
+ request *api.PerformDirectoryLookupRequest,
+ response *api.PerformDirectoryLookupResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "PerformDirectoryLookup")
+ defer span.Finish()
+
+ apiURL := h.federationSenderURL + FederationSenderPerformDirectoryLookupRequestPath
+ return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
diff --git a/federationsender/inthttp/server.go b/federationsender/inthttp/server.go
new file mode 100644
index 00000000..c94a1429
--- /dev/null
+++ b/federationsender/inthttp/server.go
@@ -0,0 +1,95 @@
+package inthttp
+
+import (
+ "encoding/json"
+ "net/http"
+
+ "github.com/gorilla/mux"
+ "github.com/matrix-org/dendrite/federationsender/api"
+ "github.com/matrix-org/dendrite/internal"
+ "github.com/matrix-org/util"
+)
+
+// AddRoutes adds the FederationSenderInternalAPI handlers to the http.ServeMux.
+func AddRoutes(intAPI api.FederationSenderInternalAPI, internalAPIMux *mux.Router) {
+ internalAPIMux.Handle(
+ FederationSenderQueryJoinedHostsInRoomPath,
+ internal.MakeInternalAPI("QueryJoinedHostsInRoom", func(req *http.Request) util.JSONResponse {
+ var request api.QueryJoinedHostsInRoomRequest
+ var response api.QueryJoinedHostsInRoomResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := intAPI.QueryJoinedHostsInRoom(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ internalAPIMux.Handle(
+ FederationSenderQueryJoinedHostServerNamesInRoomPath,
+ internal.MakeInternalAPI("QueryJoinedHostServerNamesInRoom", func(req *http.Request) util.JSONResponse {
+ var request api.QueryJoinedHostServerNamesInRoomRequest
+ var response api.QueryJoinedHostServerNamesInRoomResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := intAPI.QueryJoinedHostServerNamesInRoom(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ internalAPIMux.Handle(FederationSenderPerformJoinRequestPath,
+ internal.MakeInternalAPI("PerformJoinRequest", func(req *http.Request) util.JSONResponse {
+ var request api.PerformJoinRequest
+ var response api.PerformJoinResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.MessageResponse(http.StatusBadRequest, err.Error())
+ }
+ if err := intAPI.PerformJoin(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ internalAPIMux.Handle(FederationSenderPerformLeaveRequestPath,
+ internal.MakeInternalAPI("PerformLeaveRequest", func(req *http.Request) util.JSONResponse {
+ var request api.PerformLeaveRequest
+ var response api.PerformLeaveResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.MessageResponse(http.StatusBadRequest, err.Error())
+ }
+ if err := intAPI.PerformLeave(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ internalAPIMux.Handle(FederationSenderPerformDirectoryLookupRequestPath,
+ internal.MakeInternalAPI("PerformDirectoryLookupRequest", func(req *http.Request) util.JSONResponse {
+ var request api.PerformDirectoryLookupRequest
+ var response api.PerformDirectoryLookupResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.MessageResponse(http.StatusBadRequest, err.Error())
+ }
+ if err := intAPI.PerformDirectoryLookup(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ internalAPIMux.Handle(FederationSenderPerformServersAlivePath,
+ internal.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}
+ }),
+ )
+}