Skip to content

Commit

Permalink
Add optional config file for use when not working within Docker
Browse files Browse the repository at this point in the history
  • Loading branch information
A Frederick Christensen committed Jun 14, 2023
1 parent 487908f commit 5383b76
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 19 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,12 @@ you can build from source:
2. Build with `go build -o mautrix-syncproxy`. The resulting executable will be
in the current directory named `mautrix-syncproxy`.

Configuring is done via environment variables.
Configuring is done via .yaml configuration file or via environment variables.

If using a configuration file, see the included example-config.yaml, and pass
`-config CONFIGURATION_FILENAME.yaml` on the command line.

If using environment variables (convenient for running syncproxy in docker):

* `LISTEN_ADDRESS` - The address where to listen.
* `HOMESERVER_URL` - The address to Synapse. If using workers, it is sufficient
Expand Down
6 changes: 6 additions & 0 deletions example-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
listen_address: localhost:29332
database_url: postgres://user:pass@host/mautrixsyncproxy
homeserver_url: http://localhost:8008
shared_secret: random string here
debug: true

1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ require (
github.com/jackc/pgx/v4 v4.13.0
github.com/mattn/go-sqlite3 v1.14.8
github.com/prometheus/client_golang v1.11.0
gopkg.in/yaml.v2 v2.4.0
maunium.net/go/maulogger/v2 v2.3.0
maunium.net/go/mautrix v0.9.22
)
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,8 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
Expand Down
60 changes: 42 additions & 18 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package main

import (
"context"
"flag"
"net/http"
"os"
"os/signal"
Expand All @@ -27,6 +28,7 @@ import (

"github.com/gorilla/mux"
"github.com/prometheus/client_golang/prometheus/promhttp"
"gopkg.in/yaml.v2"
log "maunium.net/go/maulogger/v2"
)

Expand Down Expand Up @@ -56,26 +58,48 @@ func getIntEnv(key string, defVal int) int {
return val
}

var configPath = flag.String("config", "config.yaml", "path to config file")

func readConfig() {
cfg.ListenAddress = os.Getenv("LISTEN_ADDRESS")
cfg.DatabaseURL = os.Getenv("DATABASE_URL")
cfg.DatabaseOpts.MaxOpenConns = getIntEnv("DATABASE_MAX_OPEN_CONNS", 4)
cfg.DatabaseOpts.MaxIdleConns = getIntEnv("DATABASE_MAX_IDLE_CONNS", 2)
cfg.HomeserverURL = os.Getenv("HOMESERVER_URL")
cfg.SharedSecret = os.Getenv("SHARED_SECRET")
cfg.ExpectSynchronous = len(os.Getenv("EXPECT_SYNCHRONOUS")) > 0
cfg.Debug = len(os.Getenv("DEBUG")) > 0

if len(cfg.ListenAddress) == 0 {
log.Fatalln("LISTEN_ADDRESS environment variable is not set")
} else if len(cfg.DatabaseURL) == 0 {
log.Fatalln("DATABASE_URL environment variable is not set")
} else if len(cfg.HomeserverURL) == 0 {
log.Fatalln("HOMESERVER_URL environment variable is not set")
} else if len(cfg.SharedSecret) == 0 {
log.Fatalln("SHARED_SECRET environment variable is not set")
flag.Parse()
if *configPath == "env" {
cfg.ListenAddress = os.Getenv("LISTEN_ADDRESS")
cfg.DatabaseURL = os.Getenv("DATABASE_URL")
cfg.DatabaseOpts.MaxOpenConns = getIntEnv("DATABASE_MAX_OPEN_CONNS", 4)
cfg.DatabaseOpts.MaxIdleConns = getIntEnv("DATABASE_MAX_IDLE_CONNS", 2)
cfg.HomeserverURL = os.Getenv("HOMESERVER_URL")
cfg.SharedSecret = os.Getenv("SHARED_SECRET")
cfg.ExpectSynchronous = len(os.Getenv("EXPECT_SYNCHRONOUS")) > 0
cfg.Debug = len(os.Getenv("DEBUG")) > 0

if len(cfg.ListenAddress) == 0 {
log.Fatalln("LISTEN_ADDRESS environment variable is not set")
} else if len(cfg.DatabaseURL) == 0 {
log.Fatalln("DATABASE_URL environment variable is not set")
} else if len(cfg.HomeserverURL) == 0 {
log.Fatalln("HOMESERVER_URL environment variable is not set")
} else if len(cfg.SharedSecret) == 0 {
log.Fatalln("SHARED_SECRET environment variable is not set")
} else {
return
}
} else {
return
file, err := os.Open(*configPath)
if err != nil {
log.Fatalln("Failed to open config:", err)
}
err = yaml.NewDecoder(file).Decode(&cfg)
if err != nil {
log.Fatalln("Failed to read config:", err)
} else if len(cfg.DatabaseURL) == 0 {
log.Fatalln("DATABASE_URL environment variable is not set")
} else if len(cfg.HomeserverURL) == 0 {
log.Fatalln("HOMESERVER_URL environment variable is not set")
} else if len(cfg.SharedSecret) == 0 {
log.Fatalln("SHARED_SECRET environment variable is not set")
} else {
return
}
}

os.Exit(2)
Expand Down

0 comments on commit 5383b76

Please sign in to comment.