Files
huangguo_server/app/router/base.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

200 lines
6.4 KiB
Go

package router
import (
"91porn-server/app/api/sharectrl"
"91porn-server/app/api/updownctrl"
"91porn-server/app/appg"
"91porn-server/app/middleware/authuser"
"91porn-server/app/middleware/datacenter"
"91porn-server/app/middleware/ip"
"91porn-server/app/middleware/requestEncrypt"
"91porn-server/app/middleware/verfyparam"
"91porn-server/app/middleware/visitlog"
"91porn-server/common"
"91porn-server/common/constant"
"91porn-server/common/stderr"
"91porn-server/common/tg"
"91porn-server/middleware/cors"
"91porn-server/middleware/ginzap"
"91porn-server/middleware/requestid"
"91porn-server/middleware/ua"
"fmt"
"net/http"
"runtime/debug"
"time"
"github.com/didip/tollbooth"
"github.com/didip/tollbooth/limiter"
"github.com/gin-contrib/pprof"
"github.com/gin-gonic/gin"
)
var Lmt, RechargeLmt, GlobalLmt *limiter.Limiter
// SetupGin 初始化gin router
func SetupGin() *gin.Engine {
if appg.Conf.Base.Env == constant.ProdEnv {
gin.SetMode(gin.ReleaseMode)
} else {
gin.SetMode(gin.DebugMode)
}
router := gin.New()
router.ForwardedByClientIP = true
if appg.Conf.Base.PProf {
pprof.Register(router) // 性能分析工具
}
router.Use(
ginzap.Logger([]string{constant.CtxUserID, constant.CtxIP}),
ginzap.Recovery(true, func(err interface{}) {
var stack string
if !stderr.IsContain(err, stderr.WriteBrokenError) {
stack = string(debug.Stack())
}
common.Go(func() {
_ = appg.Bot.Send(tg.Msg{ChatId: tg.ChatIdServerTeam, Text: fmt.Sprintf("[App-Server] panic:%+v, stack:%s", err, stack)})
})
}))
router.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", "User-Agent", "X-Authorization", "X-Request-ID", "temp", "log-type"},
ExposedHeaders: []string{"Content-Disposition", "Refresh-Authorization", "Cur-Ver", "X-Request-ID"},
OptionsSuccessStatus: http.StatusOK,
}))
router.Use(ua.UAer, ip.RealIP, requestid.New())
router.HandleMethodNotAllowed = true
router.NoMethod(func(c *gin.Context) {
c.JSON(http.StatusMethodNotAllowed, gin.H{"result": false, "error": "Method Not Allowed"})
})
router.NoRoute(func(c *gin.Context) {
c.JSON(http.StatusNotFound, gin.H{"result": false, "error": "Endpoint Not Found"})
})
Init()
registerRouter(router)
return router
}
func registerRouter(router *gin.Engine) {
//root Router 根组
rootRouter := router.Group("/api/app",
verfyparam.CheckReplayAttackRequest(),
verfyparam.VerifyReplayAttackRequest(appg.Conf.Base.ReplayAttack),
requestEncrypt.ReqDecode,
authuser.Auth,
visitlog.Log,
datacenter.OnlineStat,
//ipblock.IPBlock(constant.GlobalBlock),
//limitHandler.LimitHandler(GlobalLmt),
)
{
updownloadRouter(rootRouter)
walletRouter(rootRouter)
shareRouter(rootRouter)
vidRouter(rootRouter)
recommendRouter(rootRouter)
userRouter(rootRouter)
tagRouter(rootRouter)
searchRouter(rootRouter)
mineRouter(rootRouter)
notificationRoute(rootRouter)
rankRouter(rootRouter)
toneRouter(rootRouter)
wonderRouter(rootRouter)
vipRouter(rootRouter)
productRouter(rootRouter)
paymentGuideRouter(rootRouter)
sceneBannerRouter(rootRouter)
analyticsRouter(rootRouter)
imdRouter(rootRouter)
rchgRouter(rootRouter)
versionRouter(rootRouter)
pingRouter(rootRouter)
withdrawRouter(rootRouter)
annouRouter(rootRouter)
staticRouter(rootRouter)
txnactRouter(rootRouter)
adsRouter(rootRouter)
infmtRouter(rootRouter)
hotspotRouter(rootRouter)
exchangeRouter(rootRouter)
newActivityRoute(rootRouter)
userInviteRouter(rootRouter)
taskRouter(rootRouter)
backpackRouter(rootRouter)
moduleRouter(rootRouter)
contentMarkerRouter(rootRouter)
smsRoute(rootRouter)
publishRouter(rootRouter)
videoActivityRouter(rootRouter)
aiUndressRouter(rootRouter)
thumbsRouter(rootRouter)
officialRouter(rootRouter)
commentRouter(rootRouter)
followRouter(rootRouter)
proxyRouter(rootRouter)
aiChangeFaceRouter(rootRouter)
messageRouter(rootRouter)
aiModRouter(rootRouter)
videoGoldCoinRouter(rootRouter)
recreationRouter(rootRouter)
advanceConfigRouter(rootRouter)
couponRouter(rootRouter)
integralRouter(rootRouter)
signRecordRouter(rootRouter)
aiMateRouter(rootRouter)
aiMateV2Router(rootRouter)
storeWalletRouter(rootRouter)
mediaRouter(rootRouter)
dramaRouter(rootRouter)
mediaBookshelfRouter(rootRouter)
mediaContentRouter(rootRouter)
mediaTagRouter(rootRouter)
imGroupRouter(rootRouter)
imMessageRouter(rootRouter)
nakedChatRouter(rootRouter)
nakedChatOrderRouter(rootRouter)
aiTextToImageRouter(rootRouter)
aiImageToVideoRouter(rootRouter)
aiTemplateModuleRouter(rootRouter)
aiPlazaRouter(rootRouter)
aiTextToNovelRouter(rootRouter)
checkinRouter(rootRouter)
customerApiRouter(rootRouter)
healthCheckRouter(rootRouter)
}
thirdRouter := router.Group("/3rd")
{
defrayRouter(thirdRouter)
}
{
shareRouter := router.Group("/share")
shareRouter.POST("/info", sharectrl.Info)
shareRouter.GET("/m3u8/*source", updownctrl.DownloadM3u8H5)
}
// 客服系统回调相关
customerRouter(router)
// 活动服回调相关
activityCallbackRouter(router)
// 品牌站相关接口
newOfficialWebsiteRoute(router)
}
func Init() {
GlobalLmt = tollbooth.NewLimiter(float64(appg.Conf.Limit.GlobalLimit), &limiter.ExpirableOptions{DefaultExpirationTTL: time.Second})
Lmt = tollbooth.NewLimiter(float64(appg.Conf.Limit.CommentLimit), &limiter.ExpirableOptions{DefaultExpirationTTL: time.Second})
RechargeLmt = tollbooth.NewLimiter(float64(appg.Conf.Limit.RechargeLimit), &limiter.ExpirableOptions{DefaultExpirationTTL: time.Minute})
Lmt.SetIPLookups([]string{"RemoteAddr", "X-Forwarded-For", "X-Real-IP"})
Lmt.SetMethods([]string{"GET", "POST"})
Lmt.SetMessageContentType("application/json; charset=utf-8")
Lmt.SetStatusCode(http.StatusNoContent)
GlobalLmt.SetIPLookups([]string{"RemoteAddr", "X-Forwarded-For", "X-Real-IP"})
GlobalLmt.SetMethods([]string{"GET", "POST"})
GlobalLmt.SetMessageContentType("application/json; charset=utf-8")
GlobalLmt.SetStatusCode(http.StatusNoContent)
RechargeLmt.SetIPLookups([]string{"RemoteAddr", "X-Forwarded-For", "X-Real-IP"})
RechargeLmt.SetMethods([]string{"POST"})
RechargeLmt.SetMessageContentType("application/json; charset=utf-8")
RechargeLmt.SetStatusCode(http.StatusNoContent)
}