Files
web_hgdjb_server/app/router/gin.go
T
rootandClaude Opus 4.7 cd8dea8787 同步 web_hga 的五项改造
- 移除 买点 (user acquisition tracking) 子系统:dataReport SDK、eventmod
  事件模型、reportdata 定时上报 job、reportser/srv_report 包装层,以及业务
  侧的 ~20 处 Report* 调用点;去掉 proto.ConfigInfo 的 ReportSDKConfig
  字段、DataReport yaml 配置块和 pubdef.TrackerAppId。
- 广告获取改走 versionUrl /api/stat/advitise/v2/get(appId=12),移除
  adcenter(Jt) 调用;新增 POST /api/app/ads/click 异步上报;
  proto.AdvitiseData 别名 proxy.AdvitiseData,AList/BList 改名
  AppInfoAList/AppInfoBList。
- web 后台登录取消谷歌验证码(srv_mwacc.AccLogin 去掉 code 参数),密码
  正确即发放 token。
- app 端取消注册/登录/找回密码/游客登录接口及密码、token 相关代码;鉴权
  中间件按 X-User-Agent 中的 devID 识别用户,首次访问自动建号,Redis 缓存
  10 分钟;修改资料不再支持改密码。
- app m3u8 ticket 校验失败不再降级到 fallback 路径,仍按原 m3u8Name 返回。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-11-07 11:22:25 +08:00

136 lines
3.3 KiB
Go

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",
"sid",
"device_brand", "device-brand",
"device_model", "device-model",
"system_name", "system-name",
"system_version", "system-version",
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) {
videoRouter(r)
playletRouter(r)
playletThemeRouter(r)
commentRouter(r)
coinRouter(r)
feedbackRouter(r)
contactUsRouter(r)
userCenterRouter(r)
authRouter(r)
rechargeRouter(r)
rechargePackageRouter(r)
uploadRouter(r)
healthRouter(r)
configRouter(r)
appInfoRouter(r)
translationRouter(r)
navigationRouter(r)
statcenterRouter(r)
sitemapRouter(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))
}