117 lines
2.6 KiB
Go
117 lines
2.6 KiB
Go
|
package http
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
|
||
|
"go-common/app/interface/live/lottery-interface/internal/conf"
|
||
|
"go-common/app/interface/live/lottery-interface/internal/service"
|
||
|
v1 "go-common/app/interface/live/lottery-interface/internal/service/v1"
|
||
|
risk "go-common/app/service/live/live_riskcontrol/api/grpc/v1"
|
||
|
"go-common/library/log"
|
||
|
bm "go-common/library/net/http/blademaster"
|
||
|
"go-common/library/net/http/blademaster/middleware/auth"
|
||
|
"go-common/library/net/http/blademaster/middleware/verify"
|
||
|
"go-common/library/net/metadata"
|
||
|
|
||
|
"go-common/library/net/http/blademaster/render"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
vfy *verify.Verify
|
||
|
)
|
||
|
|
||
|
// Init init
|
||
|
func Init(c *conf.Config) {
|
||
|
|
||
|
vfy = verify.New(c.Verify)
|
||
|
engine := bm.DefaultServer(c.BM)
|
||
|
route(engine)
|
||
|
if err := engine.Start(); err != nil {
|
||
|
log.Error("bm Start error(%v)", err)
|
||
|
panic(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func route(e *bm.Engine) {
|
||
|
e.Ping(ping)
|
||
|
e.Register(register)
|
||
|
auth := auth.New(&auth.Config{
|
||
|
Identify: conf.Conf.ShortClient,
|
||
|
DisableCSRF: true,
|
||
|
})
|
||
|
|
||
|
g := e.Group("/xlive/lottery-interface")
|
||
|
{
|
||
|
g.POST("/v1/storm/Join", abortGET, auth.Guest, riskControl, v1.StormJoin)
|
||
|
g.GET("/v1/storm/Check", auth.Guest, v1.StormCheck)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func abortGET(c *bm.Context) {
|
||
|
if c.Request.Method == http.MethodGet {
|
||
|
c.Render(http.StatusOK, render.MapJSON{
|
||
|
"code": 0,
|
||
|
"msg": "",
|
||
|
"data": []int{},
|
||
|
})
|
||
|
c.Abort()
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
func riskControl(c *bm.Context) {
|
||
|
mid, ok := c.Get("mid")
|
||
|
if !ok {
|
||
|
c.Render(http.StatusOK, render.MapJSON{
|
||
|
"code": 401,
|
||
|
"msg": "未登录",
|
||
|
"data": []int{},
|
||
|
})
|
||
|
c.Abort()
|
||
|
return
|
||
|
}
|
||
|
midi := mid.(int64)
|
||
|
header := make(map[string]string)
|
||
|
for k := range c.Request.Header {
|
||
|
if v := c.Request.Header[k]; len(v) > 0 {
|
||
|
header[k] = v[0]
|
||
|
}
|
||
|
|
||
|
}
|
||
|
header["Platform"] = c.Request.URL.Query().Get("platform")
|
||
|
resp, err := service.ServiceInstance.IsForbiddenClient.GetForbidden(c, &risk.GetForbiddenReq{
|
||
|
Uid: midi,
|
||
|
Uri: c.Request.URL.Path,
|
||
|
Ip: metadata.String(c, metadata.RemoteIP),
|
||
|
Method: c.Request.Method,
|
||
|
Header: header,
|
||
|
})
|
||
|
if err != nil {
|
||
|
log.Info("#call_IsForbiddenClient_fail %s", err.Error())
|
||
|
c.Render(http.StatusOK, render.MapJSON{
|
||
|
"code": 400,
|
||
|
"msg": "没抢到",
|
||
|
"data": []int{},
|
||
|
})
|
||
|
c.Abort()
|
||
|
return
|
||
|
}
|
||
|
if resp.GetIsForbidden() == risk.GetForbiddenReply_FORBIDDEN {
|
||
|
log.Info("#IsForbidden# mid= %d", midi)
|
||
|
c.Render(http.StatusOK, render.MapJSON{
|
||
|
"code": 400,
|
||
|
"msg": "访问被拒绝",
|
||
|
"data": []int{},
|
||
|
})
|
||
|
c.Abort()
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func ping(ctx *bm.Context) {
|
||
|
ctx.String(http.StatusOK, "PONG")
|
||
|
}
|
||
|
|
||
|
func register(c *bm.Context) {
|
||
|
c.JSON(map[string]interface{}{}, nil)
|
||
|
}
|