Create & Init Project...
This commit is contained in:
42
app/interface/bbq/bullet/internal/server/http/BUILD
Normal file
42
app/interface/bbq/bullet/internal/server/http/BUILD
Normal file
@ -0,0 +1,42 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["http.go"],
|
||||
importpath = "go-common/app/interface/bbq/bullet/internal/server/http",
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//app/interface/bbq/bullet/api:go_default_library",
|
||||
"//app/interface/bbq/bullet/internal/conf:go_default_library",
|
||||
"//app/interface/bbq/bullet/internal/model:go_default_library",
|
||||
"//app/interface/bbq/bullet/internal/service:go_default_library",
|
||||
"//app/interface/bbq/common/auth:go_default_library",
|
||||
"//app/interface/bbq/common/http:go_default_library",
|
||||
"//library/ecode:go_default_library",
|
||||
"//library/log:go_default_library",
|
||||
"//library/net/http/blademaster:go_default_library",
|
||||
"//library/net/http/blademaster/middleware/antispam:go_default_library",
|
||||
"//library/net/http/blademaster/middleware/verify:go_default_library",
|
||||
"@io_bazel_rules_go//proto/wkt:empty_go_proto",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
179
app/interface/bbq/bullet/internal/server/http/http.go
Normal file
179
app/interface/bbq/bullet/internal/server/http/http.go
Normal file
@ -0,0 +1,179 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"go-common/app/interface/bbq/bullet/api"
|
||||
"go-common/app/interface/bbq/bullet/internal/conf"
|
||||
"go-common/app/interface/bbq/bullet/internal/model"
|
||||
"go-common/app/interface/bbq/bullet/internal/service"
|
||||
xauth "go-common/app/interface/bbq/common/auth"
|
||||
chttp "go-common/app/interface/bbq/common/http"
|
||||
"go-common/library/ecode"
|
||||
"go-common/library/log"
|
||||
bm "go-common/library/net/http/blademaster"
|
||||
antispam "go-common/library/net/http/blademaster/middleware/antispam"
|
||||
"go-common/library/net/http/blademaster/middleware/verify"
|
||||
|
||||
"github.com/golang/protobuf/ptypes/empty"
|
||||
)
|
||||
|
||||
var (
|
||||
// TODO:verify
|
||||
vfy *verify.Verify
|
||||
svc *service.Service
|
||||
authSrv *xauth.BannedAuth
|
||||
logger *chttp.UILog
|
||||
bulletAntiSpam *antispam.Antispam
|
||||
)
|
||||
|
||||
// Init init
|
||||
func Init(c *conf.Config, s *service.Service) {
|
||||
svc = s
|
||||
initAntiSpam(c)
|
||||
vfy = verify.New(c.Verify)
|
||||
authSrv = xauth.NewBannedAuth(c.Auth, c.OnlineMySQL)
|
||||
engine := bm.DefaultServer(c.BM)
|
||||
route(engine)
|
||||
if err := engine.Start(); err != nil {
|
||||
log.Error("bm Start error(%v)", err)
|
||||
panic(err)
|
||||
}
|
||||
logger = chttp.New(c.Infoc)
|
||||
}
|
||||
|
||||
func initAntiSpam(c *conf.Config) {
|
||||
var antiConfig *antispam.Config
|
||||
var exists bool
|
||||
if antiConfig, exists = c.AntiSpam["bullet"]; !exists {
|
||||
panic("lose bullet anti_spam config")
|
||||
}
|
||||
bulletAntiSpam = antispam.New(antiConfig)
|
||||
}
|
||||
|
||||
func route(e *bm.Engine) {
|
||||
e.Ping(ping)
|
||||
e.Register(register)
|
||||
g := e.Group("/bbq/bullet", wrapBBQ)
|
||||
{
|
||||
g.GET("/content/list", authSrv.Guest, contentList)
|
||||
g.GET("/content/get", authSrv.Guest, contentGet)
|
||||
g.POST("/content/post", authSrv.User, phoneCheck, bulletAntiSpam.ServeHTTP, contentPost)
|
||||
}
|
||||
}
|
||||
|
||||
func ping(ctx *bm.Context) {
|
||||
if err := svc.Ping(ctx); err != nil {
|
||||
log.Error("ping error(%v)", err)
|
||||
ctx.AbortWithStatus(http.StatusServiceUnavailable)
|
||||
}
|
||||
}
|
||||
|
||||
func register(c *bm.Context) {
|
||||
c.JSON(map[string]interface{}{}, nil)
|
||||
}
|
||||
|
||||
//wrapRes 为返回头添加BBQ自定义字段
|
||||
func wrapBBQ(ctx *bm.Context) {
|
||||
chttp.WrapHeader(ctx)
|
||||
}
|
||||
|
||||
func uiLog(ctx *bm.Context, action int, ext interface{}) {
|
||||
logger.Infoc(ctx, action, ext)
|
||||
}
|
||||
|
||||
func contentGet(c *bm.Context) {
|
||||
if conf.Conf.BulletConfig.CloseRead {
|
||||
c.JSON([]*api.Bullet{}, nil)
|
||||
return
|
||||
}
|
||||
|
||||
arg := &api.ListBulletReq{}
|
||||
if err := c.Bind(arg); err != nil {
|
||||
return
|
||||
}
|
||||
if arg.Oid == 0 {
|
||||
res := new([]interface{})
|
||||
c.JSON(res, ecode.DanmuGetErr)
|
||||
return
|
||||
}
|
||||
|
||||
if midValue, exists := c.Get("mid"); exists {
|
||||
arg.Mid = midValue.(int64)
|
||||
}
|
||||
|
||||
c.JSON(svc.ContentGet(c, arg))
|
||||
}
|
||||
|
||||
func contentList(c *bm.Context) {
|
||||
if conf.Conf.BulletConfig.CloseRead {
|
||||
c.JSON(api.ListBulletReply{HasMore: false}, nil)
|
||||
return
|
||||
}
|
||||
|
||||
arg := &api.ListBulletReq{}
|
||||
if err := c.Bind(arg); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if arg.Oid == 0 {
|
||||
res := new([]interface{})
|
||||
c.JSON(res, ecode.DanmuGetErr)
|
||||
return
|
||||
}
|
||||
|
||||
if midValue, exists := c.Get("mid"); exists {
|
||||
arg.Mid = midValue.(int64)
|
||||
}
|
||||
|
||||
c.JSON(svc.ContentList(c, arg))
|
||||
}
|
||||
|
||||
func contentPost(c *bm.Context) {
|
||||
if conf.Conf.BulletConfig.CloseWrite {
|
||||
c.JSON(struct{}{}, nil)
|
||||
return
|
||||
}
|
||||
|
||||
arg := &api.Bullet{}
|
||||
if err := c.Bind(arg); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 这里客户端是有限制的,所以这里就不单独给出toast了
|
||||
if arg.Oid == 0 || arg.Content == "" || strings.Count(arg.Content, "") > model.BulletMaxLen {
|
||||
log.Warnw(c, "log", "post error", "req", arg, "content_len", strings.Count(arg.Content, ""))
|
||||
c.JSON(nil, ecode.DanmuPostErr)
|
||||
return
|
||||
}
|
||||
|
||||
if midValue, exists := c.Get("mid"); exists {
|
||||
arg.Mid = midValue.(int64)
|
||||
}
|
||||
dmid, err := svc.ContentPost(c, arg)
|
||||
c.JSON(new(empty.Empty), err)
|
||||
|
||||
uiLog(c, model.ActionDanmaku, struct {
|
||||
DMID int64 `json:"dmid"`
|
||||
}{
|
||||
DMID: dmid,
|
||||
})
|
||||
}
|
||||
|
||||
// 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 := svc.PhoneCheck(ctx, mid)
|
||||
if err != nil {
|
||||
ctx.JSON(nil, err)
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user