Files
web_hghl_server/app/router/gin.go
T

126 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package router
import (
"log"
"net/http"
"strings"
"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/service/displaycount"
"videoweb/pub/common"
"videoweb/pub/common/enum/consts"
"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()
engine.HandleMethodNotAllowed = true
engine.MaxMultipartMemory = 60 << 20
// 从配置文件读取可信代理列表(字符串,多个 IP 用逗号分隔)
// 配置了则只信任这些 IP 的 X-Forwarded-For,未配置则不信任任何代理(直接用 TCP 连接 IP)
// 配置示例(app.yaml)
// trustedProxies: "10.0.0.1"
// trustedProxies: "10.0.0.1,10.0.0.2"
if appg.Conf.TrustedProxies != "" {
proxies := strings.Split(appg.Conf.TrustedProxies, ",")
for i, p := range proxies {
proxies[i] = strings.TrimSpace(p)
}
_ = engine.SetTrustedProxies(proxies)
log.Printf("SetTrustedProxies: %v", proxies)
} else {
_ = engine.SetTrustedProxies([]string{})
log.Printf("SetTrustedProxies: none (direct TCP IP mode)")
}
common.InitGinSecret(appg.Conf.ResKey, consts.RunMod(appg.Conf.RunMod))
common.SetResponseDataTransform(displaycount.Transform)
// 注册中间件
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", useragent.SDKCommonHeader},
ExposedHeaders: []string{"Content-Disposition", "Refresh-Authorization"},
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) {
homeRouter(r)
videoRouter(r)
commentRouter(r)
searchRouter(r)
dhRouter(r)
lawAndTrustRouter(r)
actressRouter(r)
configRouter(r)
navigationRouter(r)
playletRouter(r)
authRouter(r)
uploadRouter(r)
questionnaireRouter(r)
appInfoRouter(r)
healthRouter(r)
richTextRouter(r)
adsRouter(r)
}
// 设置swag 接口信息
func setGinSwagger(router *gin.Engine) {
// 使用相对路径,无需依赖 Host 配置,本地/测试环境均可直接访问
url := ginSwagger.URL("/swagger/doc.json")
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
}