diff --git a/config.yaml b/config.yaml index e8addc5..823474b 100644 --- a/config.yaml +++ b/config.yaml @@ -1,2 +1,3 @@ adminpassword: initcool-https://blog.nmslwsnd.com palworldconfigfilepath: PalWorldSettings.ini +port: 8080 diff --git a/config/config.go b/config/config.go index 432ca1a..39120cd 100644 --- a/config/config.go +++ b/config/config.go @@ -1,7 +1,9 @@ package config import ( - "fmt" + "os" + + "github.com/charmbracelet/log" "github.com/spf13/viper" ) @@ -9,22 +11,29 @@ import ( type Config struct { PalWorldConfigFilePath string AdminPassword string + Port int } // 初始化并生成默认配置 -func InitDefaultConfig() { +func InitDefaultConfig(configPath string, configFile string) { defaultConfig := Config{ PalWorldConfigFilePath: "/root/palworld/data/Config/LinuxServer/PalWorldSettings.ini", AdminPassword: "initcool-https://blog.nmslwsnd.com", + Port: 8080, + } + if err := os.MkdirAll(configPath, 0755); err != nil { + log.Error(err) } viper.SetConfigType("yaml") + viper.SetConfigFile(configFile) // 将默认配置写入配置文件 viper.Set("PalWorldConfigFilePath", defaultConfig.PalWorldConfigFilePath) viper.Set("AdminPassword", defaultConfig.AdminPassword) + viper.Set("port", 8080) err := viper.WriteConfig() if err != nil { // 处理错误 - fmt.Println("Error writing default config:", err) + log.Error("Error writing default config:", err) } } diff --git a/global/global.go b/global/global.go index 2a1ef62..6e1fe5d 100644 --- a/global/global.go +++ b/global/global.go @@ -1,7 +1,15 @@ package global -import "github.com/limitcool/palworld-admin/config" +import ( + "path/filepath" + + "github.com/decred/dcrd/dcrutil/v2" + "github.com/limitcool/palworld-admin/config" +) var Config config.Config +var AppDir = dcrutil.AppDataDir("palworld-Admin", false) +var ConfigPath = filepath.Join(AppDir, "config") +var ConfigFile = filepath.Join(ConfigPath, "config.yaml") -const VERSION = "0.1.0" +const VERSION = "0.1.1" diff --git a/go.mod b/go.mod index 99f950b..f325c8d 100644 --- a/go.mod +++ b/go.mod @@ -12,10 +12,22 @@ require ( ) require ( + github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/bytedance/sonic v1.9.1 // indirect github.com/charmbracelet/lipgloss v0.9.1 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/dchest/blake256 v1.0.0 // indirect + github.com/decred/base58 v1.0.0 // indirect + github.com/decred/dcrd/chaincfg v1.5.1 // indirect + github.com/decred/dcrd/chaincfg/chainhash v1.0.1 // indirect + github.com/decred/dcrd/chaincfg/v2 v2.0.2 // indirect + github.com/decred/dcrd/dcrec v1.0.0 // indirect + github.com/decred/dcrd/dcrec/edwards v1.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1 v1.0.2 // indirect + github.com/decred/dcrd/dcrutil v1.4.1 // indirect + github.com/decred/dcrd/dcrutil/v2 v2.0.0 // indirect + github.com/decred/dcrd/wire v1.2.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect diff --git a/go.sum b/go.sum index 17b583b..b1cc6c7 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI= +github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= @@ -14,6 +16,29 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dchest/blake256 v1.0.0 h1:6gUgI5MHdz9g0TdrgKqXsoDX+Zjxmm1Sc6OsoGru50I= +github.com/dchest/blake256 v1.0.0/go.mod h1:xXNWCE1jsAP8DAjP+rKw2MbeqLczjI3TRx2VK+9OEYY= +github.com/decred/base58 v1.0.0 h1:BVi1FQCThIjZ0ehG+I99NJ51o0xcc9A/fDKhmJxY6+w= +github.com/decred/base58 v1.0.0/go.mod h1:LLY1p5e3g91byL/UO1eiZaYd+uRoVRarybgcoymu9Ks= +github.com/decred/dcrd/chaincfg v1.5.1 h1:u1Xbq0VTnAXIHW5ECqrWe0VYSgf5vWHqpSiwoLBzxAQ= +github.com/decred/dcrd/chaincfg v1.5.1/go.mod h1:FukMzTjkwzjPU+hK7CqDMQe3NMbSZAYU5PAcsx1wlv0= +github.com/decred/dcrd/chaincfg/chainhash v1.0.1 h1:0vG7U9+dSjSCaHQKdoSKURK2pOb47+b+8FK5q4+Je7M= +github.com/decred/dcrd/chaincfg/chainhash v1.0.1/go.mod h1:OVfvaOsNLS/A1y4Eod0Ip/Lf8qga7VXCQjUQLbkY0Go= +github.com/decred/dcrd/chaincfg/v2 v2.0.2 h1:VeGY52lHuYT01tIGbvYj+OO0GaGxGaJmnh+4vGca1+U= +github.com/decred/dcrd/chaincfg/v2 v2.0.2/go.mod h1:hpKvhLCDAD/xDZ3V1Pqpv9fIKVYYi11DyxETguazyvg= +github.com/decred/dcrd/dcrec v1.0.0 h1:W+z6Es+Rai3MXYVoPAxYr5U1DGis0Co33scJ6uH2J6o= +github.com/decred/dcrd/dcrec v1.0.0/go.mod h1:HIaqbEJQ+PDzQcORxnqen5/V1FR3B4VpIfmePklt8Q8= +github.com/decred/dcrd/dcrec/edwards v1.0.0 h1:UDcPNzclKiJlWqV3x1Fl8xMCJrolo4PB4X9t8LwKDWU= +github.com/decred/dcrd/dcrec/edwards v1.0.0/go.mod h1:HblVh1OfMt7xSxUL1ufjToaEvpbjpWvvTAUx4yem8BI= +github.com/decred/dcrd/dcrec/secp256k1 v1.0.1/go.mod h1:lhu4eZFSfTJWUnR3CFRcpD+Vta0KUAqnhTsTksHXgy0= +github.com/decred/dcrd/dcrec/secp256k1 v1.0.2 h1:awk7sYJ4pGWmtkiGHFfctztJjHMKGLV8jctGQhAbKe0= +github.com/decred/dcrd/dcrec/secp256k1 v1.0.2/go.mod h1:CHTUIVfmDDd0KFVFpNX1pFVCBUegxW387nN0IGwNKR0= +github.com/decred/dcrd/dcrutil v1.4.1 h1:DzgtXRZGh0CYLUC/ZlRpNRHhh0l6+iTRel9e0Gv/j44= +github.com/decred/dcrd/dcrutil v1.4.1/go.mod h1:QtHzk4bfeWW+rP2ov8h3yFs8S8xaLCICMY9Uz90tLew= +github.com/decred/dcrd/dcrutil/v2 v2.0.0 h1:HTqn2tZ8eqBF4y3hJwjyKBmJt16y7/HjzpE82E/crhY= +github.com/decred/dcrd/dcrutil/v2 v2.0.0/go.mod h1:gUshVAXpd51DlcEhr51QfWL2HJGkMDM1U8chY+9VvQg= +github.com/decred/dcrd/wire v1.2.0 h1:HqJVB7vcklIguzFWgRXw/WYCQ9cD3bUC5TKj53i1Hng= +github.com/decred/dcrd/wire v1.2.0/go.mod h1:/JKOsLInOJu6InN+/zH5AyCq3YDIOW/EqcffvU8fJHM= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= @@ -128,16 +153,22 @@ go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTV golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/main.go b/main.go index bdf4254..2017be4 100644 --- a/main.go +++ b/main.go @@ -17,13 +17,14 @@ import ( ) func main() { - viper.SetConfigFile("config.yaml") + log.Infof("https://github.com/limitcool/palworld-admin version: %s ", global.VERSION) + viper.SetConfigFile(global.ConfigFile) err := viper.ReadInConfig() // 如果找不到配置文件 if os.IsNotExist(err) { log.Info("Config file not found. Initializing with default values...") // 初始化并生成默认配置 - config.InitDefaultConfig() + config.InitDefaultConfig(global.ConfigPath, global.ConfigFile) // 重新尝试读取配置文件 err = viper.ReadInConfig() if err != nil { @@ -39,15 +40,16 @@ func main() { } // 打印配置 - fmt.Printf("PalWorldConfigFilePath: %s\n", global.Config.PalWorldConfigFilePath) - fmt.Printf("AdminPassword: %s\n", global.Config.AdminPassword) + log.Infof("PalWorldConfigFilePath: %s\n", global.Config.PalWorldConfigFilePath) + log.Infof("AdminPassword: %s\n", global.Config.AdminPassword) + log.Infof("Port: %d\n", global.Config.Port) router := routers.NewRouter() s := &http.Server{ - Addr: fmt.Sprint("0.0.0.0:", 8080), + Addr: fmt.Sprint("0.0.0.0:", global.Config.Port), Handler: router, MaxHeaderBytes: 1 << 20, } - fmt.Printf("Listen: %s:%d\n", "http://127.0.0.1", 8080) + log.Infof("Listen: %s:%d\n", "http://127.0.0.1", global.Config.Port) go func() { // 服务连接 监听 if err := s.ListenAndServe(); err != nil { diff --git a/routers/dist/favicon.ico b/routers/dist/favicon.ico index df36fcf..ab0c39b 100644 Binary files a/routers/dist/favicon.ico and b/routers/dist/favicon.ico differ diff --git a/util/util.go b/util/util.go new file mode 100644 index 0000000..f21117c --- /dev/null +++ b/util/util.go @@ -0,0 +1,25 @@ +package util + +import ( + "fmt" + "os" + "path/filepath" +) + +func OpenOrCreateFile(configPath, configFileName string) (*os.File, error) { + // 确保目录存在 + if err := os.MkdirAll(configPath, 0755); err != nil { + return nil, fmt.Errorf("无法创建目录: %v", err) + } + + // 构建完整的文件路径 + fullPath := filepath.Join(configPath, configFileName) + + // 打开或创建文件 + file, err := os.OpenFile(fullPath, os.O_RDWR|os.O_CREATE, 0644) + if err != nil { + return nil, fmt.Errorf("无法打开或创建文件: %v", err) + } + + return file, nil +}