106 lines
2.1 KiB
Go
106 lines
2.1 KiB
Go
package types
|
|
|
|
import (
|
|
"errors"
|
|
"spend-sparrow/internal/log"
|
|
)
|
|
|
|
var (
|
|
ErrMissingConfig = errors.New("missing config")
|
|
)
|
|
|
|
type Settings struct {
|
|
Port string
|
|
OtelEnabled bool
|
|
|
|
BaseUrl string
|
|
Environment string
|
|
Smtp *SmtpSettings
|
|
}
|
|
|
|
type SmtpSettings struct {
|
|
Host string
|
|
Port string
|
|
User string
|
|
Pass string
|
|
FromMail string
|
|
FromName string
|
|
}
|
|
|
|
func NewSettingsFromEnv(env func(string) string) (*Settings, error) {
|
|
var (
|
|
smtp *SmtpSettings
|
|
err error
|
|
)
|
|
if env("SMTP_ENABLED") == "true" {
|
|
smtp, err = getSmtpSettings(env)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
settings := &Settings{
|
|
Port: env("PORT"),
|
|
OtelEnabled: env("OTEL_ENABLED") == "true",
|
|
BaseUrl: env("BASE_URL"),
|
|
Environment: env("ENVIRONMENT"),
|
|
Smtp: smtp,
|
|
}
|
|
|
|
if settings.BaseUrl == "" {
|
|
log.L.Error("BASE_URL must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
if settings.Port == "" {
|
|
log.L.Error("PORT must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
if settings.Environment == "" {
|
|
log.L.Error("ENVIRONMENT must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
|
|
log.L.Info("settings read", "BASE_URL", settings.BaseUrl)
|
|
log.L.Info("settings read", "ENVIRONMENT", settings.Environment)
|
|
|
|
return settings, nil
|
|
}
|
|
|
|
func getSmtpSettings(env func(string) string) (*SmtpSettings, error) {
|
|
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.L.Error("SMTP_HOST must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
if smtp.Port == "" {
|
|
log.L.Error("SMTP_PORT must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
if smtp.User == "" {
|
|
log.L.Error("SMTP_USER must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
if smtp.Pass == "" {
|
|
log.L.Error("SMTP_PASS must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
if smtp.FromMail == "" {
|
|
log.L.Error("SMTP_FROM_MAIL must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
if smtp.FromName == "" {
|
|
log.L.Error("SMTP_FROM_NAME must be set")
|
|
return nil, ErrMissingConfig
|
|
}
|
|
|
|
return &smtp, nil
|
|
}
|