From 9c51aa365fdee26045af5dc0a7099cc805823111 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Thu, 13 Aug 2020 11:47:45 +0100 Subject: [PATCH] Review comments @Kegsay --- cmd/dendrite-client-api-server/main.go | 2 +- cmd/dendrite-demo-libp2p/main.go | 18 +++--- cmd/dendrite-demo-yggdrasil/main.go | 18 +++--- cmd/dendrite-federation-api-server/main.go | 2 +- cmd/dendrite-media-api-server/main.go | 2 +- cmd/dendrite-monolith-server/main.go | 8 +-- cmd/dendrite-sync-api-server/main.go | 2 +- cmd/dendritejs/main.go | 16 ++--- internal/httputil/paths.go | 10 ++-- internal/setup/base.go | 70 +++++++++++----------- 10 files changed, 74 insertions(+), 74 deletions(-) diff --git a/cmd/dendrite-client-api-server/main.go b/cmd/dendrite-client-api-server/main.go index 9b7913784..4961b34e0 100644 --- a/cmd/dendrite-client-api-server/main.go +++ b/cmd/dendrite-client-api-server/main.go @@ -39,7 +39,7 @@ func main() { keyAPI := base.KeyServerHTTPClient() clientapi.AddPublicRoutes( - base.ExternalClientAPIMux, &base.Cfg.ClientAPI, base.KafkaProducer, deviceDB, accountDB, federation, + base.PublicClientAPIMux, &base.Cfg.ClientAPI, base.KafkaProducer, deviceDB, accountDB, federation, rsAPI, eduInputAPI, asQuery, stateAPI, transactions.New(), fsAPI, userAPI, keyAPI, nil, ) diff --git a/cmd/dendrite-demo-libp2p/main.go b/cmd/dendrite-demo-libp2p/main.go index 9057f4324..18c85b3b6 100644 --- a/cmd/dendrite-demo-libp2p/main.go +++ b/cmd/dendrite-demo-libp2p/main.go @@ -192,21 +192,21 @@ func main() { ExtPublicRoomsProvider: provider, } monolith.AddAllPublicRoutes( - base.Base.ExternalClientAPIMux, - base.Base.ExternalFederationAPIMux, - base.Base.ExternalKeyAPIMux, - base.Base.ExternalMediaAPIMux, + base.Base.PublicClientAPIMux, + base.Base.PublicFederationAPIMux, + base.Base.PublicKeyAPIMux, + base.Base.PublicMediaAPIMux, ) httpRouter := mux.NewRouter() httpRouter.PathPrefix(httputil.InternalPathPrefix).Handler(base.Base.InternalAPIMux) - httpRouter.PathPrefix(httputil.ExternalClientPathPrefix).Handler(base.Base.ExternalClientAPIMux) - httpRouter.PathPrefix(httputil.ExternalMediaPathPrefix).Handler(base.Base.ExternalMediaAPIMux) + httpRouter.PathPrefix(httputil.PublicClientPathPrefix).Handler(base.Base.PublicClientAPIMux) + httpRouter.PathPrefix(httputil.PublicMediaPathPrefix).Handler(base.Base.PublicMediaAPIMux) libp2pRouter := mux.NewRouter() - libp2pRouter.PathPrefix(httputil.ExternalFederationPathPrefix).Handler(base.Base.ExternalFederationAPIMux) - libp2pRouter.PathPrefix(httputil.ExternalKeyPathPrefix).Handler(base.Base.ExternalKeyAPIMux) - libp2pRouter.PathPrefix(httputil.ExternalMediaPathPrefix).Handler(base.Base.ExternalMediaAPIMux) + libp2pRouter.PathPrefix(httputil.PublicFederationPathPrefix).Handler(base.Base.PublicFederationAPIMux) + libp2pRouter.PathPrefix(httputil.PublicKeyPathPrefix).Handler(base.Base.PublicKeyAPIMux) + libp2pRouter.PathPrefix(httputil.PublicMediaPathPrefix).Handler(base.Base.PublicMediaAPIMux) // Expose the matrix APIs directly rather than putting them under a /api path. go func() { diff --git a/cmd/dendrite-demo-yggdrasil/main.go b/cmd/dendrite-demo-yggdrasil/main.go index c50697c23..43bbe94fa 100644 --- a/cmd/dendrite-demo-yggdrasil/main.go +++ b/cmd/dendrite-demo-yggdrasil/main.go @@ -133,7 +133,7 @@ func main() { rsComponent.SetFederationSenderAPI(fsAPI) - embed.Embed(base.ExternalClientAPIMux, *instancePort, "Yggdrasil Demo") + embed.Embed(base.PublicClientAPIMux, *instancePort, "Yggdrasil Demo") monolith := setup.Monolith{ Config: base.Cfg, @@ -157,20 +157,20 @@ func main() { ), } monolith.AddAllPublicRoutes( - base.ExternalClientAPIMux, - base.ExternalFederationAPIMux, - base.ExternalKeyAPIMux, - base.ExternalMediaAPIMux, + base.PublicClientAPIMux, + base.PublicFederationAPIMux, + base.PublicKeyAPIMux, + base.PublicMediaAPIMux, ) httpRouter := mux.NewRouter() httpRouter.PathPrefix(httputil.InternalPathPrefix).Handler(base.InternalAPIMux) - httpRouter.PathPrefix(httputil.ExternalClientPathPrefix).Handler(base.ExternalClientAPIMux) - httpRouter.PathPrefix(httputil.ExternalMediaPathPrefix).Handler(base.ExternalMediaAPIMux) + httpRouter.PathPrefix(httputil.PublicClientPathPrefix).Handler(base.PublicClientAPIMux) + httpRouter.PathPrefix(httputil.PublicMediaPathPrefix).Handler(base.PublicMediaAPIMux) yggRouter := mux.NewRouter() - yggRouter.PathPrefix(httputil.ExternalFederationPathPrefix).Handler(base.ExternalFederationAPIMux) - yggRouter.PathPrefix(httputil.ExternalMediaPathPrefix).Handler(base.ExternalMediaAPIMux) + yggRouter.PathPrefix(httputil.PublicFederationPathPrefix).Handler(base.PublicFederationAPIMux) + yggRouter.PathPrefix(httputil.PublicMediaPathPrefix).Handler(base.PublicMediaAPIMux) // Build both ends of a HTTP multiplex. httpServer := &http.Server{ diff --git a/cmd/dendrite-federation-api-server/main.go b/cmd/dendrite-federation-api-server/main.go index 8d31c09ae..4181ee0c2 100644 --- a/cmd/dendrite-federation-api-server/main.go +++ b/cmd/dendrite-federation-api-server/main.go @@ -33,7 +33,7 @@ func main() { keyAPI := base.KeyServerHTTPClient() federationapi.AddPublicRoutes( - base.ExternalFederationAPIMux, base.ExternalKeyAPIMux, + base.PublicFederationAPIMux, base.PublicKeyAPIMux, &base.Cfg.FederationAPI, userAPI, federation, keyRing, rsAPI, fsAPI, base.EDUServerClient(), base.CurrentStateAPIClient(), keyAPI, ) diff --git a/cmd/dendrite-media-api-server/main.go b/cmd/dendrite-media-api-server/main.go index 7e870cbb7..f442abfa7 100644 --- a/cmd/dendrite-media-api-server/main.go +++ b/cmd/dendrite-media-api-server/main.go @@ -28,7 +28,7 @@ func main() { userAPI := base.UserAPIClient() client := gomatrixserverlib.NewClient(cfg.FederationSender.DisableTLSValidation) - mediaapi.AddPublicRoutes(base.ExternalMediaAPIMux, &base.Cfg.MediaAPI, userAPI, client) + mediaapi.AddPublicRoutes(base.PublicMediaAPIMux, &base.Cfg.MediaAPI, userAPI, client) base.SetupAndServeHTTP( base.Cfg.MediaAPI.InternalAPI.Listen, diff --git a/cmd/dendrite-monolith-server/main.go b/cmd/dendrite-monolith-server/main.go index b81fac13b..bf7527085 100644 --- a/cmd/dendrite-monolith-server/main.go +++ b/cmd/dendrite-monolith-server/main.go @@ -146,10 +146,10 @@ func main() { KeyAPI: keyAPI, } monolith.AddAllPublicRoutes( - base.ExternalClientAPIMux, - base.ExternalFederationAPIMux, - base.ExternalKeyAPIMux, - base.ExternalMediaAPIMux, + base.PublicClientAPIMux, + base.PublicFederationAPIMux, + base.PublicKeyAPIMux, + base.PublicMediaAPIMux, ) // Expose the matrix APIs directly rather than putting them under a /api path. diff --git a/cmd/dendrite-sync-api-server/main.go b/cmd/dendrite-sync-api-server/main.go index 83aafc653..ec53af6e6 100644 --- a/cmd/dendrite-sync-api-server/main.go +++ b/cmd/dendrite-sync-api-server/main.go @@ -30,7 +30,7 @@ func main() { rsAPI := base.RoomserverHTTPClient() syncapi.AddPublicRoutes( - base.ExternalClientAPIMux, base.KafkaConsumer, userAPI, rsAPI, + base.PublicClientAPIMux, base.KafkaConsumer, userAPI, rsAPI, base.KeyServerHTTPClient(), base.CurrentStateAPIClient(), federation, &cfg.SyncAPI, ) diff --git a/cmd/dendritejs/main.go b/cmd/dendritejs/main.go index 5f0f7deb7..ada48cd87 100644 --- a/cmd/dendritejs/main.go +++ b/cmd/dendritejs/main.go @@ -236,20 +236,20 @@ func main() { ExtPublicRoomsProvider: p2pPublicRoomProvider, } monolith.AddAllPublicRoutes( - base.ExternalClientAPIMux, - base.ExternalFederationAPIMux, - base.ExternalKeyAPIMux, - base.ExternalMediaAPIMux, + base.PublicClientAPIMux, + base.PublicFederationAPIMux, + base.PublicKeyAPIMux, + base.PublicMediaAPIMux, ) httpRouter := mux.NewRouter() httpRouter.PathPrefix(httputil.InternalPathPrefix).Handler(base.InternalAPIMux) - httpRouter.PathPrefix(httputil.ExternalClientPathPrefix).Handler(base.ExternalClientAPIMux) - httpRouter.PathPrefix(httputil.ExternalMediaPathPrefix).Handler(base.ExternalMediaAPIMux) + httpRouter.PathPrefix(httputil.PublicClientPathPrefix).Handler(base.PublicClientAPIMux) + httpRouter.PathPrefix(httputil.PublicMediaPathPrefix).Handler(base.PublicMediaAPIMux) libp2pRouter := mux.NewRouter() - libp2pRouter.PathPrefix(httputil.ExternalFederationPathPrefix).Handler(base.ExternalFederationAPIMux) - libp2pRouter.PathPrefix(httputil.ExternalMediaPathPrefix).Handler(base.ExternalMediaAPIMux) + libp2pRouter.PathPrefix(httputil.PublicFederationPathPrefix).Handler(base.PublicFederationAPIMux) + libp2pRouter.PathPrefix(httputil.PublicMediaPathPrefix).Handler(base.PublicMediaAPIMux) // Expose the matrix APIs via libp2p-js - for federation traffic if node != nil { diff --git a/internal/httputil/paths.go b/internal/httputil/paths.go index b85f01b57..b0f4b8cb8 100644 --- a/internal/httputil/paths.go +++ b/internal/httputil/paths.go @@ -15,9 +15,9 @@ package httputil const ( - ExternalClientPathPrefix = "/_matrix/client/" - ExternalFederationPathPrefix = "/_matrix/federation/" - ExternalKeyPathPrefix = "/_matrix/key/" - ExternalMediaPathPrefix = "/_matrix/media/" - InternalPathPrefix = "/api/" + PublicClientPathPrefix = "/_matrix/client/" + PublicFederationPathPrefix = "/_matrix/federation/" + PublicKeyPathPrefix = "/_matrix/key/" + PublicMediaPathPrefix = "/_matrix/media/" + InternalPathPrefix = "/api/" ) diff --git a/internal/setup/base.go b/internal/setup/base.go index 1be7a560c..c78639f6c 100644 --- a/internal/setup/base.go +++ b/internal/setup/base.go @@ -27,6 +27,7 @@ import ( "github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/naffka" + "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/matrix-org/dendrite/internal" "github.com/matrix-org/dendrite/userapi/storage/accounts" @@ -62,19 +63,19 @@ import ( // should only be used during start up. // Must be closed when shutting down. type BaseDendrite struct { - componentName string - tracerCloser io.Closer - ExternalClientAPIMux *mux.Router - ExternalFederationAPIMux *mux.Router - ExternalKeyAPIMux *mux.Router - ExternalMediaAPIMux *mux.Router - InternalAPIMux *mux.Router - UseHTTPAPIs bool - httpClient *http.Client - Cfg *config.Dendrite - Caches *caching.Caches - KafkaConsumer sarama.Consumer - KafkaProducer sarama.SyncProducer + componentName string + tracerCloser io.Closer + PublicClientAPIMux *mux.Router + PublicFederationAPIMux *mux.Router + PublicKeyAPIMux *mux.Router + PublicMediaAPIMux *mux.Router + InternalAPIMux *mux.Router + UseHTTPAPIs bool + httpClient *http.Client + Cfg *config.Dendrite + Caches *caching.Caches + KafkaConsumer sarama.Consumer + KafkaProducer sarama.SyncProducer } const HTTPServerTimeout = time.Minute * 5 @@ -137,19 +138,19 @@ func NewBaseDendrite(cfg *config.Dendrite, componentName string, useHTTPAPIs boo // are not inadvertently reading paths without cleaning, else this could introduce a // directory traversal attack e.g /../../../etc/passwd return &BaseDendrite{ - componentName: componentName, - UseHTTPAPIs: useHTTPAPIs, - tracerCloser: closer, - Cfg: cfg, - Caches: cache, - ExternalClientAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.ExternalClientPathPrefix).Subrouter().UseEncodedPath(), - ExternalFederationAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.ExternalFederationPathPrefix).Subrouter().UseEncodedPath(), - ExternalKeyAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.ExternalKeyPathPrefix).Subrouter().UseEncodedPath(), - ExternalMediaAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.ExternalMediaPathPrefix).Subrouter().UseEncodedPath(), - InternalAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.InternalPathPrefix).Subrouter().UseEncodedPath(), - httpClient: &client, - KafkaConsumer: kafkaConsumer, - KafkaProducer: kafkaProducer, + componentName: componentName, + UseHTTPAPIs: useHTTPAPIs, + tracerCloser: closer, + Cfg: cfg, + Caches: cache, + PublicClientAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.PublicClientPathPrefix).Subrouter().UseEncodedPath(), + PublicFederationAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.PublicFederationPathPrefix).Subrouter().UseEncodedPath(), + PublicKeyAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.PublicKeyPathPrefix).Subrouter().UseEncodedPath(), + PublicMediaAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.PublicMediaPathPrefix).Subrouter().UseEncodedPath(), + InternalAPIMux: mux.NewRouter().SkipClean(true).PathPrefix(httputil.InternalPathPrefix).Subrouter().UseEncodedPath(), + httpClient: &client, + KafkaConsumer: kafkaConsumer, + KafkaProducer: kafkaProducer, } } @@ -272,8 +273,6 @@ func (b *BaseDendrite) SetupAndServeHTTP( internalHTTPAddr, externalHTTPAddr config.HTTPAddress, certFile, keyFile *string, ) { - block := make(chan struct{}) - internalAddr, _ := internalHTTPAddr.Address() externalAddr, _ := externalHTTPAddr.Address() @@ -297,14 +296,16 @@ func (b *BaseDendrite) SetupAndServeHTTP( } internalRouter.PathPrefix(httputil.InternalPathPrefix).Handler(b.InternalAPIMux) + if b.Cfg.Global.Metrics.Enabled { + internalRouter.Handle("/metrics", httputil.WrapHandlerInBasicAuth(promhttp.Handler(), b.Cfg.Global.Metrics.BasicAuth)) + } - externalRouter.PathPrefix(httputil.ExternalClientPathPrefix).Handler(b.ExternalClientAPIMux) - externalRouter.PathPrefix(httputil.ExternalKeyPathPrefix).Handler(b.ExternalKeyAPIMux) - externalRouter.PathPrefix(httputil.ExternalFederationPathPrefix).Handler(b.ExternalFederationAPIMux) - externalRouter.PathPrefix(httputil.ExternalMediaPathPrefix).Handler(b.ExternalMediaAPIMux) + externalRouter.PathPrefix(httputil.PublicClientPathPrefix).Handler(b.PublicClientAPIMux) + externalRouter.PathPrefix(httputil.PublicKeyPathPrefix).Handler(b.PublicKeyAPIMux) + externalRouter.PathPrefix(httputil.PublicFederationPathPrefix).Handler(b.PublicFederationAPIMux) + externalRouter.PathPrefix(httputil.PublicMediaPathPrefix).Handler(b.PublicMediaAPIMux) go func() { - defer close(block) logrus.Infof("Starting %s listener on %s", b.componentName, externalServ.Addr) if certFile != nil && keyFile != nil { if err := externalServ.ListenAndServeTLS(*certFile, *keyFile); err != nil { @@ -320,7 +321,6 @@ func (b *BaseDendrite) SetupAndServeHTTP( if internalAddr != "" && internalAddr != externalAddr { go func() { - defer close(block) logrus.Infof("Starting %s listener on %s", b.componentName, internalServ.Addr) if certFile != nil && keyFile != nil { if err := internalServ.ListenAndServeTLS(*certFile, *keyFile); err != nil { @@ -335,7 +335,7 @@ func (b *BaseDendrite) SetupAndServeHTTP( }() } - <-block + select {} } // setupKafka creates kafka consumer/producer pair from the config.