c89b67a06d
- Merge lang package into constants (add IsValidLang, ValidateLang, AllLangs) - Rename internal/services to internal/email for consistency with pdf package - Rename types to avoid redundancy: EmailService→Service, EmailConfig→Config - Update all imports and references across codebase - Delete internal/lang directory (functions moved to constants)
111 lines
2.5 KiB
Go
111 lines
2.5 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
|
|
c "github.com/juanatsap/cv-site/internal/constants"
|
|
)
|
|
|
|
// Config holds all application configuration
|
|
type Config struct {
|
|
Server ServerConfig
|
|
Template TemplateConfig
|
|
Data DataConfig
|
|
Email EmailConfig
|
|
}
|
|
|
|
// ServerConfig contains server-specific settings
|
|
type ServerConfig struct {
|
|
Port string
|
|
Host string
|
|
ReadTimeout int
|
|
WriteTimeout int
|
|
}
|
|
|
|
// TemplateConfig contains template-specific settings
|
|
type TemplateConfig struct {
|
|
Dir string
|
|
PartialsDir string
|
|
HotReload bool
|
|
}
|
|
|
|
// DataConfig contains data directory settings
|
|
type DataConfig struct {
|
|
Dir string
|
|
}
|
|
|
|
// EmailConfig contains email/SMTP settings
|
|
type EmailConfig struct {
|
|
SMTPHost string
|
|
SMTPPort string
|
|
SMTPUser string
|
|
SMTPPassword string
|
|
FromEmail string
|
|
ContactEmail string
|
|
}
|
|
|
|
// Load creates a new Config with values from environment or defaults
|
|
func Load() *Config {
|
|
return &Config{
|
|
Server: ServerConfig{
|
|
Port: getEnv(c.EnvVarPort, c.DefaultPort),
|
|
Host: getEnv("HOST", "localhost"),
|
|
ReadTimeout: getEnvAsInt("READ_TIMEOUT", 15),
|
|
WriteTimeout: getEnvAsInt("WRITE_TIMEOUT", 15),
|
|
},
|
|
Template: TemplateConfig{
|
|
Dir: getEnv("TEMPLATE_DIR", c.DirTemplates),
|
|
PartialsDir: getEnv("PARTIALS_DIR", c.DirPartials),
|
|
HotReload: getEnvAsBool("TEMPLATE_HOT_RELOAD", isDevelopment()),
|
|
},
|
|
Data: DataConfig{
|
|
Dir: getEnv("DATA_DIR", c.DirData),
|
|
},
|
|
Email: EmailConfig{
|
|
SMTPHost: getEnv("SMTP_HOST", "smtp.gmail.com"),
|
|
SMTPPort: getEnv("SMTP_PORT", "587"),
|
|
SMTPUser: getEnv("SMTP_USER", ""),
|
|
SMTPPassword: getEnv("SMTP_PASSWORD", ""),
|
|
FromEmail: getEnv("SMTP_FROM_EMAIL", ""),
|
|
ContactEmail: getEnv("CONTACT_EMAIL", "txeo.msx@gmail.com"),
|
|
},
|
|
}
|
|
}
|
|
|
|
// Address returns the server address in host:port format
|
|
func (c *Config) Address() string {
|
|
return fmt.Sprintf("%s:%s", c.Server.Host, c.Server.Port)
|
|
}
|
|
|
|
// Helper functions
|
|
|
|
func getEnv(key, defaultValue string) string {
|
|
if value := os.Getenv(key); value != "" {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
func getEnvAsInt(key string, defaultValue int) int {
|
|
valueStr := os.Getenv(key)
|
|
if value, err := strconv.Atoi(valueStr); err == nil {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
func getEnvAsBool(key string, defaultValue bool) bool {
|
|
valueStr := os.Getenv(key)
|
|
if value, err := strconv.ParseBool(valueStr); err == nil {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
func isDevelopment() bool {
|
|
env := getEnv(c.EnvVarGOEnv, c.EnvDevelopment)
|
|
return env == c.EnvDevelopment || env == "dev"
|
|
}
|