udpforwarding.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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 UdpForWardingService interface {
  11. GetUdpForWarding(ctx context.Context, id int64) (*model.UdpForWarding, error)
  12. AddUdpForwarding(ctx context.Context, req *v1.UdpForwardingRequest) (string, error)
  13. EditUdpForwarding(ctx context.Context, req *v1.UdpForwardingRequest) (string, error)
  14. DeleteUdpForwarding(ctx context.Context, wafUdpId int) (string, error)
  15. }
  16. func NewUdpForWardingService(
  17. service *Service,
  18. udpForWardingRepository repository.UdpForWardingRepository,
  19. required RequiredService,
  20. parser ParserService,
  21. crawler CrawlerService,
  22. ) UdpForWardingService {
  23. return &udpForWardingService{
  24. Service: service,
  25. udpForWardingRepository: udpForWardingRepository,
  26. required: required,
  27. parser: parser,
  28. crawler: crawler,
  29. }
  30. }
  31. type udpForWardingService struct {
  32. *Service
  33. udpForWardingRepository repository.UdpForWardingRepository
  34. required RequiredService
  35. parser ParserService
  36. crawler CrawlerService
  37. }
  38. func (s *udpForWardingService) GetUdpForWarding(ctx context.Context, id int64) (*model.UdpForWarding, error) {
  39. return s.udpForWardingRepository.GetUdpForWarding(ctx, id)
  40. }
  41. func (s *udpForWardingService) AddUdpForwarding(ctx context.Context, req *v1.UdpForwardingRequest) (string, error) {
  42. formData := map[string]interface{}{
  43. "tag": req.Tag,
  44. "port": req.Port,
  45. "waf_gateway_group_id": req.WafGatewayGroupId,
  46. "cc_packet_count": req.CcPacketCount,
  47. "cc_packet_duration": req.CcPacketDuration,
  48. "cc_count": req.CcCount,
  49. "cc_duration": req.CcDuration,
  50. "cc_block_count": req.CcBlockCount,
  51. "cc_block_duration": req.CcBlockDuration,
  52. "qos_packet_count": req.QosPacketCount,
  53. "qos_packet_duration": req.QosPacketDuration,
  54. "max_bytes_month": req.MaxBytesMonth,
  55. "max_conn_count": req.MaxConnCount,
  56. "session_timeout": req.SessionTimeout,
  57. "bps": req.Bps,
  58. "backend_protocol": req.BackendProtocol,
  59. "backend_timeout": req.BackendTimeout,
  60. "backend_list": req.BackendList,
  61. "allow_ip_list": req.AllowIpList,
  62. "deny_ip_list": req.DenyIpList,
  63. "access_rule": req.AccessRule,
  64. "comment": req.Comment,
  65. }
  66. respBody, err := s.required.SendForm(ctx, "admin/info/waf_udp/new", "admin/new/waf_udp", formData)
  67. if err != nil {
  68. return "", err
  69. }
  70. // 解析响应内容中的 alert 消息
  71. res, err := s.parser.ParseAlert(string(respBody))
  72. if err != nil {
  73. return "", err
  74. }
  75. if res != "" {
  76. return "", fmt.Errorf(res)
  77. }
  78. wafUdpId, err := s.parser.GetRuleId(ctx, respBody)
  79. if err != nil {
  80. return "", err
  81. }
  82. fmt.Println("=================================================", wafUdpId)
  83. return "", nil
  84. }
  85. func (s *udpForWardingService) EditUdpForwarding(ctx context.Context, req *v1.UdpForwardingRequest) (string, error) {
  86. formData := map[string]interface{}{
  87. "waf_udp_id": req.WafUdpId,
  88. "tag": req.Tag,
  89. "port": req.Port,
  90. "waf_gateway_group_id": req.WafGatewayGroupId,
  91. "cc_packet_count": req.CcPacketCount,
  92. "cc_packet_duration": req.CcPacketDuration,
  93. "cc_count": req.CcCount,
  94. "cc_duration": req.CcDuration,
  95. "cc_block_count": req.CcBlockCount,
  96. "cc_block_duration": req.CcBlockDuration,
  97. "qos_packet_count": req.QosPacketCount,
  98. "qos_packet_duration": req.QosPacketDuration,
  99. "max_bytes_month": req.MaxBytesMonth,
  100. "max_conn_count": req.MaxConnCount,
  101. "session_timeout": req.SessionTimeout,
  102. "bps": req.Bps,
  103. "backend_protocol": req.BackendProtocol,
  104. "backend_timeout": req.BackendTimeout,
  105. "backend_list": req.BackendList,
  106. "allow_ip_list": req.AllowIpList,
  107. "deny_ip_list": req.DenyIpList,
  108. "access_rule": req.AccessRule,
  109. "comment": req.Comment,
  110. }
  111. respBody, err := s.required.SendForm(ctx, "admin/info/waf_udp/edit?&__goadmin_edit_pk="+strconv.Itoa(req.WafUdpId), "admin/edit/waf_udp", formData)
  112. if err != nil {
  113. return "", err
  114. }
  115. // 解析响应内容中的 alert 消息
  116. res, err := s.parser.ParseAlert(string(respBody))
  117. if err != nil {
  118. return "", err
  119. }
  120. if res != "" {
  121. return "", fmt.Errorf(res)
  122. }
  123. return "", nil
  124. }
  125. func (s *udpForWardingService) DeleteUdpForwarding(ctx context.Context, wafUdpId int) (string, error) {
  126. res, err := s.crawler.DeleteRule(ctx, wafUdpId, "admin/delete/waf_udp?page=1&__pageSize=10&__sort=waf_udp_id&__sort_type=desc")
  127. if err != nil {
  128. return "", err
  129. }
  130. return res, nil
  131. }