package main import ( "gateway/config" "gateway/handlers" "gateway/middleware" "gateway/models" "gateway/utils" "path/filepath" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" ) func main() { // 初始化日志 utils.InitLogger() // 解析static/index.html中的URLs并立即写入 hrefs, err := utils.ExtractHrefs("static/index.html") if err != nil { utils.Logger.Fatalf("解析HTML文件失败: %v", err) } // 保存URLs到config目录 configPath := filepath.Join("config", "urls.json") if err := config.SaveURLsToFile(hrefs, configPath); err != nil { utils.Logger.Fatalf("保存URLs失败: %v", err) } utils.Logger.Info("成功提取并保存URLs") // 初始化数据库 db, err := gorm.Open("sqlite3", "family.db") if err != nil { utils.Logger.Fatalf("数据库连接失败: %v", err) } defer db.Close() db.AutoMigrate(&models.Region{}, &models.User{}) // 初始化 Gin 引擎 r := gin.Default() // 配置 Session 中间件(移到最前面) store := config.InitSessionStore() r.Use(sessions.Sessions("mysession", store)) // 配置静态文件服务,添加认证中间件 r.Use(middleware.StaticAuthMiddleware()) r.Static("/static", "./static") r.LoadHTMLGlob("templates/*") // 路由配置 r.GET("/login", handlers.GetLogin) r.POST("/login", handlers.PostLogin(db)) r.GET("/register", handlers.GetRegister(db)) r.POST("/register", handlers.PostRegister(db)) r.GET("/api/user/info", handlers.GetUserInfo(db)) // 文档页面路由 r.GET("/", handlers.ServeIndex(db)) // 添加路由认证中间件 r.Use(middleware.RouteAuthMiddleware()) // 在权限校验中间件后添加退出路由 r.GET("/logout", handlers.Logout) // 新增通用静态文件路由(放在其他路由之后) r.NoRoute(handlers.ServeStatic(db)) // 启动服务 r.Run(":7070") }