package settings import ( "context" "crypto/rand" "database/sql" "encoding/json" "errors" "fmt" "github.com/SecurityBrewery/catalyst/app/database/sqlc" ) type Settings struct { Meta Meta `json:"meta"` SMTP SMTP `json:"smtp"` RecordAuthToken TokenConfig `json:"recordAuthToken"` RecordPasswordResetToken TokenConfig `json:"recordPasswordResetToken"` RecordVerificationToken TokenConfig `json:"recordVerificationToken"` } type Meta struct { AppName string `json:"appName"` AppURL string `json:"appUrl"` SenderName string `json:"senderName"` SenderAddress string `json:"senderAddress"` ResetPasswordTemplate EmailTemplate `json:"resetPasswordTemplate"` } type EmailTemplate struct { Body string `json:"body"` Subject string `json:"subject"` } type SMTP struct { Enabled bool `json:"enabled"` Host string `json:"host"` Port int `json:"port"` Username string `json:"username"` Password string `json:"password"` AuthMethod string `json:"authMethod"` TLS bool `json:"tls"` LocalName string `json:"localName"` } type TokenConfig struct { Secret string `json:"secret"` Duration int `json:"duration"` } func Load(ctx context.Context, queries *sqlc.Queries) (*Settings, error) { param, err := queries.Param(ctx, "settings") if err != nil { if errors.Is(err, sql.ErrNoRows) { return initSettings(ctx, queries) } return nil, fmt.Errorf("failed to get settings: %w", err) } var settings Settings if err := json.Unmarshal(param.Value, &settings); err != nil { return nil, err } return &settings, nil } const ( //nolint: gosec resetPasswordTemplateBody = `
Hello,
Click on the button below to reset your password.
If you didn't ask to reset your password, you can ignore this email.
Thanks,
{APP_NAME} team
Hello,
Thank you for joining us at {APP_NAME}.
Click on the button below to verify your email address.
Thanks,
{APP_NAME} team