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.
242 lines
5.6 KiB
242 lines
5.6 KiB
package http |
|
|
|
import ( |
|
"errors" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/service/main/antispam/conf" |
|
"go-common/app/service/main/antispam/dao" |
|
"go-common/app/service/main/antispam/model" |
|
"go-common/app/service/main/antispam/util" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
) |
|
|
|
var ( |
|
// ErrMissID . |
|
ErrMissID = errors.New("error: id is required") |
|
// ErrIllegalOp . |
|
ErrIllegalOp = errors.New("error: this operation on keyword is not allowed") |
|
) |
|
|
|
// GetKeywordSenders return keyword's sender list |
|
func GetKeywordSenders(c *bm.Context) { |
|
params := c.Request.Form |
|
if _, err := getAdminID(params); err != nil { |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
id, err := strconv.ParseInt(params.Get(ProtocolKeywordID), 10, 64) |
|
if err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
k, err := Svr.GetKeywordByID(c, id) |
|
if err != nil { |
|
errResp(c, ecode.ServerErr, err) |
|
return |
|
} |
|
if k.State == model.StateDeleted { |
|
errResp(c, ecode.ServerErr, dao.ErrResourceNotExist) |
|
return |
|
} |
|
l, err := Svr.GetSenderIDsByKeywordID(c, id) |
|
if err != nil { |
|
errResp(c, ecode.ServerErr, err) |
|
return |
|
} |
|
c.JSON(l, nil) |
|
} |
|
|
|
// DeleteKeywords . |
|
func DeleteKeywords(c *bm.Context) { |
|
params := c.Request.Form |
|
if _, err := getAdminID(params); err != nil { |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
if params.Get(ProtocolKeywordIDs) == "" { |
|
errResp(c, ecode.RequestErr, errors.New("empty ids")) |
|
return |
|
} |
|
ids, err := util.StrToIntSli(params.Get(ProtocolKeywordIDs), ",") |
|
if err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
if len(ids) == 0 { |
|
errResp(c, ecode.RequestErr, nil) |
|
return |
|
} |
|
ks, err := Svr.DeleteKeywords(c, ids) |
|
if err != nil { |
|
errResp(c, ecode.ServerErr, err) |
|
return |
|
} |
|
c.JSON(ks, nil) |
|
} |
|
|
|
// UpdateKeyword . |
|
func UpdateKeyword(c *bm.Context) { |
|
params := c.Request.Form |
|
_, err := getAdminID(params) |
|
if err != nil { |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
op := params.Get(ProtocolKeywordOperation) |
|
if op != ProtocolKeywordOpDefaultLimit && |
|
op != ProtocolKeywordOpRestrictLimit && |
|
op != ProtocolKeywordOpBlack && |
|
op != ProtocolKeywordOpWhite { |
|
log.Error("%v", ErrIllegalOp) |
|
errResp(c, ecode.RequestErr, ErrIllegalOp) |
|
return |
|
} |
|
id, err := strconv.ParseInt(params.Get(ProtocolKeywordID), 10, 64) |
|
if err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
k, err := Svr.GetKeywordByID(c, id) |
|
if err != nil { |
|
errResp(c, ecode.ServerErr, err) |
|
return |
|
} |
|
if k.State == model.StateDeleted { |
|
errResp(c, ecode.ServerErr, dao.ErrResourceNotExist) |
|
return |
|
} |
|
if k.Tag == op { |
|
c.JSON(k, nil) |
|
return |
|
} |
|
k, err = Svr.OpKeyword(c, id, op) |
|
if err != nil { |
|
errResp(c, ecode.ServerErr, err) |
|
return |
|
} |
|
c.JSON(k, nil) |
|
} |
|
|
|
// GetKeyword . |
|
func GetKeyword(c *bm.Context) { |
|
params := c.Request.Form |
|
_, _, err := getAdminIDAndArea(params) |
|
if err != nil { |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
if params.Get(ProtocolKeywordID) == "" { |
|
errResp(c, ecode.RequestErr, ErrMissID) |
|
return |
|
} |
|
id, err := strconv.ParseInt(params.Get(ProtocolKeywordID), 10, 64) |
|
if err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
keyword, err := Svr.GetKeywordByID(c, id) |
|
if err != nil { |
|
errResp(c, ecode.ServerErr, err) |
|
return |
|
} |
|
c.JSON(keyword, nil) |
|
} |
|
|
|
// GetKeywords . |
|
func GetKeywords(c *bm.Context) { |
|
params := c.Request.Form |
|
_, area, err := getAdminIDAndArea(params) |
|
if err != nil { |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
var ( |
|
ctimeStart, ctimeEnd string |
|
startTime, endTime time.Time |
|
) |
|
cond := &Condition{ |
|
Pagination: &util.Pagination{}, |
|
Area: area, |
|
State: model.StateDefault, |
|
Search: params.Get(ProtocolSearch), |
|
Order: params.Get(ProtocolOrder), |
|
OrderBy: params.Get(ProtocolOrderBy), |
|
Tag: params.Get(ProtocolKeywordTag), |
|
} |
|
if ctimeStart = params.Get(ProtocolCTimeStart); ctimeStart != "" { |
|
startTime, err = time.Parse(util.TimeFormat, ctimeStart) |
|
if err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
cond.StartTime = &startTime |
|
} |
|
if ctimeEnd = params.Get(ProtocolCTimeEnd); ctimeEnd != "" { |
|
endTime, err = time.Parse(util.TimeFormat, ctimeEnd) |
|
if err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
cond.EndTime = &endTime |
|
} |
|
if ctimeStart != "" && ctimeEnd != "" { |
|
if startTime.After(endTime) { |
|
err = errors.New("start_time cannot be bigger than end_time") |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
} |
|
var export bool |
|
if params.Get(ProtocolKeywordExport) != "" { |
|
export, err = strconv.ParseBool(params.Get(ProtocolKeywordExport)) |
|
if err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
} |
|
if export { |
|
cond.PerPage = conf.Conf.ServiceOption.MaxExportRows |
|
} else { |
|
if params.Get(ProtocolCurPage) != "" { |
|
cond.CurPage, err = strconv.ParseInt(params.Get(ProtocolCurPage), 10, 64) |
|
if err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
} |
|
if perPage := params.Get(ProtocolPerPage); perPage != "" { |
|
if cond.PerPage, err = strconv.ParseInt(perPage, 10, 64); err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
} |
|
} |
|
if err = cond.Valid(); err != nil { |
|
log.Error("%v", err) |
|
errResp(c, ecode.RequestErr, err) |
|
return |
|
} |
|
keywords, total, err := Svr.GetKeywordsByCond(c, ToServiceCond(cond)) |
|
if err != nil { |
|
errResp(c, ecode.ServerErr, err) |
|
return |
|
} |
|
res := map[string]interface{}{} |
|
res[ProtocolTotalCounts] = total |
|
res[ProtocolData] = keywords |
|
c.JSONMap(res, nil) |
|
}
|
|
|