Files
app_compartir/internal/config/config.go
T

73 lines
1.6 KiB
Go

package config
import (
"bufio"
"os"
"strings"
)
type Config struct {
Port string
BaseURL string
DataDir string
UploadDir string
DBPath string
SessionSecret string
WebControlURL string
GoogleClientID string
GoogleClientSecret string
}
func Load() *Config {
loadDotEnv(".env")
port := getEnv("PORT", "8085")
baseURL := getEnv("BASE_URL", "http://localhost:"+port)
dataDir := getEnv("DATA_DIR", "./data")
uploadDir := dataDir + "/uploads"
dbPath := dataDir + "/compartir.db"
return &Config{
Port: port,
BaseURL: strings.TrimRight(baseURL, "/"),
DataDir: dataDir,
UploadDir: uploadDir,
DBPath: dbPath,
SessionSecret: getEnv("SESSION_SECRET", "super-secret-compartir-key-2026"),
WebControlURL: getEnv("WEBCONTROL_API_URL", "https://api.siax-system.net"),
GoogleClientID: getEnv("GOOGLE_CLIENT_ID", ""),
GoogleClientSecret: getEnv("GOOGLE_CLIENT_SECRET", ""),
}
}
func getEnv(key, fallback string) string {
if val := os.Getenv(key); val != "" {
return val
}
return fallback
}
func loadDotEnv(filepath string) {
file, err := os.Open(filepath)
if err != nil {
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
if line == "" || strings.HasPrefix(line, "#") {
continue
}
parts := strings.SplitN(line, "=", 2)
if len(parts) == 2 {
k := strings.TrimSpace(parts[0])
v := strings.Trim(strings.TrimSpace(parts[1]), `"'`)
if os.Getenv(k) == "" {
os.Setenv(k, v)
}
}
}
}