package main import ( "log" "net/http" "tonav-go/database" "tonav-go/handlers" config "tonav-go/utils" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" ) func main() { cfg := config.LoadConfig() database.InitDB(cfg.DBPath) database.Seed() handlers.StartHealthCheck() handlers.StartAutoBackup() r := gin.Default() store := cookie.NewStore([]byte(cfg.SecretKey)) r.Use(sessions.Sessions("tonav_session", store)) r.Static("/static", "./static") // 显式逐个加载,彻底杜绝路径猜测问题 r.LoadHTMLFiles( "templates/index.html", "templates/admin/login.html", "templates/admin/dashboard.html", "templates/admin/categories.html", "templates/admin/services.html", "templates/admin/change_password.html", ) r.GET("/", handlers.IndexHandler) r.GET("/admin/login", func(c *gin.Context) { c.HTML(http.StatusOK, "login.html", nil) }) r.POST("/admin/login", handlers.LoginHandler) r.GET("/admin/logout", handlers.LogoutHandler) admin := r.Group("/admin") admin.Use(handlers.AuthRequired()) { admin.GET("", func(c *gin.Context) { c.Redirect(http.StatusFound, "/admin/dashboard") }) admin.GET("/dashboard", handlers.DashboardHandler) admin.GET("/services", handlers.ServicesPageHandler) admin.GET("/categories", handlers.CategoriesPageHandler) admin.GET("/change-password", handlers.ChangePasswordHandler) admin.POST("/change-password", handlers.ChangePasswordHandler) admin.GET("/api/services", handlers.GetServices) admin.POST("/api/services", handlers.SaveService) admin.PUT("/api/services/:id", handlers.SaveService) admin.DELETE("/api/services/:id", handlers.DeleteService) admin.GET("/api/categories", handlers.GetCategories) admin.POST("/api/categories", handlers.SaveCategory) admin.PUT("/api/categories/:id", handlers.SaveCategory) admin.DELETE("/api/categories/:id", handlers.DeleteCategory) admin.GET("/api/settings", handlers.GetSettings) admin.POST("/api/settings", handlers.SaveSettings) admin.POST("/api/backup/webdav", handlers.RunCloudBackup) admin.GET("/api/backup/list", handlers.ListCloudBackups) admin.DELETE("/api/backup/delete", handlers.DeleteCloudBackup) admin.POST("/api/backup/restore", handlers.RestoreCloudBackup) } log.Printf("ToNav-go 启动在端口 %s...", cfg.Port) r.Run(":" + cfg.Port) }