You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
7.3 KiB
258 lines
7.3 KiB
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) |
|
}
|
|
|