123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- package config
- import (
- _ "embed"
- "fmt"
- "io"
- "os"
- "path/filepath"
- "runtime"
- "strings"
- )
- //go:embed version
- var version string
- //go:embed name
- var name string
- type LogLevel string
- const (
- Debug LogLevel = "debug"
- Info LogLevel = "info"
- Notice LogLevel = "notice"
- Warn LogLevel = "warn"
- Error LogLevel = "error"
- )
- func GetVersion() string {
- return strings.TrimSpace(version)
- }
- func GetName() string {
- return strings.TrimSpace(name)
- }
- func GetLogLevel() LogLevel {
- if IsDebug() {
- return Debug
- }
- logLevel := os.Getenv("XUI_LOG_LEVEL")
- if logLevel == "" {
- return Info
- }
- return LogLevel(logLevel)
- }
- func IsDebug() bool {
- return os.Getenv("XUI_DEBUG") == "true"
- }
- func GetBinFolderPath() string {
- binFolderPath := os.Getenv("XUI_BIN_FOLDER")
- if binFolderPath == "" {
- binFolderPath = "bin"
- }
- return binFolderPath
- }
- func getBaseDir() string {
- exePath, err := os.Executable()
- if err != nil {
- return "."
- }
- exeDir := filepath.Dir(exePath)
- exeDirLower := strings.ToLower(filepath.ToSlash(exeDir))
- if strings.Contains(exeDirLower, "/appdata/local/temp/") || strings.Contains(exeDirLower, "/go-build") {
- wd, err := os.Getwd()
- if err != nil {
- return "."
- }
- return wd
- }
- return exeDir
- }
- func GetDBFolderPath() string {
- dbFolderPath := os.Getenv("XUI_DB_FOLDER")
- if dbFolderPath != "" {
- return dbFolderPath
- }
- if runtime.GOOS == "windows" {
- return getBaseDir()
- }
- return "/etc/x-ui"
- }
- func GetDBPath() string {
- return fmt.Sprintf("%s/%s.db", GetDBFolderPath(), GetName())
- }
- func GetLogFolder() string {
- logFolderPath := os.Getenv("XUI_LOG_FOLDER")
- if logFolderPath != "" {
- return logFolderPath
- }
- if runtime.GOOS == "windows" {
- return getBaseDir()
- }
- return "/var/log"
- }
- func copyFile(src, dst string) error {
- in, err := os.Open(src)
- if err != nil {
- return err
- }
- defer in.Close()
- out, err := os.Create(dst)
- if err != nil {
- return err
- }
- defer out.Close()
- _, err = io.Copy(out, in)
- if err != nil {
- return err
- }
- return out.Sync()
- }
- func init() {
- if runtime.GOOS != "windows" {
- return
- }
- if os.Getenv("XUI_DB_FOLDER") != "" {
- return
- }
- oldDBFolder := "/etc/x-ui"
- oldDBPath := fmt.Sprintf("%s/%s.db", oldDBFolder, GetName())
- newDBFolder := GetDBFolderPath()
- newDBPath := fmt.Sprintf("%s/%s.db", newDBFolder, GetName())
- _, err := os.Stat(newDBPath)
- if err == nil {
- return // new exists
- }
- _, err = os.Stat(oldDBPath)
- if os.IsNotExist(err) {
- return // old does not exist
- }
- _ = copyFile(oldDBPath, newDBPath) // ignore error
- }
|