73 lines
1.6 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|
|
}
|