This repository has been archived on 2025-08-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
web-app-template/types/settings.go
Tim Wundenberg bddcfc6778
All checks were successful
Build Docker Image / Explore-Gitea-Actions (push) Successful in 48s
chore: parametrize db path #181
2024-10-02 10:41:16 +02:00

84 lines
1.6 KiB
Go

package types
import (
"log"
"log/slog"
)
type ServerSettings struct {
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 {
dbPath := env("DB_PATH")
if dbPath == "" {
dbPath = "./data.db"
}
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{
BaseUrl: env("BASE_URL"),
Environment: env("ENVIRONMENT"),
Smtp: smtp,
}
if settings.BaseUrl == "" {
log.Fatal("BASE_URL must be set")
}
if settings.Environment == "" {
log.Fatal("ENVIRONMENT must be set")
}
if settings.Environment == "prod" && settings.Smtp == nil {
log.Fatal("SMTP must be enabled in production")
}
slog.Info("BASE_URL is " + settings.BaseUrl)
slog.Info("ENVIRONMENT is " + settings.Environment)
return settings
}