udplimit.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/repository"
  8. "strconv"
  9. )
  10. type UdpLimitService interface {
  11. GetUdpLimit(ctx context.Context, id int64) (*model.UdpLimit, error)
  12. AddUdpLimit(ctx context.Context, req *v1.UdpLimitRequest) (string, error)
  13. UpdateUdpLimit(ctx context.Context, req *v1.UdpLimitRequest) (string, error)
  14. DeleteUdpLimit(ctx context.Context, UdpLimitId int) (string, error)
  15. }
  16. func NewUdpLimitService(
  17. service *Service,
  18. udpLimitRepository repository.UdpLimitRepository,
  19. required RequiredService,
  20. crawler CrawlerService,
  21. parser ParserService,
  22. ) UdpLimitService {
  23. return &udpLimitService{
  24. Service: service,
  25. udpLimitRepository: udpLimitRepository,
  26. required: required,
  27. crawler: crawler,
  28. parser: parser,
  29. }
  30. }
  31. type udpLimitService struct {
  32. *Service
  33. udpLimitRepository repository.UdpLimitRepository
  34. required RequiredService
  35. crawler CrawlerService
  36. parser ParserService
  37. }
  38. func (s *udpLimitService) GetUdpLimit(ctx context.Context, id int64) (*model.UdpLimit, error) {
  39. return s.udpLimitRepository.GetUdpLimit(ctx, id)
  40. }
  41. func (s *udpLimitService) AddUdpLimit(ctx context.Context, req *v1.UdpLimitRequest) (string, error) {
  42. formData := map[string]interface{}{
  43. "tag": req.Tag,
  44. "qos_packet_count": req.QosPacketCount,
  45. "qos_packet_duration": req.QosPacketDuration,
  46. "max_conn_count": req.MaxConnCount,
  47. "bps": req.Bps,
  48. "max_bytes_month": req.MaxBytesMonth,
  49. "expired_at": "",
  50. }
  51. respBody, err := s.required.SendForm(ctx, "admin/info/waf_udp_limit/new", "admin/new/waf_udp_limit", formData)
  52. if err != nil {
  53. return "", err
  54. }
  55. // 解析响应内容中的 alert 消息
  56. res, err := s.parser.ParseAlert(string(respBody))
  57. if err != nil {
  58. return "", err
  59. }
  60. if res != "" {
  61. return "", fmt.Errorf(res)
  62. }
  63. udpLimitId, err := s.parser.GetRuleId(ctx, respBody)
  64. if err != nil {
  65. return "", err
  66. }
  67. fmt.Println("=================================================", udpLimitId)
  68. return "", nil
  69. }
  70. func (s *udpLimitService) UpdateUdpLimit(ctx context.Context, req *v1.UdpLimitRequest) (string, error) {
  71. formData := map[string]interface{}{
  72. "tag": req.Tag,
  73. "waf_udp_limit_id": req.WafUdpLimitId,
  74. "qos_packet_count": req.QosPacketCount,
  75. "qos_packet_duration": req.QosPacketDuration,
  76. "max_conn_count": req.MaxConnCount,
  77. "bps": req.Bps,
  78. "max_bytes_month": req.MaxBytesMonth,
  79. "expired_at": "",
  80. }
  81. respBody, err := s.required.SendForm(ctx, "admin/info/waf_udp_limit/edit?&__goadmin_edit_pk="+strconv.Itoa(req.WafUdpLimitId), "admin/edit/waf_udp_limit", formData)
  82. if err != nil {
  83. return "", err
  84. }
  85. // 解析响应内容中的 alert 消息
  86. res, err := s.parser.ParseAlert(string(respBody))
  87. if err != nil {
  88. return "", err
  89. }
  90. if res != "" {
  91. return "", fmt.Errorf(res)
  92. }
  93. return "", nil
  94. }
  95. func (s *udpLimitService) DeleteUdpLimit(ctx context.Context, WafUdpLimitId int) (string, error) {
  96. res, err := s.crawler.DeleteRule(ctx, WafUdpLimitId, "admin/delete/waf_udp_limit?page=1&__pageSize=10&__sort=waf_udp_limit_id&__sort_type=desc")
  97. if err != nil {
  98. return "", err
  99. }
  100. return res, nil
  101. }