259 lines
7.3 KiB
Go
259 lines
7.3 KiB
Go
package http
|
|
|
|
import (
|
|
"fmt"
|
|
"go-common/library/ecode"
|
|
"go-common/library/net/http/blademaster/middleware/antispam"
|
|
"net/http"
|
|
|
|
"go-common/app/interface/bbq/app-bbq/api/http/v1"
|
|
"go-common/app/interface/bbq/app-bbq/conf"
|
|
"go-common/app/interface/bbq/app-bbq/service"
|
|
xauth "go-common/app/interface/bbq/common/auth"
|
|
chttp "go-common/app/interface/bbq/common/http"
|
|
"go-common/library/log"
|
|
bm "go-common/library/net/http/blademaster"
|
|
"go-common/library/net/http/blademaster/middleware/verify"
|
|
"go-common/library/net/trace"
|
|
)
|
|
|
|
var (
|
|
srv *service.Service
|
|
vfy *verify.Verify
|
|
authSrv *xauth.BannedAuth
|
|
cfg *conf.Config
|
|
logger *chttp.UILog
|
|
likeAntiSpam *antispam.Antispam
|
|
relationAntiSpam *antispam.Antispam
|
|
replyAntiSpam *antispam.Antispam
|
|
uploadAntiSpam *antispam.Antispam
|
|
reportAntiSpam *antispam.Antispam
|
|
)
|
|
|
|
// Init init
|
|
func Init(c *conf.Config) {
|
|
cfg = c
|
|
initAntiSpam(c)
|
|
logger = chttp.New(c.Infoc)
|
|
srv = service.New(c)
|
|
vfy = verify.New(c.Verify)
|
|
authSrv = xauth.NewBannedAuth(c.Auth, c.MySQL)
|
|
engine := bm.DefaultServer(c.BM)
|
|
route(engine)
|
|
if err := engine.Start(); err != nil {
|
|
log.Error("bm Start error(%v)", err)
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func initAntiSpam(c *conf.Config) {
|
|
var antiConfig *antispam.Config
|
|
var exists bool
|
|
if antiConfig, exists = c.AntiSpam["like"]; !exists {
|
|
panic("lose like anti_spam config")
|
|
}
|
|
relationAntiSpam = antispam.New(antiConfig)
|
|
if antiConfig, exists = c.AntiSpam["relation"]; !exists {
|
|
panic("lose relation anti_spam config")
|
|
}
|
|
likeAntiSpam = antispam.New(antiConfig)
|
|
if antiConfig, exists = c.AntiSpam["reply"]; !exists {
|
|
panic("lose reply anti_spam config")
|
|
}
|
|
replyAntiSpam = antispam.New(antiConfig)
|
|
if antiConfig, exists = c.AntiSpam["upload"]; !exists {
|
|
panic("lose upload anti_spam config")
|
|
}
|
|
uploadAntiSpam = antispam.New(antiConfig)
|
|
|
|
if antiConfig, exists = c.AntiSpam["report"]; !exists {
|
|
panic("lose report anti_spam config")
|
|
}
|
|
reportAntiSpam = antispam.New(antiConfig)
|
|
}
|
|
|
|
func route(e *bm.Engine) {
|
|
e.Ping(ping)
|
|
e.Register(register)
|
|
g := e.Group("/bbq/app-bbq", wrapBBQ)
|
|
{
|
|
//用户登录
|
|
g.GET("/user/login", authSrv.User, login)
|
|
g.POST("/user/logout", authSrv.Guest, bm.Mobile(), pushLogout)
|
|
|
|
//用户相关
|
|
g.GET("/user/base", authSrv.User, userBase)
|
|
// 所有字段都需要携带修改
|
|
g.POST("/user/base/edit", authSrv.User, userBaseEdit)
|
|
|
|
g.POST("/user/like/add", authSrv.User, likeAntiSpam.ServeHTTP, addUserLike)
|
|
g.POST("/user/like/cancel", authSrv.User, likeAntiSpam.ServeHTTP, cancelUserLike)
|
|
g.GET("/user/like/list", userLikeList)
|
|
g.POST("/user/unlike", authSrv.User, likeAntiSpam.ServeHTTP, userUnLike)
|
|
g.GET("/user/follow/list", authSrv.Guest, userFollowList)
|
|
g.GET("/user/fan/list", authSrv.Guest, userFanList)
|
|
g.GET("/user/black/list", authSrv.User, userBlackList)
|
|
g.POST("/user/relation/modify", authSrv.User, relationAntiSpam.ServeHTTP, userRelationModify)
|
|
|
|
g.GET("/search/hot/word", hotWord)
|
|
|
|
// feed关注列表页
|
|
g.GET("/feed/list", authSrv.User, feedList)
|
|
// feed关注页红点
|
|
g.GET("/feed/update_num", authSrv.User, feedUpdateNum)
|
|
// space发布列表页
|
|
g.GET("/space/sv/list", authSrv.Guest, spaceSvList)
|
|
// space 用户详情况主/客
|
|
g.GET("/space/user/profile", authSrv.Guest, spaceUserProfile)
|
|
// 详情页up主发布列表
|
|
g.GET("/detail/sv/list", authSrv.Guest, detailSvList)
|
|
|
|
//视频相关
|
|
g.GET("/sv/list", authSrv.Guest, bm.Mobile(), svList)
|
|
g.GET("/sv/playlist", authSrv.Guest, bm.Mobile(), svPlayList) // playurl过期时候请求
|
|
g.GET("/sv/detail", authSrv.Guest, svDetail)
|
|
g.GET("/sv/stat", authSrv.Guest, bm.Mobile(), svStatistics)
|
|
g.GET("/sv/relate", authSrv.Guest, svRelList)
|
|
g.POST("/sv/del", authSrv.User, svDel)
|
|
//搜索相关
|
|
g.GET("/search/sv", authSrv.Guest, videoSearch)
|
|
g.GET("/search/user", authSrv.Guest, userSearch)
|
|
g.GET("/search/sug", authSrv.Guest, sug)
|
|
g.GET("/search/topic", authSrv.Guest, topicSearch)
|
|
//发现页
|
|
g.GET("/discovery", authSrv.Guest, discoveryList)
|
|
//话题详情页
|
|
g.GET("/topic/detail", authSrv.Guest, topicDetail)
|
|
|
|
// 用户location
|
|
g.GET("/location/all", authSrv.User, locationAll)
|
|
g.GET("/location", authSrv.User, location)
|
|
|
|
//图片上传
|
|
g.POST("/img/upload", authSrv.User, uploadAntiSpam.ServeHTTP, upload)
|
|
|
|
// 客户端分享链接
|
|
g.GET("/share", authSrv.Guest, shareURL)
|
|
g.GET("/share/callback", authSrv.Guest, shareCallback)
|
|
|
|
// 邀请函接口(内测版,公测删除)内测取消
|
|
// g.GET("/invitation/download", invitationDownload)
|
|
|
|
// App全局设置接口
|
|
g.GET("/setting", appSetting)
|
|
g.GET("/package", appPackage)
|
|
}
|
|
//评论组
|
|
r := e.Group("/bbq/app-bbq/reply", wrapBBQ, commentInit)
|
|
{
|
|
//评论相关
|
|
r.GET("/cursor", commentCloseRead, authSrv.Guest, commentCursor)
|
|
r.POST("/add", commentCloseWrite, authSrv.User, phoneCheck, replyAntiSpam.ServeHTTP, commentAdd)
|
|
r.POST("/action", commentCloseWrite, authSrv.User, likeAntiSpam.ServeHTTP, commentLike)
|
|
r.GET("/", commentCloseRead, authSrv.Guest, commentList)
|
|
r.GET("/reply/cursor", commentCloseRead, authSrv.Guest, commentSubCursor)
|
|
}
|
|
|
|
// 举报接口
|
|
report := e.Group("/bbq/app-bbq/report", wrapBBQ)
|
|
{
|
|
report.GET("/config", authSrv.Guest, bm.Mobile(), reportConfig)
|
|
report.POST("/report", authSrv.Guest, bm.Mobile(), reportAntiSpam.ServeHTTP, reportReport)
|
|
}
|
|
|
|
// 播放数据收集
|
|
d := e.Group("/bbq/app-bbq/data", wrapBBQ)
|
|
{
|
|
d.GET("/collect", authSrv.Guest, bm.Mobile(), videoPlay)
|
|
}
|
|
|
|
// 通知中心,需要登录
|
|
p := e.Group("/bbq/app-bbq/notice/center", authSrv.User, wrapBBQ)
|
|
{
|
|
p.GET("/num", noticeNum)
|
|
p.GET("/overview", noticeOverview)
|
|
p.GET("/list", noticeList)
|
|
}
|
|
|
|
// 推送相关
|
|
push := e.Group("/bbq/app-bbq/push", wrapBBQ, authSrv.Guest, bm.Mobile())
|
|
{
|
|
push.POST("/register", pushRegister)
|
|
push.GET("/callback", pushCallback)
|
|
}
|
|
|
|
//视频上传相关
|
|
upload := e.Group("/bbq/app-bbq/upload/sv", authSrv.Guest)
|
|
{
|
|
upload.POST("/preupload", perUpload)
|
|
upload.POST("/callback", callBack)
|
|
upload.GET("/check", authSrv.User, uploadCheck)
|
|
upload.POST("/homeimg", authSrv.User, homeimg)
|
|
}
|
|
}
|
|
|
|
func commentCloseWrite(ctx *bm.Context) {
|
|
if conf.Conf.Comment.CloseWrite {
|
|
ctx.JSON(struct{}{}, ecode.OK)
|
|
ctx.Abort()
|
|
}
|
|
}
|
|
func commentCloseRead(ctx *bm.Context) {
|
|
if conf.Conf.Comment.CloseRead {
|
|
ctx.JSON(struct{}{}, ecode.OK)
|
|
ctx.Abort()
|
|
}
|
|
}
|
|
|
|
//wrapRes 为返回头添加BBQ自定义字段
|
|
func wrapBBQ(ctx *bm.Context) {
|
|
chttp.WrapHeader(ctx)
|
|
|
|
// Base params
|
|
req := ctx.Request
|
|
base := new(v1.Base)
|
|
ctx.Bind(base)
|
|
base.BUVID = req.Header.Get("Buvid")
|
|
ctx.Set("BBQBase", base)
|
|
|
|
// QueryID
|
|
qid := base.QueryID
|
|
if base.QueryID == "" {
|
|
tracer, _ := trace.FromContext(ctx.Context)
|
|
qid = fmt.Sprintf("%s", tracer)
|
|
}
|
|
ctx.Set("QueryID", qid)
|
|
}
|
|
|
|
// phoneCheck 进行手机校验
|
|
func phoneCheck(ctx *bm.Context) {
|
|
midValue, exists := ctx.Get("mid")
|
|
if !exists {
|
|
ctx.JSON(nil, ecode.NoLogin)
|
|
ctx.Abort()
|
|
return
|
|
}
|
|
mid := midValue.(int64)
|
|
err := srv.PhoneCheck(ctx, mid)
|
|
if err != nil {
|
|
ctx.JSON(nil, err)
|
|
ctx.Abort()
|
|
return
|
|
}
|
|
}
|
|
|
|
func ping(c *bm.Context) {
|
|
if err := srv.Ping(c); err != nil {
|
|
log.Error("ping error(%v)", err)
|
|
c.AbortWithStatus(http.StatusServiceUnavailable)
|
|
}
|
|
}
|
|
|
|
func register(c *bm.Context) {
|
|
c.JSON(map[string]interface{}{}, nil)
|
|
}
|
|
|
|
func uiLog(ctx *bm.Context, action int, ext interface{}) {
|
|
logger.Infoc(ctx, action, ext)
|
|
}
|