165 lines
5.0 KiB
Go
165 lines
5.0 KiB
Go
package yidun
|
|
|
|
import (
|
|
"cid/service/yidun"
|
|
"context"
|
|
|
|
"gitea.redpowerfuture.com/red-future/common/beans"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/net/ghttp"
|
|
"github.com/yidun/yidun-golang-sdk/yidun/service/antispam/text/v5/check/async/single"
|
|
)
|
|
|
|
type yidunController struct{}
|
|
|
|
// YidunController 易盾控制器
|
|
var YidunController = new(yidunController)
|
|
|
|
// DetectTextReq 文本检测请求
|
|
type DetectTextReq struct {
|
|
DataID string `json:"data_id"`
|
|
Content string `json:"content" v:"required#待检测文本不能为空"`
|
|
IP string `json:"ip"`
|
|
Token string `json:"token"`
|
|
}
|
|
|
|
// DetectImageReq 图片检测请求
|
|
type DetectImageReq struct {
|
|
DataID string `json:"data_id"`
|
|
ImageURL string `json:"image_url" v:"required#图片URL不能为空"`
|
|
CallbackURL string `json:"callback_url"`
|
|
}
|
|
|
|
// DetectVideoReq 视频检测请求
|
|
type DetectVideoReq struct {
|
|
DataID string `json:"data_id"`
|
|
VideoURL string `json:"video_url" v:"required#视频URL不能为空"`
|
|
CallbackURL string `json:"callback_url"`
|
|
}
|
|
|
|
// DetectText 文本检测
|
|
func (c *yidunController) DetectText(ctx context.Context, req *DetectTextReq) (string, error) {
|
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
|
|
|
businessId := g.Cfg().MustGet(ctx, "yidun.text.business_id").String()
|
|
sdkReq := single.NewTextAsyncCheckRequest(businessId)
|
|
sdkReq.SetDataID(req.DataID)
|
|
sdkReq.SetContent(req.Content)
|
|
if req.IP != "" {
|
|
sdkReq.SetIP(req.IP)
|
|
}
|
|
if req.Token != "" {
|
|
sdkReq.SetToken(req.Token)
|
|
}
|
|
|
|
return yidun.TextDetection.DetectText(ctx, sdkReq)
|
|
}
|
|
|
|
// DetectImage 图片检测
|
|
func (c *yidunController) DetectImage(ctx context.Context, req *DetectImageReq) (*yidun.ImageSubmitResult, error) {
|
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
|
return yidun.ImageDetection.DetectImage(ctx, req.ImageURL, req.DataID, req.CallbackURL)
|
|
}
|
|
|
|
// DetectVideo 视频检测
|
|
func (c *yidunController) DetectVideo(ctx context.Context, req *DetectVideoReq) (*yidun.VideoSubmitResult, error) {
|
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
|
return yidun.VideoDetection.DetectVideo(ctx, req.VideoURL, req.DataID, req.CallbackURL)
|
|
}
|
|
|
|
// ImageCallbackResult 图片检测回调响应
|
|
type ImageCallbackResult struct {
|
|
Code int `json:"code"`
|
|
Msg string `json:"msg"`
|
|
}
|
|
|
|
// ReceiveImageCallback 接收图片检测结果推送
|
|
func (c *yidunController) ReceiveImageCallback(r *ghttp.Request) {
|
|
ctx := r.Context()
|
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
|
|
|
callbackData := r.GetForm("callbackData", "").String()
|
|
if callbackData == "" {
|
|
r.Response.WriteJson(ImageCallbackResult{Code: 400, Msg: "callbackData不能为空"})
|
|
return
|
|
}
|
|
|
|
err := yidun.ImageDetection.ProcessImageCallback(ctx, callbackData)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "处理图片检测回调失败: %v", err)
|
|
r.Response.WriteJson(ImageCallbackResult{Code: 500, Msg: err.Error()})
|
|
return
|
|
}
|
|
|
|
r.Response.WriteJson(ImageCallbackResult{Code: 200, Msg: "success"})
|
|
}
|
|
|
|
// VideoCallbackResult 视频检测回调响应
|
|
type VideoCallbackResult struct {
|
|
Code int `json:"code"`
|
|
Msg string `json:"msg"`
|
|
}
|
|
|
|
// ReceiveVideoCallback 接收视频检测结果推送
|
|
func (c *yidunController) ReceiveVideoCallback(r *ghttp.Request) {
|
|
ctx := r.Context()
|
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
|
|
|
callbackData := r.GetForm("callbackData", "").String()
|
|
if callbackData == "" {
|
|
r.Response.WriteJson(VideoCallbackResult{Code: 400, Msg: "callbackData不能为空"})
|
|
return
|
|
}
|
|
|
|
err := yidun.VideoDetection.ProcessVideoCallback(ctx, callbackData)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "处理视频检测回调失败: %v", err)
|
|
r.Response.WriteJson(VideoCallbackResult{Code: 500, Msg: err.Error()})
|
|
return
|
|
}
|
|
|
|
r.Response.WriteJson(VideoCallbackResult{Code: 200, Msg: "success"})
|
|
}
|
|
|
|
// GetVideoResult 获取视频检测结果
|
|
func (c *yidunController) GetVideoResult(r *ghttp.Request) {
|
|
ctx := r.Context()
|
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
|
|
|
taskId := r.Get("taskId", "").String()
|
|
if taskId == "" {
|
|
r.Response.WriteJson(g.Map{"code": 400, "msg": "taskId不能为空"})
|
|
return
|
|
}
|
|
|
|
result, err := yidun.VideoDetection.GetVideoResult(ctx, taskId)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "查询视频检测结果失败: %v", err)
|
|
r.Response.WriteJson(g.Map{"code": 500, "msg": err.Error()})
|
|
return
|
|
}
|
|
|
|
r.Response.WriteJson(result)
|
|
}
|
|
|
|
// GetImageResult 获取图片检测结果
|
|
func (c *yidunController) GetImageResult(r *ghttp.Request) {
|
|
ctx := r.Context()
|
|
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
|
|
|
|
taskId := r.Get("taskId", "").String()
|
|
if taskId == "" {
|
|
r.Response.WriteJson(g.Map{"code": 400, "msg": "taskId不能为空"})
|
|
return
|
|
}
|
|
|
|
result, err := yidun.ImageDetection.GetImageResult(ctx, taskId)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "查询图片检测结果失败: %v", err)
|
|
r.Response.WriteJson(g.Map{"code": 500, "msg": err.Error()})
|
|
return
|
|
}
|
|
|
|
r.Response.WriteJson(result)
|
|
}
|