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 a70138f2f7
All checks were successful
Build Docker Image / Explore-Gitea-Actions (push) Successful in 47s
Build and Push Docker Image / Explore-Gitea-Actions (push) Successful in 55s
fix: restructure env handling for better testing capabillities #181
2024-09-29 23:55:47 +02:00

77 lines
1.5 KiB
Go

package types
import (
"log"
"log/slog"
)
type ServerSettings struct {
BaseUrl string
Environment 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{
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
}