aboutsummaryrefslogtreecommitdiff
path: root/cmd/generate-config/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/generate-config/main.go')
-rw-r--r--cmd/generate-config/main.go150
1 files changed, 71 insertions, 79 deletions
diff --git a/cmd/generate-config/main.go b/cmd/generate-config/main.go
index 6ae3ff9c..c24e8153 100644
--- a/cmd/generate-config/main.go
+++ b/cmd/generate-config/main.go
@@ -3,6 +3,7 @@ package main
import (
"flag"
"fmt"
+ "path/filepath"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/gomatrixserverlib"
@@ -11,90 +12,81 @@ import (
)
func main() {
- defaultsForCI := flag.Bool("ci", false, "sane defaults for CI testing")
+ defaultsForCI := flag.Bool("ci", false, "Populate the configuration with sane defaults for use in CI")
serverName := flag.String("server", "", "The domain name of the server if not 'localhost'")
- dbURI := flag.String("db", "", "The DB URI to use for all components if not SQLite files")
+ dbURI := flag.String("db", "", "The DB URI to use for all components (PostgreSQL only)")
+ dirPath := flag.String("dir", "./", "The folder to use for paths (like SQLite databases, media storage)")
+ normalise := flag.String("normalise", "", "Normalise an existing configuration file by adding new/missing options and defaults")
+ polylith := flag.Bool("polylith", false, "Generate a config that makes sense for polylith deployments")
flag.Parse()
- cfg := &config.Dendrite{
- Version: config.Version,
- }
- cfg.Defaults(true)
- if *serverName != "" {
- cfg.Global.ServerName = gomatrixserverlib.ServerName(*serverName)
- }
- if *dbURI != "" {
- cfg.FederationAPI.Database.ConnectionString = config.DataSource(*dbURI)
- cfg.KeyServer.Database.ConnectionString = config.DataSource(*dbURI)
- cfg.MSCs.Database.ConnectionString = config.DataSource(*dbURI)
- cfg.MediaAPI.Database.ConnectionString = config.DataSource(*dbURI)
- cfg.RoomServer.Database.ConnectionString = config.DataSource(*dbURI)
- cfg.SyncAPI.Database.ConnectionString = config.DataSource(*dbURI)
- cfg.UserAPI.AccountDatabase.ConnectionString = config.DataSource(*dbURI)
- }
- cfg.Global.TrustedIDServers = []string{
- "matrix.org",
- "vector.im",
- }
- cfg.Logging = []config.LogrusHook{
- {
- Type: "file",
- Level: "info",
- Params: map[string]interface{}{
- "path": "/var/log/dendrite",
- },
- },
- }
- cfg.FederationAPI.KeyPerspectives = config.KeyPerspectives{
- {
- ServerName: "matrix.org",
- Keys: []config.KeyPerspectiveTrustKey{
- {
- KeyID: "ed25519:auto",
- PublicKey: "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw",
- },
- {
- KeyID: "ed25519:a_RXGa",
- PublicKey: "l8Hft5qXKn1vfHrg3p4+W8gELQVo8N13JkluMfmn2sQ",
+ var cfg *config.Dendrite
+ if *normalise == "" {
+ cfg = &config.Dendrite{
+ Version: config.Version,
+ }
+ cfg.Defaults(config.DefaultOpts{
+ Generate: true,
+ Monolithic: !*polylith,
+ })
+ if *serverName != "" {
+ cfg.Global.ServerName = gomatrixserverlib.ServerName(*serverName)
+ }
+ uri := config.DataSource(*dbURI)
+ if *polylith || uri.IsSQLite() || uri == "" {
+ for name, db := range map[string]*config.DatabaseOptions{
+ "federationapi": &cfg.FederationAPI.Database,
+ "keyserver": &cfg.KeyServer.Database,
+ "mscs": &cfg.MSCs.Database,
+ "mediaapi": &cfg.MediaAPI.Database,
+ "roomserver": &cfg.RoomServer.Database,
+ "syncapi": &cfg.SyncAPI.Database,
+ "userapi": &cfg.UserAPI.AccountDatabase,
+ } {
+ if uri == "" {
+ path := filepath.Join(*dirPath, fmt.Sprintf("dendrite_%s.db", name))
+ db.ConnectionString = config.DataSource(fmt.Sprintf("file:%s", path))
+ } else {
+ db.ConnectionString = uri
+ }
+ }
+ } else {
+ cfg.Global.DatabaseOptions.ConnectionString = uri
+ }
+ cfg.Logging = []config.LogrusHook{
+ {
+ Type: "file",
+ Level: "info",
+ Params: map[string]interface{}{
+ "path": filepath.Join(*dirPath, "log"),
},
},
- },
- }
- cfg.MediaAPI.ThumbnailSizes = []config.ThumbnailSize{
- {
- Width: 32,
- Height: 32,
- ResizeMethod: "crop",
- },
- {
- Width: 96,
- Height: 96,
- ResizeMethod: "crop",
- },
- {
- Width: 640,
- Height: 480,
- ResizeMethod: "scale",
- },
- }
-
- if *defaultsForCI {
- cfg.AppServiceAPI.DisableTLSValidation = true
- cfg.ClientAPI.RateLimiting.Enabled = false
- cfg.FederationAPI.DisableTLSValidation = false
- // don't hit matrix.org when running tests!!!
- cfg.FederationAPI.KeyPerspectives = config.KeyPerspectives{}
- cfg.MSCs.MSCs = []string{"msc2836", "msc2946", "msc2444", "msc2753"}
- cfg.Logging[0].Level = "trace"
- cfg.Logging[0].Type = "std"
- cfg.UserAPI.BCryptCost = bcrypt.MinCost
- cfg.Global.JetStream.InMemory = true
- cfg.ClientAPI.RegistrationDisabled = false
- cfg.ClientAPI.OpenRegistrationWithoutVerificationEnabled = true
- cfg.ClientAPI.RegistrationSharedSecret = "complement"
- cfg.Global.Presence = config.PresenceOptions{
- EnableInbound: true,
- EnableOutbound: true,
+ }
+ if *defaultsForCI {
+ cfg.AppServiceAPI.DisableTLSValidation = true
+ cfg.ClientAPI.RateLimiting.Enabled = false
+ cfg.FederationAPI.DisableTLSValidation = false
+ // don't hit matrix.org when running tests!!!
+ cfg.FederationAPI.KeyPerspectives = config.KeyPerspectives{}
+ cfg.MediaAPI.BasePath = config.Path(filepath.Join(*dirPath, "media"))
+ cfg.MSCs.MSCs = []string{"msc2836", "msc2946", "msc2444", "msc2753"}
+ cfg.Logging[0].Level = "trace"
+ cfg.Logging[0].Type = "std"
+ cfg.UserAPI.BCryptCost = bcrypt.MinCost
+ cfg.Global.JetStream.InMemory = true
+ cfg.Global.JetStream.StoragePath = config.Path(*dirPath)
+ cfg.ClientAPI.RegistrationDisabled = false
+ cfg.ClientAPI.OpenRegistrationWithoutVerificationEnabled = true
+ cfg.ClientAPI.RegistrationSharedSecret = "complement"
+ cfg.Global.Presence = config.PresenceOptions{
+ EnableInbound: true,
+ EnableOutbound: true,
+ }
+ }
+ } else {
+ var err error
+ if cfg, err = config.Load(*normalise, !*polylith); err != nil {
+ panic(err)
}
}