chore: parametrize port and prometheus #181
All checks were successful
Build Docker Image / Explore-Gitea-Actions (push) Successful in 46s
All checks were successful
Build Docker Image / Explore-Gitea-Actions (push) Successful in 46s
This commit is contained in:
91
types/server_settings.go
Normal file
91
types/server_settings.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"log"
|
||||
"log/slog"
|
||||
)
|
||||
|
||||
type ServerSettings struct {
|
||||
Port string
|
||||
PrometheusEnabled bool
|
||||
|
||||
BaseUrl string
|
||||
Environment string
|
||||
DbPath string
|
||||
Smtp *SmtpSettings
|
||||
}
|
||||
|
||||
type SmtpSettings struct {
|
||||
Host string
|
||||
Port string
|
||||
User string
|
||||
Pass string
|
||||
FromMail string
|
||||
FromName string
|
||||
}
|
||||
|
||||
func NewServerSettingsFromEnv(env func(string) string) *ServerSettings {
|
||||
|
||||
var smtp *SmtpSettings
|
||||
if env("SMTP_ENABLED") == "true" {
|
||||
smtp = &SmtpSettings{
|
||||
Host: env("SMTP_HOST"),
|
||||
Port: env("SMTP_PORT"),
|
||||
User: env("SMTP_USER"),
|
||||
Pass: env("SMTP_PASS"),
|
||||
FromMail: env("SMTP_FROM_MAIL"),
|
||||
FromName: env("SMTP_FROM_NAME"),
|
||||
}
|
||||
|
||||
if smtp.Host == "" {
|
||||
log.Fatal("SMTP_HOST must be set")
|
||||
}
|
||||
if smtp.Port == "" {
|
||||
log.Fatal("SMTP_PORT must be set")
|
||||
}
|
||||
if smtp.User == "" {
|
||||
log.Fatal("SMTP_USER must be set")
|
||||
}
|
||||
if smtp.Pass == "" {
|
||||
log.Fatal("SMTP_PASS must be set")
|
||||
}
|
||||
if smtp.FromMail == "" {
|
||||
log.Fatal("SMTP_FROM_MAIL must be set")
|
||||
}
|
||||
if smtp.FromName == "" {
|
||||
log.Fatal("SMTP_FROM_NAME must be set")
|
||||
}
|
||||
}
|
||||
|
||||
settings := &ServerSettings{
|
||||
Port: env("PORT"),
|
||||
PrometheusEnabled: env("PROMETHEUS_ENABLED") == "true",
|
||||
BaseUrl: env("BASE_URL"),
|
||||
DbPath: env("DB_PATH"),
|
||||
Environment: env("ENVIRONMENT"),
|
||||
Smtp: smtp,
|
||||
}
|
||||
|
||||
if settings.DbPath == "" {
|
||||
settings.DbPath = "./data.db"
|
||||
}
|
||||
|
||||
if settings.BaseUrl == "" {
|
||||
log.Fatal("BASE_URL must be set")
|
||||
}
|
||||
if settings.Port == "" {
|
||||
log.Fatal("PORT must be set")
|
||||
}
|
||||
if settings.Environment == "" {
|
||||
log.Fatal("ENVIRONMENT must be set")
|
||||
}
|
||||
|
||||
if settings.Environment == "prod" && (settings.Smtp == nil || !settings.PrometheusEnabled) {
|
||||
log.Fatal("SMTP and Prometheus must be enabled in production")
|
||||
}
|
||||
|
||||
slog.Info("BASE_URL is " + settings.BaseUrl)
|
||||
slog.Info("ENVIRONMENT is " + settings.Environment)
|
||||
|
||||
return settings
|
||||
}
|
||||
Reference in New Issue
Block a user