package internal import ( "fmt" "os" "time" "xugu_license/internal/controllers" "xugu_license/internal/global" middlewares "xugu_license/internal/middleware" "github.com/gin-gonic/gin" ) // SetupRouter 配置Gin路由 func SetupRouter() *gin.Engine { r := gin.Default() // 创建按天生成的日志文件 logFileName := fmt.Sprintf("./logs/GTlicenseGin-%s.log", time.Now().Format("2006-01-02")) f, err := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { panic(fmt.Sprintf("Failed to open log file: %s", err)) } gin.DefaultWriter = f // 自定义日志格式 r.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n", param.ClientIP, param.TimeStamp.Format(time.RFC1123), param.Method, param.Path, param.Request.Proto, param.StatusCode, param.Latency, param.Request.UserAgent(), param.ErrorMessage, ) })) // 中间件配置 //configureMiddleware(r) middlewares.CORSMiddleware() // 静态文件服务配置 configureStaticFileServing(r) // 根路径请求处理 configureRootHandler(r) public := r.Group("/api") { // 定义一个路由来主动触发一次数据抓取 // r.POST("/capture", func(c *gin.Context) { // capture.CaptureOnce(global.OaDB, global.XuguDB) // c.JSON(200, gin.H{"status": "Data captured successfully"}) // }) public.POST("/register", controllers.Register) public.POST("/login", controllers.Login) public.GET("/image", func(c *gin.Context) { c.File("static/image/xugulogo.png") }) } protected := r.Group("/api/admin") { protected.Use(middlewares.JwtAuthMiddleware()) // 在路由组中使用中间件 //获取单个用户信息 , 有漏洞,需要判断登录的用户token是否是管理员 protected.GET("/userInfo", controllers.GetUserInfo) //获取所有用户信息 protected.GET("/userInfoAll", middlewares.PermissionMiddleware(middlewares.ReadUser), controllers.GetAllUserInfo) //修改用户信息 protected.POST("/updateUser", middlewares.PermissionMiddleware(middlewares.UpdateUser), controllers.UpdateUserInfo) //删除用户信息 protected.POST("/deleteUser", middlewares.PermissionMiddleware(middlewares.DeleteUser), controllers.DeleteUser) //上传文件 protected.POST("/upfile", middlewares.PermissionMiddleware(middlewares.UploadLicense), controllers.UploadfileHandler) //lincense //protected.GET("/LicenseInfo", controllers.GetLicenseInfo) protected.POST("/distributeLicense", middlewares.PermissionMiddleware(middlewares.DispatLicense), controllers.DistributeOALicenseController) //分发按钮校验 protected.GET("/GetDistributeButtenCheckController", middlewares.PermissionMiddleware(middlewares.DispatLicense), controllers.GetDistributeButtenCheckController) //分发给用户 protected.POST("/DistributeLicenseToUser", middlewares.PermissionMiddleware(middlewares.DispatLicense), controllers.DistributeLicenseToUsersController) //分发给邮箱 protected.POST("/DistributeLicenseToEmail", middlewares.PermissionMiddleware(middlewares.DispatLicense), controllers.DistributeLicenseToEmailController) //上传文件的license 弃用 protected.GET("/distributeLicenseByUserInfo", middlewares.PermissionMiddleware(middlewares.DispatLicense), controllers.DistributeLicenseByUser) //获取指定license信息 protected.GET("/GetSingleSlicenseInfo", middlewares.PermissionMiddleware(middlewares.ReadLicense), controllers.GetSingleLicenseInfoController) //获取全部license信息 new protected.GET("/GetAllLicenseInfo", middlewares.PermissionMiddleware(middlewares.ReadLicense), controllers.GetAllLicenseInfoController) //主动抓取一次oalicense到支撑库 protected.GET("/GetCaptureLicenseOnce", middlewares.PermissionMiddleware(middlewares.CaptureLicenseOnceToDb), controllers.CaptureLicenseOnceToDb) //搜索license protected.GET("/GetSearchLicInfoToDb", middlewares.PermissionMiddleware(middlewares.ReadLicense), controllers.SearchLicInfoToDb) protected.POST("/GetConditionalSearch", middlewares.PermissionMiddleware(middlewares.ReadLicense), controllers.ConditionalSearchController) //生成license new protected.POST("/GenerateLicense", middlewares.PermissionMiddleware(middlewares.GenerateLicense), controllers.GenerateOALicenseStrController) protected.POST("/GetlicenseRecord", middlewares.PermissionMiddleware(middlewares.ReadLicense), controllers.GetlicenseRecordInfo) //protected.POST("/GetlicenseRecordInfoByUser", middlewares.PermissionMiddleware(middlewares.ReadLicense), controllers.GetlicenseRecordInfoByUser) protected.POST("/UpdateLicense", middlewares.PermissionMiddleware(middlewares.UpdateLicense), controllers.UpdateLicense) protected.POST("/deleteLicRow", middlewares.PermissionMiddleware(middlewares.DeleteLicense), controllers.DelLicenseInfoRow) //role protected.POST("/GetSelfRoles", controllers.GetRoles) protected.POST("/GetRoles", middlewares.PermissionMiddleware(middlewares.GetRole), controllers.GetRoles) protected.GET("/GetRoleNames", controllers.GetRoleNames) protected.POST("/CreateRole", middlewares.PermissionMiddleware(middlewares.CreateRole), controllers.CreateRole) protected.POST("/UpdateRole", middlewares.PermissionMiddleware(middlewares.UpdateRole), controllers.UpdateRole) protected.POST("/DeleteRole", middlewares.PermissionMiddleware(middlewares.DeleteRole), controllers.DeleteRole) } return r } // configureStaticFileServing 配置静态文件服务 func configureStaticFileServing(r *gin.Engine) { r.Static("/static", "./static") } // configureRootHandler 配置根路径请求处理 func configureRootHandler(r *gin.Engine) { r.GET("/", func(c *gin.Context) { c.File("./static/login/login.html") }) } // HttpController 启动 HTTP 服务器 func HttpController() { r := SetupRouter() ipPort := fmt.Sprintf("%s:%s", global.Cfg.App.Ip, global.Cfg.App.Port) fmt.Println("ipPort:", ipPort) err := r.Run(ipPort) if err != nil { panic(err) } global.Logger.Info("Server is running on port", fmt.Sprintf("%s:%s", global.Cfg.App.Ip, global.Cfg.App.Port)) }