481 lines
12 KiB
Go
481 lines
12 KiB
Go
package http
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"mime/multipart"
|
|
"path"
|
|
"strconv"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
"unicode/utf8"
|
|
|
|
"go-common/app/interface/main/feedback/conf"
|
|
"go-common/app/interface/main/feedback/model"
|
|
"go-common/library/ecode"
|
|
"go-common/library/log"
|
|
bm "go-common/library/net/http/blademaster"
|
|
"go-common/library/sync/errgroup"
|
|
)
|
|
|
|
const (
|
|
_timeFromat = "2006-01-02 15:04:05"
|
|
)
|
|
|
|
// addReply
|
|
func addReply(c *bm.Context) {
|
|
header := c.Request.Header
|
|
params := c.Request.Form
|
|
// params
|
|
buvid := header.Get("Buvid")
|
|
system := params.Get("system")
|
|
version := params.Get("version")
|
|
midStr := params.Get("mid")
|
|
content := params.Get("content")
|
|
imgURL := params.Get("img_url")
|
|
logURL := params.Get("log_url")
|
|
device := params.Get("device")
|
|
channel := params.Get("channel")
|
|
entrance := params.Get("entrance")
|
|
netState := params.Get("net_state")
|
|
netOperator := params.Get("net_operator")
|
|
agencyArea := params.Get("agency_area")
|
|
platform := params.Get("platform")
|
|
browser := params.Get("browser")
|
|
qq := params.Get("qq")
|
|
mobiApp := params.Get("mobi_app")
|
|
email := params.Get("email")
|
|
tagStr := params.Get("tag_id")
|
|
// check params
|
|
if buvid == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if system == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if version == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
var (
|
|
mid int64
|
|
err error
|
|
)
|
|
if midStr != "" {
|
|
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
}
|
|
if content == "" && imgURL == "" && logURL == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
tagID, _ := strconv.ParseInt(tagStr, 10, 64)
|
|
c.JSON(feedbackSvr.AddReply(c, mid, tagID, buvid, system, version, mobiApp, filtered(content), imgURL, logURL, device, channel, entrance, netState, netOperator, agencyArea, platform, browser, qq, email, time.Now()))
|
|
}
|
|
|
|
func addWebReply(c *bm.Context) {
|
|
params := c.Request.Form
|
|
// system := params.Get("system")
|
|
version := params.Get("version")
|
|
midStr := params.Get("mid")
|
|
sidStr := params.Get("session_id")
|
|
content := params.Get("content")
|
|
imgURL := params.Get("img_url")
|
|
logURL := params.Get("log_url")
|
|
// device := params.Get("device")
|
|
buvid := params.Get("buvid")
|
|
// channel := params.Get("channel")
|
|
netState := params.Get("net_state")
|
|
netOperator := params.Get("net_operator")
|
|
agencyArea := params.Get("agency_area")
|
|
platform := params.Get("platform")
|
|
browser := params.Get("browser")
|
|
qq := params.Get("qq")
|
|
email := params.Get("email")
|
|
tagStr := params.Get("tag_id")
|
|
aidStr := params.Get("aid")
|
|
var (
|
|
mid int64
|
|
sid int64
|
|
err error
|
|
)
|
|
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if content == "" && imgURL == "" && logURL == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
sid, _ = strconv.ParseInt(sidStr, 10, 64)
|
|
tagID, _ := strconv.ParseInt(tagStr, 10, 64)
|
|
if platform == "" {
|
|
platform = "ugc"
|
|
}
|
|
c.JSON(feedbackSvr.AddWebReply(c, mid, sid, tagID, aidStr, filtered(content), imgURL, netState, netOperator, agencyArea, platform, version, buvid, browser, qq, email, time.Now()))
|
|
}
|
|
|
|
//replys
|
|
func replys(c *bm.Context) {
|
|
header := c.Request.Header
|
|
params := c.Request.Form
|
|
buvid := header.Get("Buvid")
|
|
system := params.Get("system")
|
|
version := params.Get("version")
|
|
midStr := params.Get("mid")
|
|
platform := params.Get("platform")
|
|
mobiApp := params.Get("mobi_app")
|
|
device := params.Get("device")
|
|
pnStr := params.Get("pn")
|
|
psStr := params.Get("ps")
|
|
entrance := params.Get("entrance")
|
|
// check params
|
|
if system == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if version == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
var (
|
|
mid int64
|
|
err error
|
|
)
|
|
if midStr != "" {
|
|
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
}
|
|
if mid == 0 && buvid == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
pn, err := strconv.Atoi(pnStr)
|
|
if err != nil || pn < 1 {
|
|
pn = 1
|
|
}
|
|
ps, err := strconv.Atoi(psStr)
|
|
if err != nil || ps < 1 || ps > conf.Conf.Feedback.ReplysNum {
|
|
ps = conf.Conf.Feedback.ReplysNum
|
|
}
|
|
rs, isEndReply, err := feedbackSvr.Replys(c, buvid, platform, mobiApp, device, system, version, entrance, mid, pn, ps)
|
|
if err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
res := map[string]interface{}{
|
|
"data": rs,
|
|
"is_end_reply": isEndReply,
|
|
}
|
|
c.JSONMap(res, err)
|
|
}
|
|
|
|
func sessions(c *bm.Context) {
|
|
params := c.Request.Form
|
|
tagid := params.Get("tag_id")
|
|
platform := params.Get("platform")
|
|
stateStr := params.Get("state")
|
|
midStr := params.Get("mid")
|
|
start := params.Get("start")
|
|
end := params.Get("end")
|
|
pnStr := params.Get("pn")
|
|
psStr := params.Get("ps")
|
|
mid, err := strconv.ParseInt(midStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
var (
|
|
etime time.Time
|
|
)
|
|
if start == "" {
|
|
start = "00-00-00 00:00:00"
|
|
}
|
|
stime, _ := time.Parse(_timeFromat, start)
|
|
etime, _ = time.Parse(_timeFromat, end)
|
|
if end == "" {
|
|
etime = time.Now()
|
|
}
|
|
pn, err := strconv.Atoi(pnStr)
|
|
if err != nil || pn < 1 {
|
|
pn = 1
|
|
}
|
|
ps, err := strconv.Atoi(psStr)
|
|
if err != nil || ps < 0 || ps > 10 {
|
|
ps = 10
|
|
}
|
|
total, sessions, err := feedbackSvr.Sessions(c, mid, stateStr, tagid, platform, stime, etime, ps, pn)
|
|
if err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
res := map[string]interface{}{
|
|
"data": sessions,
|
|
"total": total,
|
|
}
|
|
c.JSONMap(res, err)
|
|
}
|
|
|
|
func sessionsClose(c *bm.Context) {
|
|
params := c.Request.Form
|
|
sidStr := params.Get("session_id")
|
|
sid, err := strconv.ParseInt(sidStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
c.JSON(nil, feedbackSvr.UpdateSessionState(c, 3, sid))
|
|
}
|
|
|
|
func replyTag(c *bm.Context) {
|
|
params := c.Request.Form
|
|
tp := params.Get("type") // NOTE: player
|
|
platform := params.Get("platform")
|
|
c.JSON(model.Tags[tp][platform], nil)
|
|
}
|
|
|
|
func ugcTag(c *bm.Context) {
|
|
params := c.Request.Form
|
|
tp := params.Get("type")
|
|
platform := params.Get("platform")
|
|
mold, err := strconv.Atoi(tp)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
midStr := params.Get("mid")
|
|
mid, err := strconv.ParseInt(midStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
c.JSON(feedbackSvr.Tags(c, mid, mold, platform))
|
|
}
|
|
|
|
func webReply(c *bm.Context) {
|
|
params := c.Request.Form
|
|
sidStr := params.Get("session_id")
|
|
sid, err := strconv.ParseInt(sidStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
midStr := params.Get("mid")
|
|
mid, err := strconv.ParseInt(midStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
c.JSON(feedbackSvr.WebReplys(c, sid, mid))
|
|
}
|
|
|
|
func filtered(content string) string {
|
|
v := make([]rune, 0, len(content))
|
|
for _, c := range content {
|
|
if c != utf8.RuneError {
|
|
v = append(v, c)
|
|
}
|
|
}
|
|
return string(v)
|
|
}
|
|
|
|
func playerCheck(c *bm.Context) {
|
|
var (
|
|
params = c.Request.Form
|
|
header = c.Request.Header
|
|
platform, ipChangeTimes int
|
|
mid, checkTime, aid, connectSpeed, ioSpeed int64
|
|
region, school string
|
|
err error
|
|
)
|
|
platformStr := params.Get("platform")
|
|
if platform = model.FormPlatForm(platformStr); platform == 0 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if region = params.Get("region"); region == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if school = params.Get("school"); school == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
midStr := params.Get("mid")
|
|
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
checkTimeStr := params.Get("check_time")
|
|
if checkTime, err = strconv.ParseInt(checkTimeStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
aid, _ = strconv.ParseInt(params.Get("aid"), 10, 64)
|
|
ipChangeTimesStr := params.Get("ip_change_times")
|
|
if ipChangeTimes, err = strconv.Atoi(ipChangeTimesStr); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
connectSpeedStr := params.Get("connect_speed")
|
|
if connectSpeed, err = strconv.ParseInt(connectSpeedStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
ioSpeedStr := params.Get("io_speed")
|
|
if ioSpeed, err = strconv.ParseInt(ioSpeedStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
c.JSON(nil, feedbackSvr.PlayerCheck(c, platform, ipChangeTimes, mid, checkTime, aid, connectSpeed, ioSpeed, region, school, header.Get("X-Cache-Server-Addr")))
|
|
}
|
|
|
|
// addReplyH5 add from H5
|
|
func addReplyH5(c *bm.Context) {
|
|
c.Request.ParseMultipartForm(model.MaxUploadSize)
|
|
header := c.Request.Header
|
|
params := c.Request.MultipartForm
|
|
buvid := header.Get("Buvid")
|
|
var system, version, midStr, content, logURL, device, channel, entrance, netState, netOperator, agencyArea, platform, browser, qq, mobiApp, email, tagStr string
|
|
// params
|
|
if len(params.Value["system"]) > 0 {
|
|
system = params.Value["system"][0]
|
|
}
|
|
if len(params.Value["version"]) > 0 {
|
|
version = params.Value["version"][0]
|
|
}
|
|
if len(params.Value["mid"]) > 0 {
|
|
midStr = params.Value["mid"][0]
|
|
}
|
|
if len(params.Value["content"]) > 0 {
|
|
content = params.Value["content"][0]
|
|
}
|
|
if len(params.Value["log_url"]) > 0 {
|
|
logURL = params.Value["log_url"][0]
|
|
}
|
|
if len(params.Value["device"]) > 0 {
|
|
device = params.Value["device"][0]
|
|
}
|
|
if len(params.Value["channel"]) > 0 {
|
|
channel = params.Value["channel"][0]
|
|
}
|
|
if len(params.Value["entrance"]) > 0 {
|
|
entrance = params.Value["entrance"][0]
|
|
}
|
|
if len(params.Value["net_state"]) > 0 {
|
|
netState = params.Value["net_state"][0]
|
|
}
|
|
if len(params.Value["net_operator"]) > 0 {
|
|
netOperator = params.Value["net_operator"][0]
|
|
}
|
|
if len(params.Value["agency_area"]) > 0 {
|
|
agencyArea = params.Value["agency_area"][0]
|
|
}
|
|
if len(params.Value["platform"]) > 0 {
|
|
platform = params.Value["platform"][0]
|
|
}
|
|
if len(params.Value["browser"]) > 0 {
|
|
browser = params.Value["browser"][0]
|
|
}
|
|
if len(params.Value["qq"]) > 0 {
|
|
qq = params.Value["qq"][0]
|
|
}
|
|
if len(params.Value["mobi_app"]) > 0 {
|
|
mobiApp = params.Value["mobi_app"][0]
|
|
}
|
|
if len(params.Value["email"]) > 0 {
|
|
email = params.Value["email"][0]
|
|
}
|
|
if len(params.Value["buvid"]) > 0 && buvid == "" {
|
|
buvid = params.Value["buvid"][0]
|
|
}
|
|
if len(params.Value["tag_id"]) > 0 {
|
|
tagStr = params.Value["tag_id"][0]
|
|
}
|
|
// check params
|
|
if buvid == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if system == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if version == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
var (
|
|
mid int64
|
|
err error
|
|
)
|
|
if midStr != "" {
|
|
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
}
|
|
imgs := c.Request.MultipartForm.File["imgs"]
|
|
var (
|
|
imgURL string
|
|
urls []string
|
|
mutex = sync.Mutex{}
|
|
)
|
|
g, ctx := errgroup.WithContext(c)
|
|
for k, fh := range imgs {
|
|
if k == conf.Conf.Feedback.ImgLimit {
|
|
break
|
|
}
|
|
var (
|
|
img multipart.File
|
|
url string
|
|
fileName string
|
|
fileTpye string
|
|
body []byte
|
|
)
|
|
if img, err = fh.Open(); err != nil {
|
|
log.Error("H5 addReply Open %s failed", fh.Filename)
|
|
err = nil
|
|
continue
|
|
}
|
|
defer img.Close()
|
|
fileName = fh.Filename
|
|
fileTpye = strings.TrimPrefix(path.Ext(fileName), ".")
|
|
if body, err = ioutil.ReadAll(img); err != nil {
|
|
log.Error("H5 addReply ioutil.ReadAll %s failed", fh.Filename)
|
|
err = nil
|
|
continue
|
|
}
|
|
g.Go(func() (err error) {
|
|
if url, err = feedbackSvr.Upload(ctx, "", fileTpye, time.Now(), body); err != nil {
|
|
log.Error("H5 addReply Upload %s failed", fh.Filename)
|
|
err = nil
|
|
return
|
|
}
|
|
mutex.Lock()
|
|
urls = append(urls, url)
|
|
mutex.Unlock()
|
|
return
|
|
})
|
|
}
|
|
if err = g.Wait(); err != nil {
|
|
log.Error("%+v", err)
|
|
return
|
|
}
|
|
if len(urls) > 0 {
|
|
imgURL = strings.Join(urls, ";")
|
|
}
|
|
if content == "" && imgURL == "" && logURL == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
tagID, _ := strconv.ParseInt(tagStr, 10, 64)
|
|
c.JSON(feedbackSvr.AddReply(c, mid, tagID, buvid, system, version, mobiApp, filtered(content), imgURL, logURL, device, channel, entrance, netState, netOperator, agencyArea, platform, browser, qq, email, time.Now()))
|
|
}
|