package main import ( "gateway/config" "gateway/handlers" "gateway/middleware" "gateway/models" "gateway/utils" "path/filepath" "time" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) 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") // 获取数据库配置 dbConfig := config.GetDBConfig() // 使用配置连接数据库 db, err := gorm.Open("mysql", dbConfig.GetDSN()) if err != nil { utils.Logger.Fatalf("数据库连接失败: %v", err) } defer db.Close() // 设置数据库连接池参数 db.DB().SetMaxIdleConns(10) db.DB().SetMaxOpenConns(100) db.DB().SetConnMaxLifetime(time.Hour) // 自动迁移表结构 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.POST("/api/secure-url", handlers.GenerateSecureURL) // 在权限校验中间件后添加退出路由 r.GET("/logout", handlers.Logout) // 新增通用静态文件路由(放在其他路由之后) r.NoRoute(handlers.ServeStatic(db)) // 启动服务 r.Run(":7070") }