Spaces:
Sleeping
Sleeping
| package main | |
| import ( | |
| "embed" | |
| "flag" | |
| "fmt" | |
| "io/fs" | |
| "log" | |
| "net/http" | |
| "os" | |
| "sublink/middlewares" | |
| "sublink/models" | |
| "sublink/routers" | |
| "sublink/settings" | |
| "sublink/utils" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| //go:embed static/js/* | |
| //go:embed static/css/* | |
| //go:embed static/img/* | |
| //go:embed static/* | |
| var embeddedFiles embed.FS | |
| //go:embed template | |
| var Template embed.FS | |
| var version string | |
| func Templateinit() { | |
| // 设置template路径 | |
| // 检查目录是否创建 | |
| subFS, err := fs.Sub(Template, "template") | |
| if err != nil { | |
| log.Println(err) | |
| return // 如果出错,直接返回 | |
| } | |
| entries, err := fs.ReadDir(subFS, ".") | |
| if err != nil { | |
| log.Println(err) | |
| return // 如果出错,直接返回 | |
| } | |
| // 创建template目录 | |
| _, err = os.Stat("./template") | |
| if os.IsNotExist(err) { | |
| err = os.Mkdir("./template", 0666) | |
| if err != nil { | |
| log.Println(err) | |
| return | |
| } | |
| } | |
| // 写入默认模板 | |
| for _, entry := range entries { | |
| _, err := os.Stat("./template/" + entry.Name()) | |
| //如果文件不存在则写入默认模板 | |
| if os.IsNotExist(err) { | |
| data, err := fs.ReadFile(subFS, entry.Name()) | |
| if err != nil { | |
| log.Println(err) | |
| continue | |
| } | |
| err = os.WriteFile("./template/"+entry.Name(), data, 0666) | |
| if err != nil { | |
| log.Println(err) | |
| } | |
| } | |
| } | |
| } | |
| func main() { | |
| var port int | |
| // 获取版本号 | |
| var Isversion bool | |
| version = "1.8" | |
| flag.BoolVar(&Isversion, "version", false, "显示版本号") | |
| flag.Parse() | |
| if Isversion { | |
| fmt.Println(version) | |
| return | |
| } | |
| // 初始化数据库 | |
| models.InitSqlite() | |
| // 获取命令行参数 | |
| args := os.Args | |
| // 如果长度小于2则没有接收到任何参数 | |
| if len(args) < 2 { | |
| port = 8000 | |
| Run(port) | |
| return | |
| } | |
| // 命令行参数选择 | |
| settingCmd := flag.NewFlagSet("setting", flag.ExitOnError) | |
| var username, password string | |
| settingCmd.StringVar(&username, "username", "", "设置账号") | |
| settingCmd.StringVar(&password, "password", "", "设置密码") | |
| settingCmd.IntVar(&port, "port", 8000, "修改端口") | |
| switch args[1] { | |
| // 解析setting命令标志 | |
| case "setting": | |
| settingCmd.Parse(args[2:]) | |
| fmt.Println(username, password) | |
| settings.ResetUser(username, password) | |
| return | |
| case "run": | |
| settingCmd.Parse(args[2:]) | |
| Run(port) | |
| default: | |
| return | |
| } | |
| } | |
| func Run(port int) { | |
| // 初始化gin框架 | |
| r := gin.Default() | |
| // 初始化日志配置 | |
| utils.Loginit() | |
| // 初始化模板 | |
| Templateinit() | |
| // 安装中间件 | |
| r.Use(middlewares.AuthorToken) // jwt验证token | |
| // 设置静态资源路径 | |
| staticFiles, err := fs.Sub(embeddedFiles, "static") | |
| if err != nil { | |
| log.Println(err) | |
| } | |
| r.StaticFS("/static", http.FS(staticFiles)) | |
| // 设置模板路径 | |
| r.GET("/", func(c *gin.Context) { | |
| data, err := fs.ReadFile(staticFiles, "index.html") | |
| if err != nil { | |
| c.Error(err) | |
| return | |
| } | |
| c.Data(200, "text/html", data) | |
| }) | |
| // 注册路由 | |
| routers.User(r) | |
| routers.Mentus(r) | |
| routers.Subcription(r) | |
| routers.Nodes(r) | |
| routers.Clients(r) | |
| routers.Total(r) | |
| routers.Templates(r) | |
| routers.Version(r, version) | |
| // 启动服务 | |
| r.Run(fmt.Sprintf("0.0.0.0:%d", port)) | |
| } | |