mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-22 06:40:43 +08:00
111 lines
2.6 KiB
Go
111 lines
2.6 KiB
Go
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"sort"
|
|
|
|
"github.com/li4n0/revsuit/pkg/server"
|
|
"github.com/urfave/cli/v2"
|
|
"gopkg.in/yaml.v3"
|
|
log "unknwon.dev/clog/v2"
|
|
)
|
|
|
|
func Start() {
|
|
_ = log.NewConsole(100,
|
|
log.ConsoleConfig{
|
|
Level: log.LevelInfo,
|
|
})
|
|
defer log.Stop()
|
|
app := &cli.App{
|
|
Name: "RevSuit",
|
|
Usage: "An Open-Sourced Reverse Platform Designed for Receive Various Kinds of Connection",
|
|
Flags: []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "addr",
|
|
Usage: "platform listened address",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "token",
|
|
Usage: "token used to manage platform",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "db",
|
|
Usage: "database file path",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "log",
|
|
Usage: "specify a log level from debug, info, warn, error, fatal. (default: info)",
|
|
},
|
|
&cli.PathFlag{
|
|
Name: "config",
|
|
Usage: "load configuration from FILE (default: config.yaml)",
|
|
},
|
|
},
|
|
Commands: []*cli.Command{
|
|
{
|
|
Name: "upgrade",
|
|
Action: func(c *cli.Context) error {
|
|
checkUpdateFromCli()
|
|
return nil
|
|
},
|
|
},
|
|
},
|
|
Action: func(c *cli.Context) error {
|
|
var configFile = "config.yaml"
|
|
if c.Path("config") != "" {
|
|
configFile = c.Path("config")
|
|
}
|
|
conf := &server.Config{}
|
|
tpl := &server.Config{}
|
|
_ = yaml.Unmarshal(configTemplate, tpl)
|
|
if content, err := os.ReadFile(configFile); err == nil {
|
|
if err := yaml.Unmarshal(content, conf); err != nil {
|
|
return err
|
|
}
|
|
if conf.Version != tpl.Version {
|
|
backup := fmt.Sprintf("%s_%.1f", configFile, conf.Version)
|
|
log.Warn("Old version of configuration file detected, new configuration file being generated, old configuration backed up to %s", backup)
|
|
if err := os.WriteFile(backup, content, 0644); err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(configFile, configTemplate, 0644)
|
|
}
|
|
|
|
} else if os.IsNotExist(err) && configFile == "config.yaml" {
|
|
log.Warn("Generate default configurations to config.yaml, please configure and run again.")
|
|
return os.WriteFile("config.yaml", configTemplate, 0644)
|
|
} else {
|
|
return err
|
|
}
|
|
if c.String("addr") != "" {
|
|
conf.Addr = c.String("addr")
|
|
}
|
|
if c.String("token") != "" {
|
|
conf.Token = c.String("token")
|
|
}
|
|
if c.String("db") != "" {
|
|
conf.Database = c.String("db")
|
|
}
|
|
if c.String("log") != "" {
|
|
conf.LogLevel = c.String("log")
|
|
}
|
|
|
|
if conf.CheckUpgrade {
|
|
checkUpdateFromCli()
|
|
}
|
|
|
|
server.New(conf).Run()
|
|
return nil
|
|
},
|
|
}
|
|
sort.Sort(cli.FlagsByName(app.Flags))
|
|
sort.Sort(cli.CommandsByName(app.Commands))
|
|
fmt.Printf(banner, server.VERSION)
|
|
|
|
err := app.Run(os.Args)
|
|
if err != nil {
|
|
log.Fatal(err.Error())
|
|
}
|
|
}
|