package service import ( "context" "fmt" v1 "github.com/go-nunu/nunu-layout-advanced/api/v1" "github.com/go-nunu/nunu-layout-advanced/internal/model" "github.com/go-nunu/nunu-layout-advanced/internal/repository" "strconv" ) type WebLimitService interface { GetWebLimit(ctx context.Context, id int64) (*model.WebLimit, error) AddWebLimit(ctx context.Context, req *v1.WebLimitRequest) (string, error) UpdateWebLimit(ctx context.Context, req *v1.WebLimitRequest) (string, error) DeleteWebLimit(ctx context.Context, wafWebId int) (string, error) } func NewWebLimitService( service *Service, webLimitRepository repository.WebLimitRepository, require RequiredService, parser ParserService, crawler CrawlerService, ) WebLimitService { return &webLimitService{ Service: service, webLimitRepository: webLimitRepository, required: require, parser: parser, crawler: crawler, } } type webLimitService struct { *Service webLimitRepository repository.WebLimitRepository required RequiredService parser ParserService crawler CrawlerService } func (s *webLimitService) GetWebLimit(ctx context.Context, id int64) (*model.WebLimit, error) { return s.webLimitRepository.GetWebLimit(ctx, id) } func (s *webLimitService) AddWebLimit(ctx context.Context, req *v1.WebLimitRequest) (string, error) { formData := map[string]interface{}{ "tag": req.Tag, "qps_count": req.QpsCount, "qps_duration": req.QpsDuration, "bps": req.Bps, "max_bytes_month": req.MaxBytesMonth, "expired_at": "", } respBody, err := s.required.SendForm(ctx, "admin/info/waf_web_limit/new", "admin/new/waf_web_limit", formData) if err != nil { return "", err } // 解析响应内容中的 alert 消息 res, err := s.parser.ParseAlert(string(respBody)) if err != nil { return "", err } if res != "" { return "", fmt.Errorf(res) } webLimitId, err := s.parser.GetRuleId(ctx, respBody) if err != nil { return "", err } fmt.Println("=================================================", webLimitId) return "", nil } func (s *webLimitService) UpdateWebLimit(ctx context.Context, req *v1.WebLimitRequest) (string, error) { formData := map[string]interface{}{ "tag": req.Tag, "waf_web_limit_id": req.WafWebLimitId, "qps_count": req.QpsCount, "qps_duration": req.QpsDuration, "bps": req.Bps, "max_bytes_month": req.MaxBytesMonth, "expired_at": "", } respBody, err := s.required.SendForm(ctx, "admin/info/waf_web_limit/edit?&__goadmin_edit_pk="+strconv.Itoa(req.WafWebLimitId), "admin/edit/waf_web_limit", formData) if err != nil { return "", err } // 解析响应内容中的 alert 消息 res, err := s.parser.ParseAlert(string(respBody)) if err != nil { return "", err } if res != "" { return "", fmt.Errorf(res) } return "", nil } func (s *webLimitService) DeleteWebLimit(ctx context.Context, WafWebLimitId int) (string, error) { res, err := s.crawler.DeleteRule(ctx, WafWebLimitId, "admin/delete/waf_web_limit?page=1&__pageSize=10&__sort=waf_web_limit_id&__sort_type=desc") if err != nil { return "", err } return res, nil }