diff options
author | Kegsay <kegan@matrix.org> | 2020-06-09 12:07:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-09 12:07:33 +0100 |
commit | 85ac8a3f5ba407ece584843a4d77466c1c4f5565 (patch) | |
tree | ce98a9501386fd8467196d164eb35a53ad8cb78b /internal | |
parent | 4f171c56a832c836b0eb21650ee84d56e451dd6a (diff) |
Factor out how monolith routes get added (#1107)
Previously we had 3 monoliths:
- dendrite-monolith-server
- dendrite-demo-libp2p
- dendritejs
which all had their own of setting up public routes. Factor this
out into a new `setup.Monolith` struct which gets all dependencies
set as fields. This is different to `basecomponent.Base` which
doesn't provide any way to set configured deps (e.g public rooms db)
Part of a larger process to clean up how we initialise Dendrite.
Diffstat (limited to 'internal')
-rw-r--r-- | internal/setup/monolith.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/internal/setup/monolith.go b/internal/setup/monolith.go new file mode 100644 index 00000000..d9bb2839 --- /dev/null +++ b/internal/setup/monolith.go @@ -0,0 +1,78 @@ +package setup + +import ( + "github.com/Shopify/sarama" + "github.com/gorilla/mux" + appserviceAPI "github.com/matrix-org/dendrite/appservice/api" + "github.com/matrix-org/dendrite/clientapi" + "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" + "github.com/matrix-org/dendrite/clientapi/auth/storage/devices" + "github.com/matrix-org/dendrite/clientapi/producers" + eduServerAPI "github.com/matrix-org/dendrite/eduserver/api" + "github.com/matrix-org/dendrite/federationapi" + federationSenderAPI "github.com/matrix-org/dendrite/federationsender/api" + "github.com/matrix-org/dendrite/internal/config" + "github.com/matrix-org/dendrite/internal/transactions" + "github.com/matrix-org/dendrite/keyserver" + "github.com/matrix-org/dendrite/mediaapi" + "github.com/matrix-org/dendrite/publicroomsapi" + "github.com/matrix-org/dendrite/publicroomsapi/storage" + "github.com/matrix-org/dendrite/publicroomsapi/types" + roomserverAPI "github.com/matrix-org/dendrite/roomserver/api" + serverKeyAPI "github.com/matrix-org/dendrite/serverkeyapi/api" + "github.com/matrix-org/dendrite/syncapi" + "github.com/matrix-org/gomatrixserverlib" +) + +// Monolith represents an instantiation of all dependencies required to build +// all components of Dendrite, for use in monolith mode. +type Monolith struct { + Config *config.Dendrite + DeviceDB devices.Database + AccountDB accounts.Database + KeyRing *gomatrixserverlib.KeyRing + FedClient *gomatrixserverlib.FederationClient + KafkaConsumer sarama.Consumer + KafkaProducer sarama.SyncProducer + + AppserviceAPI appserviceAPI.AppServiceQueryAPI + EDUInternalAPI eduServerAPI.EDUServerInputAPI + FederationSenderAPI federationSenderAPI.FederationSenderInternalAPI + RoomserverAPI roomserverAPI.RoomserverInternalAPI + ServerKeyAPI serverKeyAPI.ServerKeyInternalAPI + + // TODO: remove, this isn't even a producer + EDUProducer *producers.EDUServerProducer + // TODO: can we remove this? It's weird that we are required the database + // yet every other component can do that on its own. libp2p-demo uses a custom + // database though annoyingly. + PublicRoomsDB storage.Database + + // Optional + ExtPublicRoomsProvider types.ExternalPublicRoomsProvider +} + +// AddAllPublicRoutes attaches all public paths to the given router +func (m *Monolith) AddAllPublicRoutes(publicMux *mux.Router) { + clientapi.AddPublicRoutes( + publicMux, m.Config, m.KafkaConsumer, m.KafkaProducer, m.DeviceDB, m.AccountDB, + m.FedClient, m.KeyRing, m.RoomserverAPI, + m.EDUInternalAPI, m.AppserviceAPI, transactions.New(), + m.FederationSenderAPI, + ) + + keyserver.AddPublicRoutes(publicMux, m.Config, m.DeviceDB, m.AccountDB) + federationapi.AddPublicRoutes( + publicMux, m.Config, m.AccountDB, m.DeviceDB, m.FedClient, + m.KeyRing, m.RoomserverAPI, m.AppserviceAPI, m.FederationSenderAPI, + m.EDUProducer, + ) + mediaapi.AddPublicRoutes(publicMux, m.Config, m.DeviceDB) + publicroomsapi.AddPublicRoutes( + publicMux, m.Config, m.KafkaConsumer, m.DeviceDB, m.PublicRoomsDB, m.RoomserverAPI, m.FedClient, + m.ExtPublicRoomsProvider, + ) + syncapi.AddPublicRoutes( + publicMux, m.KafkaConsumer, m.DeviceDB, m.AccountDB, m.RoomserverAPI, m.FedClient, m.Config, + ) +} |