231 lines
5.4 KiB
Go
231 lines
5.4 KiB
Go
|
package http
|
||
|
|
||
|
import (
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
"text/template"
|
||
|
|
||
|
model "go-common/app/interface/main/reply/model/reply"
|
||
|
"go-common/library/ecode"
|
||
|
"go-common/library/log"
|
||
|
bm "go-common/library/net/http/blademaster"
|
||
|
"go-common/library/xstr"
|
||
|
)
|
||
|
|
||
|
// reportReply report a reply.
|
||
|
func reportReply(c *bm.Context) {
|
||
|
params := c.Request.Form
|
||
|
mid, _ := c.Get("mid")
|
||
|
oidsStr := params.Get("oid")
|
||
|
rpsStr := params.Get("rpid")
|
||
|
tpStr := params.Get("type")
|
||
|
reaStr := params.Get("reason")
|
||
|
cont := params.Get("content")
|
||
|
platform := params.Get("platform")
|
||
|
buildStr := params.Get("build")
|
||
|
buvid := c.Request.Header.Get("buvid")
|
||
|
var build int64
|
||
|
var err error
|
||
|
if buildStr != "" {
|
||
|
build, err = strconv.ParseInt(buildStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(%s) error(%v)", buildStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
// check params
|
||
|
oids, err := xstr.SplitInts(oidsStr)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(%s) error(%v)", oidsStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
rpIds, err := xstr.SplitInts(rpsStr)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(%s) error(%v)", rpsStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
if len(oids) != len(rpIds) {
|
||
|
log.Warn("oids(%s) not equal rpids(%s)", oidsStr, rpsStr)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
tp, err := strconv.ParseInt(tpStr, 10, 8)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(%s) error(%v)", tpStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
reaTmp, err := strconv.ParseInt(reaStr, 10, 8)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(%s) error(%v)", reaStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
rea := int8(reaTmp)
|
||
|
if rea == model.ReportReasonOther {
|
||
|
cont = strings.TrimSpace(cont)
|
||
|
cl := len([]rune(cont))
|
||
|
if 200 < cl || cl < 2 {
|
||
|
log.Warn("content(%s) length %d, max 200, min 2", cont, cl)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
cont = template.HTMLEscapeString(cont)
|
||
|
} else {
|
||
|
cont = ""
|
||
|
}
|
||
|
for i := 0; i < len(oids); i++ {
|
||
|
cd, err := rpSvr.AddReport(c, mid.(int64), oids[i], rpIds[i], int8(tp), rea, cont, platform, build, buvid)
|
||
|
if err != nil {
|
||
|
var data map[string]int
|
||
|
if err == ecode.ReplyReportDeniedAsCD {
|
||
|
data = map[string]int{"ttl": cd}
|
||
|
} else {
|
||
|
log.Warn("rpSvr.AddReport(%d, %d, %d, %d, %d, %s, %s, %d, %s) error(%v)", mid, oids[i], rpIds[i], tp, rea, cont, err, platform, build, buvid)
|
||
|
}
|
||
|
c.JSON(data, err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
c.JSON(nil, nil)
|
||
|
}
|
||
|
|
||
|
func reportRelated(c *bm.Context) {
|
||
|
var (
|
||
|
mid int64
|
||
|
escape = true
|
||
|
)
|
||
|
params := c.Request.Form
|
||
|
oidStr := params.Get("oid")
|
||
|
rpidStr := params.Get("root")
|
||
|
tpStr := params.Get("type")
|
||
|
midIf, ok := c.Get("mid")
|
||
|
if ok {
|
||
|
mid = midIf.(int64)
|
||
|
}
|
||
|
oid, err := strconv.ParseInt(oidStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(oid:%d) error(%v)", oidStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
rpid, err := strconv.ParseInt(rpidStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(rpid:%d) error(%v)", rpidStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
tp, err := strconv.ParseInt(tpStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(type:%d) error(%v)", tpStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
// check android and ios appkey
|
||
|
// if mobile, no html escape
|
||
|
if isMobile(params) {
|
||
|
escape = false
|
||
|
}
|
||
|
sub, root, rels, err := rpSvr.ReportRelated(c, mid, oid, rpid, int8(tp), escape)
|
||
|
if err != nil {
|
||
|
log.Warn("rpSvr.ReportRelated(%d,%d,%d) error(%v)", oid, rpid, tp, err)
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
data := map[string]interface{}{
|
||
|
"root": root,
|
||
|
"related": rels,
|
||
|
"upper": map[string]interface{}{
|
||
|
"mid": sub.Mid,
|
||
|
},
|
||
|
}
|
||
|
c.JSON(data, err)
|
||
|
}
|
||
|
|
||
|
func reportSndReply(c *bm.Context) {
|
||
|
var (
|
||
|
mid int64
|
||
|
escape = true
|
||
|
)
|
||
|
params := c.Request.Form
|
||
|
oidStr := params.Get("oid")
|
||
|
rpidStr := params.Get("root")
|
||
|
tpStr := params.Get("type")
|
||
|
pnStr := params.Get("pn")
|
||
|
psStr := params.Get("ps")
|
||
|
midIf, ok := c.Get("mid")
|
||
|
if ok {
|
||
|
mid = midIf.(int64)
|
||
|
}
|
||
|
oid, err := strconv.ParseInt(oidStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(oid:%d) error(%v)", oidStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
rpid, err := strconv.ParseInt(rpidStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(rpid:%d) error(%v)", rpidStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
tp, err := strconv.ParseInt(tpStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(type:%d) error(%v)", tpStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
pn, err := strconv.ParseInt(pnStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(pn:%d) error(%v)", pnStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
ps, err := strconv.ParseInt(psStr, 10, 64)
|
||
|
if err != nil {
|
||
|
log.Warn("strconv.ParseInt(ps:%d) error(%v)", psStr, err)
|
||
|
err = ecode.RequestErr
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
// check android and ios appkey
|
||
|
// if mobile, no html escape
|
||
|
if isMobile(params) {
|
||
|
escape = false
|
||
|
}
|
||
|
sub, root, rs, err := rpSvr.ReportReply(c, mid, oid, rpid, int8(tp), int(pn), int(ps), escape)
|
||
|
if err != nil {
|
||
|
c.JSON(nil, err)
|
||
|
return
|
||
|
}
|
||
|
data := make(map[string]interface{}, 2)
|
||
|
data["page"] = map[string]int{
|
||
|
"num": int(pn),
|
||
|
"size": int(ps),
|
||
|
"count": root.Count,
|
||
|
}
|
||
|
data["upper"] = map[string]interface{}{
|
||
|
"mid": sub.Mid,
|
||
|
}
|
||
|
data["root"] = root
|
||
|
data["replies"] = rs
|
||
|
c.JSON(data, err)
|
||
|
}
|