@@ -0,0 +1,199 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user