126 lines
3.3 KiB
Go
126 lines
3.3 KiB
Go
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))
|
||
}
|