From 759a235e7e5c0fd73675c53cc875f06fd6afc85a Mon Sep 17 00:00:00 2001 From: Hintay Date: Sat, 19 Feb 2022 00:46:46 +0800 Subject: [PATCH] Refactor start-up parameters. Fixed embed bugs for Windows. Fixed wrong Content Type of .js file on some OS platforms. --- main.go | 11 +++++-- nginx-ui.service | 2 +- server/api/install.go | 3 +- server/model/models.go | 3 +- server/router/routers.go | 8 ++--- server/settings/settings.go | 61 +++++++++++++++++++------------------ 6 files changed, 47 insertions(+), 41 deletions(-) diff --git a/main.go b/main.go index 1effefd9..0536dfff 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "github.com/0xJacky/Nginx-UI/server/settings" tool2 "github.com/0xJacky/Nginx-UI/server/tool" "log" + "mime" "net/http" "os/signal" "syscall" @@ -19,11 +20,15 @@ func main() { ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer stop() - var dataDir string - flag.StringVar(&dataDir, "d", ".", "Specify the data dir") + // Hack: fix wrong Content Type of .js file on some OS platforms + // See https://github.com/golang/go/issues/32350 + _ = mime.AddExtensionType(".js", "text/javascript; charset=utf-8") + + var confPath string + flag.StringVar(&confPath, "config", "./app.ini", "Specify the configuration file") flag.Parse() - settings.Init(dataDir) + settings.Init(confPath) model.Init() srv := &http.Server{ diff --git a/nginx-ui.service b/nginx-ui.service index 9cd7c4a3..332845c6 100644 --- a/nginx-ui.service +++ b/nginx-ui.service @@ -5,7 +5,7 @@ After=network.target [Service] Type=simple -ExecStart=/usr/local/bin/nginx-ui -d /usr/local/etc/nginx-ui +ExecStart=/usr/local/bin/nginx-ui -d /usr/local/etc/nginx-ui/app.ini Restart=on-failure TimeoutStopSec=5 KillMode=mixed diff --git a/server/api/install.go b/server/api/install.go index 9418507f..3883781b 100644 --- a/server/api/install.go +++ b/server/api/install.go @@ -8,11 +8,10 @@ import ( "golang.org/x/crypto/bcrypt" "net/http" "os" - "path" ) func installLockStatus() bool { - lockPath := path.Join(settings.DataDir, "app.ini") + lockPath := settings.ConfPath _, err := os.Stat(lockPath) return !os.IsNotExist(err) diff --git a/server/model/models.go b/server/model/models.go index 27849185..2c4871a8 100644 --- a/server/model/models.go +++ b/server/model/models.go @@ -1,6 +1,7 @@ package model import ( + "fmt" "github.com/0xJacky/Nginx-UI/server/settings" "gorm.io/driver/sqlite" "gorm.io/gorm" @@ -20,7 +21,7 @@ type Model struct { } func Init() { - dbPath := path.Join(settings.DataDir, "database.db") + dbPath := path.Join(path.Dir(settings.ConfPath), fmt.Sprintf("%s.db", settings.ServerSettings.Database)) var err error db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), diff --git a/server/router/routers.go b/server/router/routers.go index 9d4bb5d9..d14887da 100644 --- a/server/router/routers.go +++ b/server/router/routers.go @@ -11,7 +11,7 @@ import ( "io/fs" "log" "net/http" - "path/filepath" + "path" "strings" ) @@ -47,14 +47,14 @@ type serverFileSystemType struct { http.FileSystem } -func (f serverFileSystemType) Exists(prefix string, path string) bool { - _, err := f.Open(filepath.Join(prefix, path)) +func (f serverFileSystemType) Exists(prefix string, filePath string) bool { + _, err := f.Open(path.Join(prefix, filePath)) return err == nil } func mustFS(dir string) (serverFileSystem static.ServeFileSystem) { - sub, err := fs.Sub(frontend.DistFS, filepath.Join("dist", dir)) + sub, err := fs.Sub(frontend.DistFS, path.Join("dist", dir)) if err != nil { log.Println(err) diff --git a/server/settings/settings.go b/server/settings/settings.go index 22636e12..b59e50d2 100644 --- a/server/settings/settings.go +++ b/server/settings/settings.go @@ -1,10 +1,9 @@ package settings import ( - "gopkg.in/ini.v1" - "log" - "os" - "path" + "gopkg.in/ini.v1" + "log" + "os" ) var Conf *ini.File @@ -16,30 +15,33 @@ type Server struct { JwtSecret string HTTPChallengePort string Email string + Database string } -var ServerSettings = &Server{} - -var DataDir string -var confPath string - -func Init(dataDir string) { - DataDir = dataDir - confPath = path.Join(dataDir, "app.ini") - if _, err := os.Stat(confPath); os.IsNotExist(err) { - confPath = path.Join(dataDir, "app.example.ini") - } - Setup() +var ServerSettings = &Server{ + HttpPort: "9000", + RunMode: "debug", + HTTPChallengePort: "9180", + Database: "database", } -func Setup() { - var err error - Conf, err = ini.Load(confPath) - if err != nil { - log.Fatalf("setting.Setup, fail to parse '%s': %v", confPath, err) - } +var ConfPath string - mapTo("server", ServerSettings) +func Init(confPath string) { + ConfPath = confPath + if _, err := os.Stat(ConfPath); os.IsExist(err) { + Setup() + } +} + +func Setup() { + var err error + Conf, err = ini.Load(ConfPath) + if err != nil { + log.Fatalf("setting.Setup, fail to parse '%s': %v", ConfPath, err) + } + + mapTo("server", ServerSettings) } func mapTo(section string, v interface{}) { @@ -50,11 +52,10 @@ func mapTo(section string, v interface{}) { } func Save() (err error) { - confPath = path.Join(DataDir, "app.ini") - err = Conf.SaveTo(confPath) - if err != nil { - return - } - Setup() - return + err = Conf.SaveTo(ConfPath) + if err != nil { + return + } + Setup() + return }