mirror of
https://github.com/hoernschen/dendrite.git
synced 2024-12-28 16:08:27 +00:00
Convert federationapi to using base component
This commit is contained in:
parent
4a83c3f060
commit
93424b1772
2 changed files with 51 additions and 72 deletions
|
@ -15,84 +15,23 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"github.com/matrix-org/dendrite/common/basecomponent"
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
"github.com/matrix-org/dendrite/clientapi/auth/storage/accounts"
|
|
||||||
"github.com/matrix-org/dendrite/clientapi/producers"
|
|
||||||
"github.com/matrix-org/dendrite/common"
|
|
||||||
"github.com/matrix-org/dendrite/common/config"
|
|
||||||
"github.com/matrix-org/dendrite/common/keydb"
|
"github.com/matrix-org/dendrite/common/keydb"
|
||||||
"github.com/matrix-org/dendrite/federationapi/routing"
|
"github.com/matrix-org/dendrite/federationapi"
|
||||||
"github.com/matrix-org/dendrite/roomserver/api"
|
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
logDir = os.Getenv("LOG_DIR")
|
|
||||||
configPath = flag.String("config", "dendrite.yaml", "The path to the config file. For more information, see the config file in this repository.")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
common.SetupLogging(logDir)
|
base := basecomponent.NewBaseDendrite("FederationAPI")
|
||||||
|
defer base.Close() // nolint: errcheck
|
||||||
|
|
||||||
flag.Parse()
|
accountDB := base.CreateAccountsDB()
|
||||||
|
keyDB := base.CreateKeyDB()
|
||||||
|
federation := base.CreateFederationClient()
|
||||||
|
keyRing := keydb.CreateKeyRing(federation.Client, keyDB)
|
||||||
|
|
||||||
if *configPath == "" {
|
federationapi.SetupFederationAPIComponent(
|
||||||
log.Fatal("--config must be supplied")
|
base, accountDB, federation, &keyRing,
|
||||||
}
|
|
||||||
cfg, err := config.Load(*configPath)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Invalid config file: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
closer, err := cfg.SetupTracing("DendriteFederationAPI")
|
|
||||||
if err != nil {
|
|
||||||
log.WithError(err).Fatalf("Failed to start tracer")
|
|
||||||
}
|
|
||||||
defer closer.Close() // nolint: errcheck
|
|
||||||
|
|
||||||
federation := gomatrixserverlib.NewFederationClient(
|
|
||||||
cfg.Matrix.ServerName, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
keyDB, err := keydb.NewDatabase(string(cfg.Database.ServerKey))
|
base.SetupAndServeHTTP(string(base.Cfg.Listen.FederationAPI))
|
||||||
if err != nil {
|
|
||||||
log.Panicf("Failed to setup key database(%q): %s", cfg.Database.ServerKey, err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
accountDB, err := accounts.NewDatabase(string(cfg.Database.Account), cfg.Matrix.ServerName)
|
|
||||||
if err != nil {
|
|
||||||
log.Panicf("Failed to setup account database(%q): %s", cfg.Database.Account, err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
keyRing := gomatrixserverlib.KeyRing{
|
|
||||||
KeyFetchers: []gomatrixserverlib.KeyFetcher{
|
|
||||||
// TODO: Use perspective key fetchers for production.
|
|
||||||
&gomatrixserverlib.DirectKeyFetcher{Client: federation.Client},
|
|
||||||
},
|
|
||||||
KeyDatabase: keyDB,
|
|
||||||
}
|
|
||||||
|
|
||||||
queryAPI := api.NewRoomserverQueryAPIHTTP(cfg.RoomServerURL(), nil)
|
|
||||||
inputAPI := api.NewRoomserverInputAPIHTTP(cfg.RoomServerURL(), nil)
|
|
||||||
aliasAPI := api.NewRoomserverAliasAPIHTTP(cfg.RoomServerURL(), nil)
|
|
||||||
|
|
||||||
roomserverProducer := producers.NewRoomserverProducer(inputAPI)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Panicf("Failed to setup kafka producers(%s): %s", cfg.Kafka.Addresses, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Info("Starting federation API server on ", cfg.Listen.FederationAPI)
|
|
||||||
|
|
||||||
api := mux.NewRouter()
|
|
||||||
routing.Setup(api, *cfg, queryAPI, aliasAPI, roomserverProducer, keyRing, federation, accountDB)
|
|
||||||
common.SetupHTTPAPI(http.DefaultServeMux, api)
|
|
||||||
|
|
||||||
log.Fatal(http.ListenAndServe(string(cfg.Listen.FederationAPI), nil))
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
// Copyright 2017 Vector Creations Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package federationapi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/matrix-org/dendrite/clientapi/auth/storage/accounts"
|
||||||
|
"github.com/matrix-org/dendrite/common/basecomponent"
|
||||||
|
// TODO: Are we really wanting to pull in the producer from clientapi
|
||||||
|
"github.com/matrix-org/dendrite/clientapi/producers"
|
||||||
|
"github.com/matrix-org/dendrite/federationapi/routing"
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetupFederationAPIComponent sets up and registers HTTP handlers for the
|
||||||
|
// FederationAPI component.
|
||||||
|
func SetupFederationAPIComponent(
|
||||||
|
base *basecomponent.BaseDendrite,
|
||||||
|
accountsDB *accounts.Database,
|
||||||
|
federation *gomatrixserverlib.FederationClient,
|
||||||
|
keyRing *gomatrixserverlib.KeyRing,
|
||||||
|
) {
|
||||||
|
roomserverProducer := producers.NewRoomserverProducer(base.InputAPI())
|
||||||
|
|
||||||
|
routing.Setup(
|
||||||
|
base.APIMux, *base.Cfg, base.QueryAPI(), base.AliasAPI(),
|
||||||
|
roomserverProducer, *keyRing, federation, accountsDB,
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in a new issue