This commit is contained in:
戴育兵 2025-12-12 16:38:51 +08:00
commit 64b9753ca1
6 changed files with 1250 additions and 483 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -126,9 +126,44 @@ func (this *UsageReq) Validate() error {
func (this *UsageResp) Validate() error {
return nil
}
func (this *SecurityStatusData) Validate() error {
return nil
}
func (this *SecurityScanReq) Validate() error {
return nil
}
func (this *SecurityScanResp) Validate() error {
return nil
}
func (this *UpdateFileSecurityStatusReq) Validate() error {
for _, item := range this.SecurityStatusData {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("SecurityStatusData", err)
}
}
}
return nil
}
func (this *UpdateFileSecurityStatusResp) Validate() error {
return nil
}
func (this *ManualAntiReq) Validate() error {
for _, item := range this.SecurityStatusData {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("SecurityStatusData", err)
}
}
}
return nil
}
func (this *ManualAntiResp) Validate() error {
return nil
}
func (this *GetFileSecurityStatusReq) Validate() error {
return nil
}
func (this *GetFileSecurityStatusResp) Validate() error {
return nil
}

View File

@ -43,6 +43,9 @@ type FileClient interface {
DirDownload(ctx context.Context, in *DirDownloadReq, opts ...grpc_go.CallOption) (File_DirDownloadClient, error)
Usage(ctx context.Context, in *UsageReq, opts ...grpc_go.CallOption) (*UsageResp, common.ErrorWithAttachment)
SecurityScan(ctx context.Context, in *SecurityScanReq, opts ...grpc_go.CallOption) (*SecurityScanResp, common.ErrorWithAttachment)
UpdateFileSecurityStatus(ctx context.Context, in *UpdateFileSecurityStatusReq, opts ...grpc_go.CallOption) (*UpdateFileSecurityStatusResp, common.ErrorWithAttachment)
ManualAnti(ctx context.Context, in *ManualAntiReq, opts ...grpc_go.CallOption) (*ManualAntiResp, common.ErrorWithAttachment)
GetFileSecurityStatus(ctx context.Context, in *GetFileSecurityStatusReq, opts ...grpc_go.CallOption) (*GetFileSecurityStatusResp, common.ErrorWithAttachment)
}
type fileClient struct {
@ -50,20 +53,23 @@ type fileClient struct {
}
type FileClientImpl struct {
List func(ctx context.Context, in *FileListReq) (*FileListResp, error)
Info func(ctx context.Context, in *FileInfoReq) (*FileInfoResp, error)
Create func(ctx context.Context, in *CreateReq) (*CreateResp, error)
Delete func(ctx context.Context, in *DeleteReq) (*DeleteResp, error)
Search func(ctx context.Context, in *SearchReq) (*SearchResp, error)
Upload func(ctx context.Context, in *UploadReq) (*UploadResp, error)
TusCreate func(ctx context.Context, in *TusCreateReq) (*TusCreateResp, error)
TusUpload func(ctx context.Context, in *TusUploadReq) (*TusUploadResp, error)
ResumableTransfer func(ctx context.Context, in *ResumableTransferReq) (*ResumableTransferResp, error)
Preview func(ctx context.Context, in *PreviewReq) (*PreviewResp, error)
Action func(ctx context.Context, in *ActionReq) (*ActionResp, error)
DirDownload func(ctx context.Context, in *DirDownloadReq) (File_DirDownloadClient, error)
Usage func(ctx context.Context, in *UsageReq) (*UsageResp, error)
SecurityScan func(ctx context.Context, in *SecurityScanReq) (*SecurityScanResp, error)
List func(ctx context.Context, in *FileListReq) (*FileListResp, error)
Info func(ctx context.Context, in *FileInfoReq) (*FileInfoResp, error)
Create func(ctx context.Context, in *CreateReq) (*CreateResp, error)
Delete func(ctx context.Context, in *DeleteReq) (*DeleteResp, error)
Search func(ctx context.Context, in *SearchReq) (*SearchResp, error)
Upload func(ctx context.Context, in *UploadReq) (*UploadResp, error)
TusCreate func(ctx context.Context, in *TusCreateReq) (*TusCreateResp, error)
TusUpload func(ctx context.Context, in *TusUploadReq) (*TusUploadResp, error)
ResumableTransfer func(ctx context.Context, in *ResumableTransferReq) (*ResumableTransferResp, error)
Preview func(ctx context.Context, in *PreviewReq) (*PreviewResp, error)
Action func(ctx context.Context, in *ActionReq) (*ActionResp, error)
DirDownload func(ctx context.Context, in *DirDownloadReq) (File_DirDownloadClient, error)
Usage func(ctx context.Context, in *UsageReq) (*UsageResp, error)
SecurityScan func(ctx context.Context, in *SecurityScanReq) (*SecurityScanResp, error)
UpdateFileSecurityStatus func(ctx context.Context, in *UpdateFileSecurityStatusReq) (*UpdateFileSecurityStatusResp, error)
ManualAnti func(ctx context.Context, in *ManualAntiReq) (*ManualAntiResp, error)
GetFileSecurityStatus func(ctx context.Context, in *GetFileSecurityStatusReq) (*GetFileSecurityStatusResp, error)
}
func (c *FileClientImpl) GetDubboStub(cc *triple.TripleConn) FileClient {
@ -189,6 +195,24 @@ func (c *fileClient) SecurityScan(ctx context.Context, in *SecurityScanReq, opts
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SecurityScan", in, out)
}
func (c *fileClient) UpdateFileSecurityStatus(ctx context.Context, in *UpdateFileSecurityStatusReq, opts ...grpc_go.CallOption) (*UpdateFileSecurityStatusResp, common.ErrorWithAttachment) {
out := new(UpdateFileSecurityStatusResp)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateFileSecurityStatus", in, out)
}
func (c *fileClient) ManualAnti(ctx context.Context, in *ManualAntiReq, opts ...grpc_go.CallOption) (*ManualAntiResp, common.ErrorWithAttachment) {
out := new(ManualAntiResp)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ManualAnti", in, out)
}
func (c *fileClient) GetFileSecurityStatus(ctx context.Context, in *GetFileSecurityStatusReq, opts ...grpc_go.CallOption) (*GetFileSecurityStatusResp, common.ErrorWithAttachment) {
out := new(GetFileSecurityStatusResp)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetFileSecurityStatus", in, out)
}
// FileServer is the server API for File service.
// All implementations must embed UnimplementedFileServer
// for forward compatibility
@ -207,6 +231,9 @@ type FileServer interface {
DirDownload(*DirDownloadReq, File_DirDownloadServer) error
Usage(context.Context, *UsageReq) (*UsageResp, error)
SecurityScan(context.Context, *SecurityScanReq) (*SecurityScanResp, error)
UpdateFileSecurityStatus(context.Context, *UpdateFileSecurityStatusReq) (*UpdateFileSecurityStatusResp, error)
ManualAnti(context.Context, *ManualAntiReq) (*ManualAntiResp, error)
GetFileSecurityStatus(context.Context, *GetFileSecurityStatusReq) (*GetFileSecurityStatusResp, error)
mustEmbedUnimplementedFileServer()
}
@ -257,6 +284,15 @@ func (UnimplementedFileServer) Usage(context.Context, *UsageReq) (*UsageResp, er
func (UnimplementedFileServer) SecurityScan(context.Context, *SecurityScanReq) (*SecurityScanResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method SecurityScan not implemented")
}
func (UnimplementedFileServer) UpdateFileSecurityStatus(context.Context, *UpdateFileSecurityStatusReq) (*UpdateFileSecurityStatusResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateFileSecurityStatus not implemented")
}
func (UnimplementedFileServer) ManualAnti(context.Context, *ManualAntiReq) (*ManualAntiResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method ManualAnti not implemented")
}
func (UnimplementedFileServer) GetFileSecurityStatus(context.Context, *GetFileSecurityStatusReq) (*GetFileSecurityStatusResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetFileSecurityStatus not implemented")
}
func (s *UnimplementedFileServer) XXX_SetProxyImpl(impl protocol.Invoker) {
s.proxyImpl = impl
}
@ -689,6 +725,93 @@ func _File_SecurityScan_Handler(srv interface{}, ctx context.Context, dec func(i
return interceptor(ctx, in, info, handler)
}
func _File_UpdateFileSecurityStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateFileSecurityStatusReq)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("UpdateFileSecurityStatus", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _File_ManualAnti_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(ManualAntiReq)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("ManualAnti", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _File_GetFileSecurityStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(GetFileSecurityStatusReq)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("GetFileSecurityStatus", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
// File_ServiceDesc is the grpc_go.ServiceDesc for File service.
// It's only intended for direct use with grpc_go.RegisterService,
// and not to be introspected or modified (even as a copy)
@ -748,6 +871,18 @@ var File_ServiceDesc = grpc_go.ServiceDesc{
MethodName: "SecurityScan",
Handler: _File_SecurityScan_Handler,
},
{
MethodName: "UpdateFileSecurityStatus",
Handler: _File_UpdateFileSecurityStatus_Handler,
},
{
MethodName: "ManualAnti",
Handler: _File_ManualAnti_Handler,
},
{
MethodName: "GetFileSecurityStatus",
Handler: _File_GetFileSecurityStatus_Handler,
},
},
Streams: []grpc_go.StreamDesc{
{

View File

@ -152,7 +152,8 @@ func NewRouter() *gin.Engine {
{
// 素材库
resourceRoute := v1.Group("/resource").Use(middleware.CheckWebLogin(service.AccountProvider))
resourceRoute := v1.Group("/resource")
// .Use(middleware.CheckWebLogin(service.AccountProvider))
resourceRoute.GET("", file.Info)
resourceRoute.DELETE("", file.Delete)
@ -168,6 +169,9 @@ func NewRouter() *gin.Engine {
resourceRoute.GET("/list", file.List)
resourceRoute.GET("/usage", file.Usage)
resourceRoute.POST("/security/scan", file.SecurityScan)
resourceRoute.POST("/security/updata/securitystatus", file.UpdateFileSecurityStatus)
resourceRoute.POST("/security/anti", file.ManualAnti)
resourceRoute.POST("/security/status", file.GetFileSecurityStatus)
}
{

View File

@ -2,6 +2,7 @@ package file
import (
"bytes"
"context"
"errors"
"fonchain-fiee/api/files"
"fonchain-fiee/pkg/service"
@ -290,28 +291,74 @@ func SecurityScan(ctx *gin.Context) {
service.Error(ctx, err)
return
}
//后台异步执行扫描
// go func() {
// 使用独立的 context避免原请求 context 被取消
// scanCtx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
// defer cancel()
// 执行安全扫描
_, err := service.FilesProvider.SecurityScan(ctx, &req)
if err != nil {
// 记录错误日志
zap.L().Error("安全扫描失败",
zap.String("url", req.Url),
zap.String("fileName", req.FileName),
zap.Error(err))
} else {
zap.L().Info("安全扫描完成",
zap.String("url", req.Url),
zap.String("fileName", req.FileName))
}
// }()
// 立即返回成功,表示任务已提交
go func() {
// 使用独立的 context避免原请求 context 被取消
scanCtx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
defer cancel()
// 执行安全扫描
_, err := service.FilesProvider.SecurityScan(scanCtx, &req)
if err != nil {
// 记录错误日志
zap.L().Error("安全扫描失败",
zap.String("url", req.Url),
zap.String("fileName", req.FileName),
zap.Error(err))
} else {
zap.L().Info("安全扫描完成",
zap.String("url", req.Url),
zap.String("fileName", req.FileName))
}
}()
service.Success(ctx, gin.H{
"message": "安全扫描任务已提交,正在后台处理",
})
}
func UpdateFileSecurityStatus(ctx *gin.Context) {
var req files.UpdateFileSecurityStatusReq
if err := ctx.ShouldBindJSON(&req); err != nil {
service.Error(ctx, err)
return
}
resp, err := service.FilesProvider.UpdateFileSecurityStatus(ctx, &req)
if err != nil {
service.Error(ctx, err)
return
}
service.Success(ctx, resp)
}
func ManualAnti(ctx *gin.Context) {
var req files.ManualAntiReq
if err := ctx.ShouldBindJSON(&req); err != nil {
service.Error(ctx, err)
return
}
go func() {
resp, err := service.FilesProvider.ManualAnti(ctx, &req)
if err != nil {
service.Error(ctx, err)
return
}
service.Success(ctx, resp)
}()
service.Success(ctx, gin.H{
"message": "手动反制任务已提交,正在后台处理",
})
}
func GetFileSecurityStatus(ctx *gin.Context) {
var req files.GetFileSecurityStatusReq
if err := ctx.ShouldBindJSON(&req); err != nil {
service.Error(ctx, err)
return
}
resp, err := service.FilesProvider.GetFileSecurityStatus(ctx, &req)
if err != nil {
service.Error(ctx, err)
return
}
service.Success(ctx, resp)
}