go-common/app/interface/bbq/app-bbq/server/http/http.go
2019-04-22 18:49:16 +08:00

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)
}