SimpleCloudNotifier/server/config.go

154 lines
3.7 KiB
Go
Raw Normal View History

2022-11-13 19:17:07 +01:00
package server
import (
2022-11-21 22:52:44 +01:00
"fmt"
2022-11-13 19:17:07 +01:00
"github.com/rs/zerolog/log"
"os"
2022-11-18 21:25:40 +01:00
"time"
2022-11-13 19:17:07 +01:00
)
type Config struct {
2022-11-20 17:19:11 +01:00
Namespace string
GinDebug bool
ServerIP string
ServerPort string
DBFile string
RequestTimeout time.Duration
ReturnRawErrors bool
2022-11-23 19:32:23 +01:00
DummyFirebase bool
2022-11-20 17:19:11 +01:00
FirebaseTokenURI string
2022-11-21 22:52:44 +01:00
FirebaseProjectID string
2022-11-20 17:19:11 +01:00
FirebasePrivKeyID string
FirebaseClientMail string
FirebasePrivateKey string
2022-11-13 19:17:07 +01:00
}
var Conf Config
2022-11-23 19:32:23 +01:00
var configLocHost = func() Config {
return Config{
Namespace: "local-host",
GinDebug: true,
ServerIP: "0.0.0.0",
ServerPort: "8080",
DBFile: ".run-data/db.sqlite3",
RequestTimeout: 16 * time.Second,
ReturnRawErrors: true,
DummyFirebase: true,
FirebaseTokenURI: "",
FirebaseProjectID: "",
FirebasePrivKeyID: "",
FirebaseClientMail: "",
FirebasePrivateKey: "",
}
2022-11-13 19:17:07 +01:00
}
2022-11-23 19:32:23 +01:00
var configLocDocker = func() Config {
return Config{
Namespace: "local-docker",
GinDebug: true,
ServerIP: "0.0.0.0",
ServerPort: "80",
DBFile: "/data/scn_docker.sqlite3",
RequestTimeout: 16 * time.Second,
ReturnRawErrors: true,
DummyFirebase: true,
FirebaseTokenURI: "",
FirebaseProjectID: "",
FirebasePrivKeyID: "",
FirebaseClientMail: "",
FirebasePrivateKey: "",
}
}
2022-11-23 19:32:23 +01:00
var configDev = func() Config {
return Config{
Namespace: "develop",
GinDebug: true,
ServerIP: "0.0.0.0",
ServerPort: "80",
DBFile: "/data/scn.sqlite3",
RequestTimeout: 16 * time.Second,
ReturnRawErrors: true,
DummyFirebase: false,
FirebaseTokenURI: "https://oauth2.googleapis.com/token",
FirebaseProjectID: confEnv("FB_PROJECTID"),
FirebasePrivKeyID: confEnv("FB_PRIVATEKEYID"),
FirebaseClientMail: confEnv("FB_CLIENTEMAIL"),
FirebasePrivateKey: confEnv("FB_PRIVATEKEY"),
}
2022-11-13 19:17:07 +01:00
}
2022-11-23 19:32:23 +01:00
var configStag = func() Config {
return Config{
Namespace: "staging",
GinDebug: true,
ServerIP: "0.0.0.0",
ServerPort: "80",
DBFile: "/data/scn.sqlite3",
RequestTimeout: 16 * time.Second,
ReturnRawErrors: true,
DummyFirebase: false,
FirebaseTokenURI: "https://oauth2.googleapis.com/token",
FirebaseProjectID: confEnv("FB_PROJECTID"),
FirebasePrivKeyID: confEnv("FB_PRIVATEKEYID"),
FirebaseClientMail: confEnv("FB_CLIENTEMAIL"),
FirebasePrivateKey: confEnv("FB_PRIVATEKEY"),
}
2022-11-13 19:17:07 +01:00
}
2022-11-23 19:32:23 +01:00
var configProd = func() Config {
return Config{
Namespace: "production",
GinDebug: false,
ServerIP: "0.0.0.0",
ServerPort: "80",
DBFile: "/data/scn.sqlite3",
RequestTimeout: 16 * time.Second,
ReturnRawErrors: false,
DummyFirebase: false,
FirebaseTokenURI: "https://oauth2.googleapis.com/token",
FirebaseProjectID: confEnv("FB_PROJECTID"),
FirebasePrivKeyID: confEnv("FB_PRIVATEKEYID"),
FirebaseClientMail: confEnv("FB_CLIENTEMAIL"),
FirebasePrivateKey: confEnv("FB_PRIVATEKEY"),
}
2022-11-13 19:17:07 +01:00
}
2022-11-23 19:32:23 +01:00
var allConfig = map[string]func() Config{
"local-host": configLocHost,
"local-docker": configLocDocker,
"develop": configDev,
"staging": configStag,
"production": configProd,
2022-11-13 19:17:07 +01:00
}
func getConfig(ns string) (Config, bool) {
if ns == "" {
2022-11-23 19:32:23 +01:00
return configLocHost(), true
2022-11-13 19:17:07 +01:00
}
2022-11-23 19:32:23 +01:00
if c, ok := allConfig[ns]; ok {
return c(), true
2022-11-13 19:17:07 +01:00
}
return Config{}, false
}
2022-11-21 22:52:44 +01:00
func confEnv(key string) string {
if v, ok := os.LookupEnv(key); ok {
return v
} else {
panic(fmt.Sprintf("Missing required environment variable '%s'", key))
}
}
2022-11-13 19:17:07 +01:00
func init() {
ns := os.Getenv("CONF_NS")
cfg, ok := getConfig(ns)
if !ok {
log.Fatal().Str("ns", ns).Msg("Unknown config-namespace")
}
Conf = cfg
}