53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
type Config struct {
|
|
Port string
|
|
DataDir string
|
|
DatabasePath string
|
|
JWTSecret string
|
|
BaseURL string
|
|
AllowRegistration bool
|
|
LogLevel string
|
|
}
|
|
|
|
func Load() *Config {
|
|
port := getEnv("PORT", "8080")
|
|
dataDir := getEnv("DATA_DIR", "./data")
|
|
dbURL := getEnv("DATABASE_URL", "")
|
|
|
|
dbPath := filepath.Join(dataDir, "mindsift.db")
|
|
if strings.HasPrefix(dbURL, "sqlite://") {
|
|
dbPath = strings.TrimPrefix(dbURL, "sqlite://")
|
|
} else if dbURL != "" && !strings.HasPrefix(dbURL, "postgres") {
|
|
dbPath = dbURL
|
|
}
|
|
|
|
jwtSecret := getEnv("JWT_SECRET", "mindsift-default-selfhosted-jwt-secret-key-2026")
|
|
baseURL := getEnv("BASE_URL", "http://localhost:"+port)
|
|
allowReg := strings.ToLower(getEnv("ALLOW_REGISTRATION", "true")) != "false"
|
|
logLevel := getEnv("LOG_LEVEL", "info")
|
|
|
|
return &Config{
|
|
Port: port,
|
|
DataDir: dataDir,
|
|
DatabasePath: dbPath,
|
|
JWTSecret: jwtSecret,
|
|
BaseURL: baseURL,
|
|
AllowRegistration: allowReg,
|
|
LogLevel: logLevel,
|
|
}
|
|
}
|
|
|
|
func getEnv(key, fallback string) string {
|
|
if val, ok := os.LookupEnv(key); ok && strings.TrimSpace(val) != "" {
|
|
return strings.TrimSpace(val)
|
|
}
|
|
return fallback
|
|
}
|