Initial commit: web_hghl_server
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/actressapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func actressRouter(r *gin.Engine) {
|
||||
r.GET("/api/app/actress/list", actressapi.ActressList)
|
||||
r.GET("/api/app/actress/work/list", actressapi.QueryActressWorkList)
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/appinfoapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func appInfoRouter(r *gin.Engine) {
|
||||
r.GET("/api/app/applist/list", appinfoapi.QueryAppList)
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/authapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func authRouter(r *gin.Engine) {
|
||||
// 游客登录(无需 token)
|
||||
login := r.Group("/api/app/login")
|
||||
{
|
||||
login.POST("/guest", authapi.GuestLogin)
|
||||
}
|
||||
|
||||
// 账号注册 / 登录 / 改资料
|
||||
auth := r.Group("/api/app/auth")
|
||||
{
|
||||
auth.POST("/register", authapi.Register)
|
||||
auth.POST("/login", authapi.Login)
|
||||
auth.GET("/getInfo", authapi.GetInfo)
|
||||
auth.POST("/profile", authapi.UpdateProfile)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/commentapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func commentRouter(r *gin.Engine) {
|
||||
r.GET("/api/app/comment/list", commentapi.List)
|
||||
r.POST("/api/app/comment/send", commentapi.SendComment)
|
||||
r.POST("/api/app/comment/like/set", commentapi.SetLike)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
configapi "videoweb/app/api/config"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func configRouter(r *gin.Engine) {
|
||||
r.GET("/api/app/config/footer/info", configapi.FooterInfo)
|
||||
r.GET("/api/app/config/richtext/list", configapi.RichTextList)
|
||||
r.GET("/api/app/content/tag/list", configapi.ContentTagList)
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"time"
|
||||
"videoweb/app/api/dhapi"
|
||||
"videoweb/app/middleware/templatecache"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func dhRouter(r *gin.Engine) {
|
||||
r.GET("/dh/", templatecache.WithCache(time.Minute*1), dhapi.DHApi)
|
||||
r.GET("/businessCooperation/", templatecache.WithCache(time.Minute*1), dhapi.BusinessCooperationApi)
|
||||
r.GET("/servicesProject/", templatecache.WithCache(time.Minute*1), dhapi.ServicesProjectApi)
|
||||
r.GET("/consulting/", templatecache.WithCache(time.Minute*1), dhapi.ConsultingApi)
|
||||
r.GET("/consultinginfo/:id/", templatecache.WithCache(time.Minute*1), dhapi.ConsultingInfoApi)
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
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)
|
||||
}
|
||||
|
||||
// 设置swag 接口信息
|
||||
func setGinSwagger(router *gin.Engine) {
|
||||
// 使用相对路径,无需依赖 Host 配置,本地/测试环境均可直接访问
|
||||
url := ginSwagger.URL("/swagger/doc.json")
|
||||
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/healthapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func healthRouter(r *gin.Engine) {
|
||||
r.POST("/api/app/health/ping", healthapi.HealthCheck)
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"time"
|
||||
"videoweb/app/api/home"
|
||||
"videoweb/app/middleware/templatecache"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func homeRouter(r *gin.Engine) {
|
||||
r.GET("/api/app/home", home.Home)
|
||||
r.GET("/api/app/home/base", templatecache.WithCache(time.Minute*1), home.HomeBase)
|
||||
r.GET("/api/app/home/tags", templatecache.WithCache(time.Minute*1), home.HomeTags)
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"time"
|
||||
"videoweb/app/api/lawandtrust"
|
||||
"videoweb/app/middleware/templatecache"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func lawAndTrustRouter(r *gin.Engine) {
|
||||
r.GET("/useragreement/", templatecache.WithCache(time.Minute*1), lawandtrust.UserAgreementApi)
|
||||
r.GET("/privacyPolicy/", templatecache.WithCache(time.Minute*1), lawandtrust.PrivacyPolicyApi)
|
||||
r.GET("/dmca/", templatecache.WithCache(time.Minute*1), lawandtrust.DmcaApi)
|
||||
r.GET("/statement/", templatecache.WithCache(time.Minute*1), lawandtrust.StatementApi)
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/navigationapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func navigationRouter(r *gin.Engine) {
|
||||
r.GET("/api/app/navigation/header", navigationapi.HeaderNavigation)
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/playletapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func playletRouter(r *gin.Engine) {
|
||||
r.GET("/api/app/playlet/home", playletapi.HomePlaylet)
|
||||
r.GET("/api/app/playlet/home-config/list", playletapi.HomeConfigList)
|
||||
r.GET("/api/app/playlet/topic/detail", playletapi.TopicDetail)
|
||||
r.GET("/api/app/playlet/theme/list", playletapi.ThemeList)
|
||||
r.GET("/api/app/playlet/list", playletapi.List)
|
||||
r.GET("/api/app/playlet/content/list", playletapi.ContentList)
|
||||
r.GET("/api/app/playlet/recommend/list", playletapi.RecommendList)
|
||||
r.GET("/api/app/playlet/guess/list", playletapi.GuessList)
|
||||
r.GET("/api/app/playlet/tag/:id", playletapi.TagList)
|
||||
r.GET("/api/app/playlet/info", playletapi.QueryPlayletInfo)
|
||||
r.GET("/api/app/playlet/chapter/info", playletapi.QueryPlayletChapterInfo)
|
||||
r.POST("/api/app/playlet/like", playletapi.LikePlaylet)
|
||||
r.GET("/api/app/playlet/like/list", playletapi.QueryLikePlayletList)
|
||||
r.POST("/api/app/playlet/favorite", playletapi.FavoritePlaylet)
|
||||
r.GET("/api/app/playlet/favorite/list", playletapi.QueryFavoritePlayletList)
|
||||
r.GET("/api/app/playlet/history/list", playletapi.QueryPlayletHistoryList)
|
||||
r.POST("/api/app/playlet/history", playletapi.ReportPlayletHistory)
|
||||
r.DELETE("/api/app/playlet/history", playletapi.ClearPlayletHistory)
|
||||
r.GET("/api/app/playlet/rank/list", playletapi.QueryPlayletRankList)
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/questionnaireapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func questionnaireRouter(r *gin.Engine) {
|
||||
r.GET("/questionnaire", questionnaireapi.Page)
|
||||
r.POST("/api/app/questionnaire/submit", questionnaireapi.Submit)
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/richtextapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func richTextRouter(router *gin.Engine) {
|
||||
router.GET("/api/app/richtext", richtextapi.GetByTitle)
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"time"
|
||||
"videoweb/app/api/searchapi"
|
||||
"videoweb/app/middleware/templatecache"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func searchRouter(r *gin.Engine) {
|
||||
|
||||
r.GET("/search/", templatecache.WithCache(time.Minute*1), searchapi.SearchApi)
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/uploadapi"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func uploadRouter(r *gin.Engine) {
|
||||
group := r.Group("/api/app/upload")
|
||||
{
|
||||
group.POST("/videoBody", uploadapi.VideoBody)
|
||||
group.POST("/videoOk", uploadapi.VideoOk)
|
||||
group.POST("/image", uploadapi.UploadImage)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"videoweb/app/api/videoapi"
|
||||
"videoweb/app/service/videoser"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
_ "videoweb/app/docs"
|
||||
)
|
||||
|
||||
func videoRouter(r *gin.Engine) {
|
||||
|
||||
r.GET("/api/app/video/list", videoapi.List)
|
||||
r.GET("/api/app/video/category/list", videoapi.CategoryList)
|
||||
r.GET("/api/app/video/recommend/list", videoapi.RecommendList)
|
||||
r.GET("/api/app/video/guess/list", videoapi.GuessList)
|
||||
r.GET("/api/app/video/tag/:id", videoapi.TagList)
|
||||
r.GET("/api/app/video/more", videoapi.QueryVideoMore)
|
||||
r.GET("/api/app/video/info", videoapi.QueryVideoInfo)
|
||||
r.POST("/api/app/video/favorite", videoapi.FavoriteVideo)
|
||||
r.POST("/api/app/video/like", videoapi.LikeVideo)
|
||||
r.GET("/api/app/video/like/list", videoapi.QueryLikeVideoList)
|
||||
r.GET("/api/app/video/favorite/list", videoapi.QueryFavoriteVideoList)
|
||||
r.GET("/api/app/video/history/list", videoapi.QueryVideoHistoryList)
|
||||
r.POST("/api/app/video/history", videoapi.ReportVideoHistory)
|
||||
r.DELETE("/api/app/video/history", videoapi.ClearVideoHistory)
|
||||
r.GET("/api/app/video/rank", videoapi.QueryVideoRank)
|
||||
r.GET("/api/app/video/rank/list", videoapi.QueryVideoRankList)
|
||||
r.GET("/h5/m3u8/*key", videoser.GetM3U8Ex)
|
||||
r.GET("/enkey", videoser.Enkey)
|
||||
r.GET("/newenkey", videoser.NewEnkey)
|
||||
r.GET("/lsjenkey", videoser.LsjEnkey)
|
||||
r.GET("/vtt/*key", videoser.GetVTT)
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user