62 lines
1.4 KiB
Go
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
|
|
}
|