Files
SingBox-Gopanel/internal/config/config.go
CN-JS-HuiBai 97f0672729
Some checks failed
build / build (api, amd64, linux) (push) Failing after -50s
build / build (api, arm64, linux) (push) Failing after -51s
build / build (api.exe, amd64, windows) (push) Failing after -51s
修复订阅无法正常获取的错误
2026-04-17 23:07:47 +08:00

111 lines
2.2 KiB
Go

package config
import (
"log"
"os"
"strconv"
"strings"
"github.com/joho/godotenv"
)
type Config struct {
DBHost string
DBPort string
DBUser string
DBPass string
DBName string
RedisHost string
RedisPort string
RedisPass string
RedisDB int
JWTSecret string
AppPort string
AppURL string
LogLevel string
PluginRoot string
}
var AppConfig *Config
func LoadConfig() {
err := godotenv.Load()
if err != nil {
log.Println("No .env file found, using environment variables")
}
AppConfig = &Config{
DBHost: getEnv("DB_HOST", "localhost"),
DBPort: getEnv("DB_PORT", "3306"),
DBUser: getEnv("DB_USER", "root"),
DBPass: getEnv("DB_PASS", ""),
DBName: getEnv("DB_NAME", "xboard"),
RedisHost: getEnv("REDIS_HOST", "localhost"),
RedisPort: getEnv("REDIS_PORT", "6379"),
RedisPass: getEnv("REDIS_PASS", ""),
RedisDB: getEnvInt("REDIS_DB", 0),
JWTSecret: getEnv("JWT_SECRET", "secret"),
AppPort: getEnv("APP_PORT", "8080"),
AppURL: getEnv("APP_URL", ""),
LogLevel: NormalizeLogLevel(getEnv("LOG_LEVEL", "info")),
PluginRoot: getEnv("PLUGIN_ROOT", "reference\\LDNET-GA-Theme\\plugin"),
}
}
func NormalizeLogLevel(value string) string {
switch strings.ToLower(strings.TrimSpace(value)) {
case "debug":
return "debug"
case "warn", "warning":
return "warn"
case "error":
return "error"
case "silent":
return "silent"
default:
return "info"
}
}
func IsLogLevelEnabled(currentLevel, targetLevel string) bool {
logLevelOrder := map[string]int{
"debug": 0,
"info": 1,
"warn": 2,
"error": 3,
"silent": 4,
}
currentRank, ok := logLevelOrder[NormalizeLogLevel(currentLevel)]
if !ok {
currentRank = logLevelOrder["info"]
}
targetRank, ok := logLevelOrder[NormalizeLogLevel(targetLevel)]
if !ok {
targetRank = logLevelOrder["info"]
}
return currentRank <= targetRank
}
func getEnv(key, defaultValue string) string {
if value, exists := os.LookupEnv(key); exists {
return value
}
return defaultValue
}
func getEnvInt(key string, defaultValue int) int {
raw := getEnv(key, "")
if raw == "" {
return defaultValue
}
value, err := strconv.Atoi(raw)
if err != nil {
return defaultValue
}
return value
}