| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 | 
							- package main
 
- import (
 
- 	"flag"
 
- 	"fmt"
 
- 	"log"
 
- 	"os"
 
- 	"os/signal"
 
- 	"syscall"
 
- 	_ "unsafe"
 
- 	"x-ui/config"
 
- 	"x-ui/database"
 
- 	"x-ui/logger"
 
- 	"x-ui/v2ui"
 
- 	"x-ui/web"
 
- 	"x-ui/web/global"
 
- 	"x-ui/web/service"
 
- 	"github.com/op/go-logging"
 
- )
 
- func runWebServer() {
 
- 	log.Printf("%v %v", config.GetName(), config.GetVersion())
 
- 	switch config.GetLogLevel() {
 
- 	case config.Debug:
 
- 		logger.InitLogger(logging.DEBUG)
 
- 	case config.Info:
 
- 		logger.InitLogger(logging.INFO)
 
- 	case config.Warn:
 
- 		logger.InitLogger(logging.WARNING)
 
- 	case config.Error:
 
- 		logger.InitLogger(logging.ERROR)
 
- 	default:
 
- 		log.Fatal("unknown log level:", config.GetLogLevel())
 
- 	}
 
- 	err := database.InitDB(config.GetDBPath())
 
- 	if err != nil {
 
- 		log.Fatal(err)
 
- 	}
 
- 	var server *web.Server
 
- 	server = web.NewServer()
 
- 	global.SetWebServer(server)
 
- 	err = server.Start()
 
- 	if err != nil {
 
- 		log.Println(err)
 
- 		return
 
- 	}
 
- 	sigCh := make(chan os.Signal, 1)
 
- 	//信号量捕获处理
 
- 	signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGKILL)
 
- 	for {
 
- 		sig := <-sigCh
 
- 		switch sig {
 
- 		case syscall.SIGHUP:
 
- 			err := server.Stop()
 
- 			if err != nil {
 
- 				logger.Warning("stop server err:", err)
 
- 			}
 
- 			server = web.NewServer()
 
- 			global.SetWebServer(server)
 
- 			err = server.Start()
 
- 			if err != nil {
 
- 				log.Println(err)
 
- 				return
 
- 			}
 
- 		default:
 
- 			server.Stop()
 
- 			return
 
- 		}
 
- 	}
 
- }
 
- func resetSetting() {
 
- 	err := database.InitDB(config.GetDBPath())
 
- 	if err != nil {
 
- 		fmt.Println(err)
 
- 		return
 
- 	}
 
- 	settingService := service.SettingService{}
 
- 	err = settingService.ResetSettings()
 
- 	if err != nil {
 
- 		fmt.Println("reset setting failed:", err)
 
- 	} else {
 
- 		fmt.Println("reset setting success")
 
- 	}
 
- }
 
- func showSetting(show bool) {
 
- 	if show {
 
- 		settingService := service.SettingService{}
 
- 		port, err := settingService.GetPort()
 
- 		if err != nil {
 
- 			fmt.Println("get current port fialed,error info:", err)
 
- 		}
 
- 		userService := service.UserService{}
 
- 		userModel, err := userService.GetFirstUser()
 
- 		if err != nil {
 
- 			fmt.Println("get current user info failed,error info:", err)
 
- 		}
 
- 		username := userModel.Username
 
- 		userpasswd := userModel.Password
 
- 		if (username == "") || (userpasswd == "") {
 
- 			fmt.Println("current username or password is empty")
 
- 		}
 
- 		fmt.Println("current pannel settings as follows:")
 
- 		fmt.Println("username:", username)
 
- 		fmt.Println("userpasswd:", userpasswd)
 
- 		fmt.Println("port:", port)
 
- 	}
 
- }
 
- func updateTgbotEnableSts(status bool) {
 
- 	settingService := service.SettingService{}
 
- 	currentTgSts, err := settingService.GetTgbotenabled()
 
- 	if err != nil {
 
- 		fmt.Println(err)
 
- 		return
 
- 	}
 
- 	logger.Infof("current enabletgbot status[%v],need update to status[%v]", currentTgSts, status)
 
- 	if currentTgSts != status {
 
- 		err := settingService.SetTgbotenabled(status)
 
- 		if err != nil {
 
- 			fmt.Println(err)
 
- 			return
 
- 		} else {
 
- 			logger.Infof("SetTgbotenabled[%v] success", status)
 
- 		}
 
- 	}
 
- 	return
 
- }
 
- func updateTgbotSetting(tgBotToken string, tgBotChatid int, tgBotRuntime string) {
 
- 	err := database.InitDB(config.GetDBPath())
 
- 	if err != nil {
 
- 		fmt.Println(err)
 
- 		return
 
- 	}
 
- 	settingService := service.SettingService{}
 
- 	if tgBotToken != "" {
 
- 		err := settingService.SetTgBotToken(tgBotToken)
 
- 		if err != nil {
 
- 			fmt.Println(err)
 
- 			return
 
- 		} else {
 
- 			logger.Info("updateTgbotSetting tgBotToken success")
 
- 		}
 
- 	}
 
- 	if tgBotRuntime != "" {
 
- 		err := settingService.SetTgbotRuntime(tgBotRuntime)
 
- 		if err != nil {
 
- 			fmt.Println(err)
 
- 			return
 
- 		} else {
 
- 			logger.Infof("updateTgbotSetting tgBotRuntime[%s] success", tgBotRuntime)
 
- 		}
 
- 	}
 
- 	if tgBotChatid != 0 {
 
- 		err := settingService.SetTgBotChatId(tgBotChatid)
 
- 		if err != nil {
 
- 			fmt.Println(err)
 
- 			return
 
- 		} else {
 
- 			logger.Info("updateTgbotSetting tgBotChatid success")
 
- 		}
 
- 	}
 
- }
 
- func updateSetting(port int, username string, password string) {
 
- 	err := database.InitDB(config.GetDBPath())
 
- 	if err != nil {
 
- 		fmt.Println(err)
 
- 		return
 
- 	}
 
- 	settingService := service.SettingService{}
 
- 	if port > 0 {
 
- 		err := settingService.SetPort(port)
 
- 		if err != nil {
 
- 			fmt.Println("set port failed:", err)
 
- 		} else {
 
- 			fmt.Printf("set port %v success", port)
 
- 		}
 
- 	}
 
- 	if username != "" || password != "" {
 
- 		userService := service.UserService{}
 
- 		err := userService.UpdateFirstUser(username, password)
 
- 		if err != nil {
 
- 			fmt.Println("set username and password failed:", err)
 
- 		} else {
 
- 			fmt.Println("set username and password success")
 
- 		}
 
- 	}
 
- }
 
- func main() {
 
- 	if len(os.Args) < 2 {
 
- 		runWebServer()
 
- 		return
 
- 	}
 
- 	var showVersion bool
 
- 	flag.BoolVar(&showVersion, "v", false, "show version")
 
- 	runCmd := flag.NewFlagSet("run", flag.ExitOnError)
 
- 	v2uiCmd := flag.NewFlagSet("v2-ui", flag.ExitOnError)
 
- 	var dbPath string
 
- 	v2uiCmd.StringVar(&dbPath, "db", "/etc/v2-ui/v2-ui.db", "set v2-ui db file path")
 
- 	settingCmd := flag.NewFlagSet("setting", flag.ExitOnError)
 
- 	var port int
 
- 	var username string
 
- 	var password string
 
- 	var tgbottoken string
 
- 	var tgbotchatid int
 
- 	var enabletgbot bool
 
- 	var tgbotRuntime string
 
- 	var reset bool
 
- 	var show bool
 
- 	settingCmd.BoolVar(&reset, "reset", false, "reset all settings")
 
- 	settingCmd.BoolVar(&show, "show", false, "show current settings")
 
- 	settingCmd.IntVar(&port, "port", 0, "set panel port")
 
- 	settingCmd.StringVar(&username, "username", "", "set login username")
 
- 	settingCmd.StringVar(&password, "password", "", "set login password")
 
- 	settingCmd.StringVar(&tgbottoken, "tgbottoken", "", "set telegrame bot token")
 
- 	settingCmd.StringVar(&tgbotRuntime, "tgbotRuntime", "", "set telegrame bot cron time")
 
- 	settingCmd.IntVar(&tgbotchatid, "tgbotchatid", 0, "set telegrame bot chat id")
 
- 	settingCmd.BoolVar(&enabletgbot, "enabletgbot", false, "enable telegram bot notify")
 
- 	oldUsage := flag.Usage
 
- 	flag.Usage = func() {
 
- 		oldUsage()
 
- 		fmt.Println()
 
- 		fmt.Println("Commands:")
 
- 		fmt.Println("    run            run web panel")
 
- 		fmt.Println("    v2-ui          migrate form v2-ui")
 
- 		fmt.Println("    setting        set settings")
 
- 	}
 
- 	flag.Parse()
 
- 	if showVersion {
 
- 		fmt.Println(config.GetVersion())
 
- 		return
 
- 	}
 
- 	switch os.Args[1] {
 
- 	case "run":
 
- 		err := runCmd.Parse(os.Args[2:])
 
- 		if err != nil {
 
- 			fmt.Println(err)
 
- 			return
 
- 		}
 
- 		runWebServer()
 
- 	case "v2-ui":
 
- 		err := v2uiCmd.Parse(os.Args[2:])
 
- 		if err != nil {
 
- 			fmt.Println(err)
 
- 			return
 
- 		}
 
- 		err = v2ui.MigrateFromV2UI(dbPath)
 
- 		if err != nil {
 
- 			fmt.Println("migrate from v2-ui failed:", err)
 
- 		}
 
- 	case "setting":
 
- 		err := settingCmd.Parse(os.Args[2:])
 
- 		if err != nil {
 
- 			fmt.Println(err)
 
- 			return
 
- 		}
 
- 		if reset {
 
- 			resetSetting()
 
- 		} else {
 
- 			updateSetting(port, username, password)
 
- 		}
 
- 		if show {
 
- 			showSetting(show)
 
- 		}
 
- 		updateTgbotEnableSts(enabletgbot)
 
- 		if (tgbottoken != "") || (tgbotchatid != 0) || (tgbotRuntime != "") {
 
- 			updateTgbotSetting(tgbottoken, tgbotchatid, tgbotRuntime)
 
- 		}
 
- 	default:
 
- 		fmt.Println("except 'run' or 'v2-ui' or 'setting' subcommands")
 
- 		fmt.Println()
 
- 		runCmd.Usage()
 
- 		fmt.Println()
 
- 		v2uiCmd.Usage()
 
- 		fmt.Println()
 
- 		settingCmd.Usage()
 
- 	}
 
- }
 
 
  |