package router import ( "fmt" "net/http" "strings" "time" "videoweb/app/api/home" "videoweb/app/appg" "videoweb/app/middleware/auth" "videoweb/app/middleware/cors" "videoweb/app/middleware/ipblacklist" "videoweb/app/middleware/ipstat" "videoweb/app/middleware/reptilerecord" "videoweb/app/middleware/templatecache" "videoweb/app/middleware/visit" "videoweb/pub/common" "videoweb/pub/common/enum/consts" "videoweb/pub/common/log" "videoweb/pub/common/useragent" "github.com/DeanThompson/ginpprof" "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" _ "videoweb/app/docs" ) func Init() (engine *gin.Engine) { // 设置启动模式 switch appg.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() if appg.Conf.TrustedProxies != "" { proxies := strings.Split(appg.Conf.TrustedProxies, ",") for i, p := range proxies { proxies[i] = strings.TrimSpace(p) } _ = engine.SetTrustedProxies(proxies) log.Infof("SetTrustedProxies: %v", proxies) } else { _ = engine.SetTrustedProxies([]string{}) log.Infof("SetTrustedProxies: none (direct TCP IP mode)") } engine.HandleMethodNotAllowed = true engine.MaxMultipartMemory = 60 << 20 common.InitGinSecret(appg.Conf.ResKey, consts.RunMod(appg.Conf.RunMod)) // 注册中间件 registeMiddleware(engine) // 注册路由 registeRouter(engine) if appg.Conf.RunMod != "prod" { setGinSwagger(engine) } // 是否开启监控服务 if appg.Conf.Pprof { ginpprof.Wrap(engine) } return } func registeMiddleware(engine *gin.Engine) { engine.Use( // gin.Recovery(), 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", "device", "api_version", "x-api-key", "channel", "sid", "device_brand", "device-brand", "device_model", "device-model", "system_name", "system-name", "system_version", "system-version", }, ExposedHeaders: []string{"Content-Disposition"}, OptionsSuccessStatus: http.StatusOK, }), // 必须是此顺序, happens before原则 //monitor.Check, ipblacklist.IpBlackListMiddleware, reptilerecord.ReptileRecord, ipstat.IpStatMiddleware, useragent.UserAgent, auth.Auth, // calllimit.Check, visit.Visit, ) } // 注册路由 func registeRouter(r *gin.Engine) { videoRouter(r) playletRouter(r) playletThemeRouter(r) commentRouter(r) coinRouter(r) feedbackRouter(r) contactUsRouter(r) authRouter(r) rechargeRouter(r) rechargePackageRouter(r) uploadRouter(r) healthRouter(r) configRouter(r) appInfoRouter(r) translationRouter(r) statcenterRouter(r) adsRouter(r) r.GET("/notpage", templatecache.WithCache(time.Minute*1), home.PageNotFound) } // 设置swag 接口信息 func setGinSwagger(router *gin.Engine) { url := ginSwagger.URL(fmt.Sprintf("%s/swagger/doc.json", appg.Conf.Host)) router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url)) }