From 3a150ce35fc36d03c3f27dbc06818edf5bff6411 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 8 Jun 2020 14:07:25 +0100 Subject: [PATCH] Split out adding HTTP routes from making internal APIs for clarity --- cmd/dendrite-demo-libp2p/main.go | 4 ++-- cmd/dendrite-edu-server/main.go | 3 ++- cmd/dendrite-federation-api-server/main.go | 2 +- cmd/dendrite-monolith-server/main.go | 5 +++-- cmd/dendritejs/main.go | 4 ++-- eduserver/eduserver.go | 21 +++++++++++---------- federationapi/federationapi.go | 5 ++--- 7 files changed, 23 insertions(+), 21 deletions(-) diff --git a/cmd/dendrite-demo-libp2p/main.go b/cmd/dendrite-demo-libp2p/main.go index 86909685a..4da81aca6 100644 --- a/cmd/dendrite-demo-libp2p/main.go +++ b/cmd/dendrite-demo-libp2p/main.go @@ -147,7 +147,7 @@ func main() { rsAPI := roomserver.SetupRoomServerComponent( &base.Base, keyRing, federation, ) - eduInputAPI := eduserver.SetupEDUServerComponent( + eduInputAPI := eduserver.NewInternalAPI( &base.Base, cache.New(), deviceDB, ) asAPI := appservice.SetupAppServiceAPIComponent( @@ -164,7 +164,7 @@ func main() { eduInputAPI, asAPI, transactions.New(), fsAPI, ) eduProducer := producers.NewEDUServerProducer(eduInputAPI) - federationapi.SetupFederationAPIComponent(&base.Base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer) + federationapi.AddRoutes(&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 ceeb13658..ec3d2a6a4 100644 --- a/cmd/dendrite-edu-server/main.go +++ b/cmd/dendrite-edu-server/main.go @@ -31,7 +31,8 @@ func main() { }() deviceDB := base.CreateDeviceDB() - eduserver.SetupEDUServerComponent(base, cache.New(), deviceDB) + intAPI := eduserver.NewInternalAPI(base, cache.New(), deviceDB) + eduserver.AddRoutes(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 0c4d8b854..e4169b18e 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.SetupFederationAPIComponent( + federationapi.AddRoutes( 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 57e8f66f5..5499deaf9 100644 --- a/cmd/dendrite-monolith-server/main.go +++ b/cmd/dendrite-monolith-server/main.go @@ -86,10 +86,11 @@ func main() { rsAPI = base.RoomserverHTTPClient() } - eduInputAPI := eduserver.SetupEDUServerComponent( + eduInputAPI := eduserver.NewInternalAPI( base, cache.New(), deviceDB, ) if base.UseHTTPAPIs { + eduserver.AddRoutes(base.InternalAPIMux, eduInputAPI) eduInputAPI = base.EDUServerClient() } @@ -118,7 +119,7 @@ func main() { base, deviceDB, accountDB, ) eduProducer := producers.NewEDUServerProducer(eduInputAPI) - federationapi.SetupFederationAPIComponent(base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer) + federationapi.AddRoutes(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 4c1b81979..c2fa8b5f1 100644 --- a/cmd/dendritejs/main.go +++ b/cmd/dendritejs/main.go @@ -207,7 +207,7 @@ func main() { } rsAPI := roomserver.SetupRoomServerComponent(base, keyRing, federation) - eduInputAPI := eduserver.SetupEDUServerComponent(base, cache.New(), deviceDB) + eduInputAPI := eduserver.NewInternalAPI(base, cache.New(), deviceDB) asQuery := appservice.SetupAppServiceAPIComponent( base, accountDB, deviceDB, federation, rsAPI, transactions.New(), ) @@ -221,7 +221,7 @@ func main() { eduInputAPI, asQuery, transactions.New(), fedSenderAPI, ) eduProducer := producers.NewEDUServerProducer(eduInputAPI) - federationapi.SetupFederationAPIComponent(base, accountDB, deviceDB, federation, &keyRing, rsAPI, asQuery, fedSenderAPI, eduProducer) + federationapi.AddRoutes(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 59decc8fb..70ba928dd 100644 --- a/eduserver/eduserver.go +++ b/eduserver/eduserver.go @@ -17,6 +17,7 @@ package eduserver import ( + "github.com/gorilla/mux" "github.com/matrix-org/dendrite/clientapi/auth/storage/devices" "github.com/matrix-org/dendrite/eduserver/api" "github.com/matrix-org/dendrite/eduserver/cache" @@ -25,16 +26,20 @@ import ( "github.com/matrix-org/dendrite/internal/basecomponent" ) -// SetupEDUServerComponent sets up and registers HTTP handlers for the -// EDUServer component. Returns instances of the various roomserver APIs, -// allowing other components running in the same process to hit the query the -// APIs directly instead of having to use HTTP. -func SetupEDUServerComponent( +// AddRoutes registers HTTP handlers for the internal API. Invokes functions +// on the given input API. +func AddRoutes(internalMux *mux.Router, inputAPI api.EDUServerInputAPI) { + inthttp.AddRoutes(inputAPI, internalMux) +} + +// NewInternalAPI returns a concerete implementation of the internal API. Callers +// can call functions directly on the returned API or via an HTTP interface using AddRoutes. +func NewInternalAPI( base *basecomponent.BaseDendrite, eduCache *cache.EDUCache, deviceDB devices.Database, ) api.EDUServerInputAPI { - inputAPI := &input.EDUServerInputAPI{ + return &input.EDUServerInputAPI{ Cache: eduCache, DeviceDB: deviceDB, Producer: base.KafkaProducer, @@ -42,8 +47,4 @@ func SetupEDUServerComponent( OutputSendToDeviceEventTopic: string(base.Cfg.Kafka.Topics.OutputSendToDeviceEvent), ServerName: base.Cfg.Matrix.ServerName, } - - inthttp.AddRoutes(inputAPI, base.InternalAPIMux) - - return inputAPI } diff --git a/federationapi/federationapi.go b/federationapi/federationapi.go index baeaa36bc..0a719deaa 100644 --- a/federationapi/federationapi.go +++ b/federationapi/federationapi.go @@ -28,9 +28,8 @@ import ( "github.com/matrix-org/gomatrixserverlib" ) -// SetupFederationAPIComponent sets up and registers HTTP handlers for the -// FederationAPI component. -func SetupFederationAPIComponent( +// AddRoutes sets up and registers HTTP handlers on the base API muxes for the FederationAPI component. +func AddRoutes( base *basecomponent.BaseDendrite, accountsDB accounts.Database, deviceDB devices.Database,