package router import ( "fmt" "net/http" "videoweb/pub/common/errors" "videoweb/pub/common/log" "videoweb/pub/common/useragent" "videoweb/web/middleware/auth" "videoweb/web/middleware/cors" "videoweb/web/middleware/ipblacklist" "videoweb/web/middleware/limitHandler" "videoweb/web/webg" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" "github.com/DeanThompson/ginpprof" "github.com/gin-gonic/gin" _ "videoweb/web/docs" ) func Init() (engine *gin.Engine) { // 设置启动模式 switch webg.Conf.RunMod { case "dev": gin.SetMode(gin.DebugMode) case "test": gin.SetMode(gin.TestMode) case "prod": gin.SetMode(gin.ReleaseMode) default: gin.SetMode(gin.DebugMode) } // 初始化gin引擎 engine = gin.Default() engine.HandleMethodNotAllowed = true engine.MaxMultipartMemory = 60 << 20 engine.NoMethod(noMethod) engine.NoRoute(noRoute) // 注册中间件 registeMiddleware(engine) wbVideoDataRouter(engine) registerRouter(engine) log.Info("setGinSwaggerxxxxx") if webg.Conf.RunMod != "prod" { log.Info("setGinSwagger") setGinSwagger(engine) log.Info("setGinSwagger end") } // 是否开启监控服务 if webg.Conf.Pprof { ginpprof.Wrap(engine) } return } func noMethod(c *gin.Context) { c.JSON(http.StatusMethodNotAllowed, errors.MakeWithMsg(errors.MethodNotFound, "MethodNotFound")) } func noRoute(c *gin.Context) { c.JSON(http.StatusNotFound, errors.MakeWithMsg(errors.ApiNotFound, "ApiNotFound")) } func registeMiddleware(engine *gin.Engine) { engine.Use(gin.Recovery()) engine.Use(cors.Cors(&cors.Options{ Origin: nil, // "*" Methods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodHead, http.MethodDelete}, AllowedHeaders: []string{"Content-Length", "Content-Type", "Authorization", "X-User-Agent", useragent.SDKCommonHeader}, ExposedHeaders: []string{"Content-Disposition", "Refresh-Authorization"}, OptionsSuccessStatus: http.StatusOK, })) engine.Use(ipblacklist.IpBlackListMiddleware) engine.Use(auth.Auth) engine.Use(limitHandler.LoginLimit) engine.Use(auth.OperateLog) } // 设置swag 接口信息 func setGinSwagger(router *gin.Engine) { url := ginSwagger.URL(fmt.Sprintf("http://%s:%s/swagger/doc.json", webg.Conf.Host, webg.Conf.ListenAddr)) router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url)) } func registerRouter(router *gin.Engine) { rootRouter := router.Group("/api/web") { MainWebRouter(rootRouter) syscfgRouter(rootRouter) fileRouter(rootRouter) videoRouter(rootRouter) translationRouter(rootRouter) richTextContent(rootRouter) commentRouter(rootRouter) videoCollectionRouter(rootRouter) ipBlackRouter(rootRouter) detailNavRouter(rootRouter) mediaResourceRouter(rootRouter) playletRouter(rootRouter) homeBannerRouter(rootRouter) contentTagRouter(rootRouter) slugRouter(rootRouter) hotNavRouter(rootRouter) appSyncRouter(rootRouter) actressRouter(rootRouter) contactusRouter(rootRouter) announcementRouter(rootRouter) userRouter(rootRouter) questionnaireRouter(rootRouter) contentExcelRouter(rootRouter) seopushRouter(rootRouter) } }