diff --git a/appservice/appservice.go b/appservice/appservice.go index b5ffba5eb..dca600bf5 100644 --- a/appservice/appservice.go +++ b/appservice/appservice.go @@ -21,6 +21,7 @@ import ( "sync" "time" + "github.com/gorilla/mux" appserviceAPI "github.com/matrix-org/dendrite/appservice/api" "github.com/matrix-org/dendrite/appservice/consumers" "github.com/matrix-org/dendrite/appservice/inthttp" @@ -40,15 +41,28 @@ import ( "github.com/sirupsen/logrus" ) -// SetupAppServiceAPIComponent sets up and registers HTTP handlers for the AppServices -// component. -func SetupAppServiceAPIComponent( +// AddPublicRoutes registers HTTP handlers for CS API calls +func AddPublicRoutes(router *mux.Router, cfg *config.Dendrite, rsAPI roomserverAPI.RoomserverInternalAPI, + accountsDB accounts.Database, federation *gomatrixserverlib.FederationClient, txnCache *transactions.Cache) { + + routing.Setup( + router, cfg, rsAPI, + accountsDB, federation, txnCache, + ) +} + +// AddInternalRoutes registers HTTP handlers for internal API calls +func AddInternalRoutes(router *mux.Router, queryAPI appserviceAPI.AppServiceQueryAPI) { + inthttp.AddRoutes(queryAPI, router) +} + +// NewInternalAPI returns a concerete implementation of the internal API. Callers +// can call functions directly on the returned API or via an HTTP interface using AddInternalRoutes. +func NewInternalAPI( base *basecomponent.BaseDendrite, accountsDB accounts.Database, deviceDB devices.Database, - federation *gomatrixserverlib.FederationClient, rsAPI roomserverAPI.RoomserverInternalAPI, - transactionsCache *transactions.Cache, ) appserviceAPI.AppServiceQueryAPI { // Create a connection to the appservice postgres DB appserviceDB, err := storage.NewDatabase(string(base.Cfg.Database.AppService), base.Cfg.DbProperties()) @@ -85,8 +99,6 @@ func SetupAppServiceAPIComponent( Cfg: base.Cfg, } - inthttp.AddRoutes(appserviceQueryAPI, base.InternalAPIMux) - consumer := consumers.NewOutputRoomEventConsumer( base.Cfg, base.KafkaConsumer, accountsDB, appserviceDB, rsAPI, workerStates, @@ -99,13 +111,6 @@ func SetupAppServiceAPIComponent( if err := workers.SetupTransactionWorkers(appserviceDB, workerStates); err != nil { logrus.WithError(err).Panicf("failed to start app service transaction workers") } - - // Set up HTTP Endpoints - routing.Setup( - base.PublicAPIMux, base.Cfg, rsAPI, - accountsDB, federation, transactionsCache, - ) - return appserviceQueryAPI } diff --git a/clientapi/clientapi.go b/clientapi/clientapi.go index 0ce44c211..d00be6eb0 100644 --- a/clientapi/clientapi.go +++ b/clientapi/clientapi.go @@ -15,6 +15,7 @@ package clientapi import ( + "github.com/gorilla/mux" appserviceAPI "github.com/matrix-org/dendrite/appservice/api" "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" "github.com/matrix-org/dendrite/clientapi/auth/storage/devices" @@ -30,9 +31,9 @@ import ( "github.com/sirupsen/logrus" ) -// SetupClientAPIComponent sets up and registers HTTP handlers for the ClientAPI -// component. -func SetupClientAPIComponent( +// AddPublicRoutes sets up and registers HTTP handlers for the ClientAPI component. +func AddPublicRoutes( + router *mux.Router, base *basecomponent.BaseDendrite, deviceDB devices.Database, accountsDB accounts.Database, @@ -65,7 +66,7 @@ func SetupClientAPIComponent( } routing.Setup( - base.PublicAPIMux, base.Cfg, roomserverProducer, rsAPI, asAPI, + router, base.Cfg, roomserverProducer, rsAPI, asAPI, accountsDB, deviceDB, federation, *keyRing, userUpdateProducer, syncProducer, eduProducer, transactionsCache, fsAPI, ) diff --git a/cmd/dendrite-appservice-server/main.go b/cmd/dendrite-appservice-server/main.go index 4fc2a173d..21fb1b79c 100644 --- a/cmd/dendrite-appservice-server/main.go +++ b/cmd/dendrite-appservice-server/main.go @@ -31,9 +31,9 @@ func main() { rsAPI := base.RoomserverHTTPClient() cache := transactions.New() - appservice.SetupAppServiceAPIComponent( - base, accountDB, deviceDB, federation, rsAPI, cache, - ) + intAPI := appservice.NewInternalAPI(base, accountDB, deviceDB, rsAPI) + appservice.AddInternalRoutes(base.InternalAPIMux, intAPI) + appservice.AddPublicRoutes(base.PublicAPIMux, base.Cfg, rsAPI, accountDB, federation, cache) base.SetupAndServeHTTP(string(base.Cfg.Bind.AppServiceAPI), string(base.Cfg.Listen.AppServiceAPI)) diff --git a/cmd/dendrite-client-api-server/main.go b/cmd/dendrite-client-api-server/main.go index 8ad4231d1..58396205c 100644 --- a/cmd/dendrite-client-api-server/main.go +++ b/cmd/dendrite-client-api-server/main.go @@ -38,8 +38,8 @@ func main() { fsAPI := base.FederationSenderHTTPClient() eduInputAPI := base.EDUServerClient() - clientapi.SetupClientAPIComponent( - base, deviceDB, accountDB, federation, keyRing, + clientapi.AddPublicRoutes( + base.PublicAPIMux, base, deviceDB, accountDB, federation, keyRing, rsAPI, eduInputAPI, asQuery, transactions.New(), fsAPI, ) diff --git a/cmd/dendrite-demo-libp2p/main.go b/cmd/dendrite-demo-libp2p/main.go index 4da81aca6..600b0fb6f 100644 --- a/cmd/dendrite-demo-libp2p/main.go +++ b/cmd/dendrite-demo-libp2p/main.go @@ -150,21 +150,20 @@ func main() { eduInputAPI := eduserver.NewInternalAPI( &base.Base, cache.New(), deviceDB, ) - asAPI := appservice.SetupAppServiceAPIComponent( - &base.Base, accountDB, deviceDB, federation, rsAPI, transactions.New(), - ) + asAPI := appservice.NewInternalAPI(&base.Base, accountDB, deviceDB, rsAPI) + appservice.AddPublicRoutes(base.Base.PublicAPIMux, &cfg, rsAPI, accountDB, federation, transactions.New()) fsAPI := federationsender.SetupFederationSenderComponent( &base.Base, federation, rsAPI, keyRing, ) rsAPI.SetFederationSenderAPI(fsAPI) - clientapi.SetupClientAPIComponent( - &base.Base, deviceDB, accountDB, + clientapi.AddPublicRoutes( + base.Base.PublicAPIMux, &base.Base, deviceDB, accountDB, federation, keyRing, rsAPI, eduInputAPI, asAPI, transactions.New(), fsAPI, ) eduProducer := producers.NewEDUServerProducer(eduInputAPI) - federationapi.AddRoutes(&base.Base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer) + federationapi.AddPublicRoutes(&base.Base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer) mediaapi.SetupMediaAPIComponent(&base.Base, deviceDB) publicRoomsDB, err := storage.NewPublicRoomsServerDatabaseWithPubSub(string(base.Base.Cfg.Database.PublicRoomsAPI), base.LibP2PPubsub, cfg.Matrix.ServerName) if err != nil { diff --git a/cmd/dendrite-edu-server/main.go b/cmd/dendrite-edu-server/main.go index ec3d2a6a4..a86f66c89 100644 --- a/cmd/dendrite-edu-server/main.go +++ b/cmd/dendrite-edu-server/main.go @@ -32,7 +32,7 @@ func main() { deviceDB := base.CreateDeviceDB() intAPI := eduserver.NewInternalAPI(base, cache.New(), deviceDB) - eduserver.AddRoutes(base.InternalAPIMux, intAPI) + eduserver.AddInternalRoutes(base.InternalAPIMux, intAPI) base.SetupAndServeHTTP(string(base.Cfg.Bind.EDUServer), string(base.Cfg.Listen.EDUServer)) diff --git a/cmd/dendrite-federation-api-server/main.go b/cmd/dendrite-federation-api-server/main.go index e4169b18e..8b0ae55f0 100644 --- a/cmd/dendrite-federation-api-server/main.go +++ b/cmd/dendrite-federation-api-server/main.go @@ -36,7 +36,7 @@ func main() { // TODO: this isn't a producer eduProducer := producers.NewEDUServerProducer(base.EDUServerClient()) - federationapi.AddRoutes( + federationapi.AddPublicRoutes( base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer, ) diff --git a/cmd/dendrite-monolith-server/main.go b/cmd/dendrite-monolith-server/main.go index 5499deaf9..189efc71e 100644 --- a/cmd/dendrite-monolith-server/main.go +++ b/cmd/dendrite-monolith-server/main.go @@ -90,14 +90,14 @@ func main() { base, cache.New(), deviceDB, ) if base.UseHTTPAPIs { - eduserver.AddRoutes(base.InternalAPIMux, eduInputAPI) + eduserver.AddInternalRoutes(base.InternalAPIMux, eduInputAPI) eduInputAPI = base.EDUServerClient() } - asAPI := appservice.SetupAppServiceAPIComponent( - base, accountDB, deviceDB, federation, rsAPI, transactions.New(), - ) + asAPI := appservice.NewInternalAPI(base, accountDB, deviceDB, rsAPI) + appservice.AddPublicRoutes(base.PublicAPIMux, cfg, rsAPI, accountDB, federation, transactions.New()) if base.UseHTTPAPIs { + appservice.AddInternalRoutes(base.InternalAPIMux, asAPI) asAPI = base.AppserviceHTTPClient() } @@ -109,8 +109,8 @@ func main() { } rsComponent.SetFederationSenderAPI(fsAPI) - clientapi.SetupClientAPIComponent( - base, deviceDB, accountDB, + clientapi.AddPublicRoutes( + base.PublicAPIMux, base, deviceDB, accountDB, federation, keyRing, rsAPI, eduInputAPI, asAPI, transactions.New(), fsAPI, ) @@ -119,7 +119,7 @@ func main() { base, deviceDB, accountDB, ) eduProducer := producers.NewEDUServerProducer(eduInputAPI) - federationapi.AddRoutes(base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer) + federationapi.AddPublicRoutes(base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer) mediaapi.SetupMediaAPIComponent(base, deviceDB) publicRoomsDB, err := storage.NewPublicRoomsServerDatabase(string(base.Cfg.Database.PublicRoomsAPI), base.Cfg.DbProperties(), cfg.Matrix.ServerName) if err != nil { diff --git a/cmd/dendritejs/main.go b/cmd/dendritejs/main.go index c2fa8b5f1..a7531deec 100644 --- a/cmd/dendritejs/main.go +++ b/cmd/dendritejs/main.go @@ -208,20 +208,20 @@ func main() { rsAPI := roomserver.SetupRoomServerComponent(base, keyRing, federation) eduInputAPI := eduserver.NewInternalAPI(base, cache.New(), deviceDB) - asQuery := appservice.SetupAppServiceAPIComponent( - base, accountDB, deviceDB, federation, rsAPI, transactions.New(), + asQuery := appservice.NewInternalAPI( + base, accountDB, deviceDB, rsAPI, ) fedSenderAPI := federationsender.SetupFederationSenderComponent(base, federation, rsAPI, &keyRing) rsAPI.SetFederationSenderAPI(fedSenderAPI) p2pPublicRoomProvider := NewLibP2PPublicRoomsProvider(node, fedSenderAPI) - clientapi.SetupClientAPIComponent( - base, deviceDB, accountDB, + clientapi.AddPublicRoutes( + base.PublicAPIMux, base, deviceDB, accountDB, federation, &keyRing, rsAPI, eduInputAPI, asQuery, transactions.New(), fedSenderAPI, ) eduProducer := producers.NewEDUServerProducer(eduInputAPI) - federationapi.AddRoutes(base, accountDB, deviceDB, federation, &keyRing, rsAPI, asQuery, fedSenderAPI, eduProducer) + federationapi.AddPublicRoutes(base, accountDB, deviceDB, federation, &keyRing, rsAPI, asQuery, fedSenderAPI, eduProducer) mediaapi.SetupMediaAPIComponent(base, deviceDB) publicRoomsDB, err := storage.NewPublicRoomsServerDatabase(string(base.Cfg.Database.PublicRoomsAPI), cfg.Matrix.ServerName) if err != nil { diff --git a/eduserver/eduserver.go b/eduserver/eduserver.go index 70ba928dd..f5d8694db 100644 --- a/eduserver/eduserver.go +++ b/eduserver/eduserver.go @@ -26,9 +26,9 @@ import ( "github.com/matrix-org/dendrite/internal/basecomponent" ) -// AddRoutes registers HTTP handlers for the internal API. Invokes functions +// AddInternalRoutes registers HTTP handlers for the internal API. Invokes functions // on the given input API. -func AddRoutes(internalMux *mux.Router, inputAPI api.EDUServerInputAPI) { +func AddInternalRoutes(internalMux *mux.Router, inputAPI api.EDUServerInputAPI) { inthttp.AddRoutes(inputAPI, internalMux) } diff --git a/federationapi/federationapi.go b/federationapi/federationapi.go index 0a719deaa..ebaef17aa 100644 --- a/federationapi/federationapi.go +++ b/federationapi/federationapi.go @@ -28,8 +28,8 @@ import ( "github.com/matrix-org/gomatrixserverlib" ) -// AddRoutes sets up and registers HTTP handlers on the base API muxes for the FederationAPI component. -func AddRoutes( +// AddPublicRoutes sets up and registers HTTP handlers on the base API muxes for the FederationAPI component. +func AddPublicRoutes( base *basecomponent.BaseDendrite, accountsDB accounts.Database, deviceDB devices.Database,