Files
Gardomatic/cmd/cli/config.go
T
kleiax 904d14b64c
CI / test (push) Canceled after 0s
Initial commit
2026-09-12 22:22:17 +02:00

62 lines
1.4 KiB
Go

package main
import (
"fmt"
"os"
"strconv"
"strings"
"gardomatic.kleiax.de/internal/mailer"
)
type config struct {
dsn string
environment string
webBaseURL string
json bool
yes bool
mail mailer.Config
}
func configFromEnvironment() (config, error) {
port, err := envInt("GARDOMATIC_SMTP_PORT", 25)
if err != nil {
return config{}, err
}
return config{
dsn: os.Getenv("GARDOMATIC_DB_DSN"),
environment: envString("GARDOMATIC_ENV", "development"),
webBaseURL: envString("GARDOMATIC_WEB_BASE_URL", "http://localhost:4040"),
mail: mailer.Config{
Mode: mailer.Mode(envString("GARDOMATIC_SMTP_MODE", string(mailer.ModeFile))),
Host: os.Getenv("GARDOMATIC_SMTP_HOST"),
Port: port,
Username: os.Getenv("GARDOMATIC_SMTP_USERNAME"),
Password: os.Getenv("GARDOMATIC_SMTP_PASSWORD"),
Sender: envString("GARDOMATIC_SMTP_SENDER", "gardomatic@localhost"),
FilePath: envString("GARDOMATIC_SMTP_FILE_PATH", "/tmp/gardomatic-mails.log"),
},
}, nil
}
func envString(name, fallback string) string {
if value := strings.TrimSpace(os.Getenv(name)); value != "" {
return value
}
return fallback
}
func envInt(name string, fallback int) (int, error) {
value := strings.TrimSpace(os.Getenv(name))
if value == "" {
return fallback, nil
}
n, err := strconv.Atoi(value)
if err != nil {
return 0, fmt.Errorf("%s must be an integer: %w", name, err)
}
return n, nil
}