udpforwarding.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package service
  2. import (
  3. "context"
  4. "github.com/davecgh/go-spew/spew"
  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. globalRep repository.GlobalLimitRepository,
  23. hostRep repository.HostRepository,
  24. wafformatter WafFormatterService,
  25. ) UdpForWardingService {
  26. return &udpForWardingService{
  27. Service: service,
  28. udpForWardingRepository: udpForWardingRepository,
  29. required: required,
  30. parser: parser,
  31. crawler: crawler,
  32. globalRep: globalRep,
  33. hostRep: hostRep,
  34. wafformatter: wafformatter,
  35. }
  36. }
  37. type udpForWardingService struct {
  38. *Service
  39. udpForWardingRepository repository.UdpForWardingRepository
  40. required RequiredService
  41. parser ParserService
  42. crawler CrawlerService
  43. globalRep repository.GlobalLimitRepository
  44. hostRep repository.HostRepository
  45. wafformatter WafFormatterService
  46. }
  47. func (s *udpForWardingService) require(ctx context.Context,req v1.GlobalRequire) (v1.GlobalRequire, error) {
  48. res, err := s.wafformatter.require(ctx, req, "udp")
  49. if err != nil {
  50. return v1.GlobalRequire{}, err
  51. }
  52. return res, nil
  53. }
  54. func (s *udpForWardingService) GetUdpForWarding(ctx context.Context, id int64) (*model.UdpForWarding, error) {
  55. return s.udpForWardingRepository.GetUdpForWarding(ctx, id)
  56. }
  57. func (s *udpForWardingService) buildWafFormData(req *v1.UdpForwardingData, require v1.GlobalRequire) map[string]interface{} {
  58. return map[string]interface{}{
  59. "tag": require.Tag,
  60. "port": req.Port,
  61. "waf_gateway_group_id": require.WafGatewayGroupId,
  62. "waf_udp_limit_id": require.LimitRuleId,
  63. "cc_packet_count": req.CcPacketCount,
  64. "cc_packet_duration": req.CcPacketDuration,
  65. "cc_count": req.CcCount,
  66. "cc_duration": req.CcDuration,
  67. "cc_block_count": req.CcBlockCount,
  68. "cc_block_duration": req.CcBlockDuration,
  69. "session_timeout": req.SessionTimeout,
  70. "backend_list": req.BackendList,
  71. "allow_ip_list": req.AllowIpList,
  72. "deny_ip_list": req.DenyIpList,
  73. "access_rule": req.AccessRule,
  74. "comment": req.Comment,
  75. }
  76. }
  77. func (s *udpForWardingService) buildUdpForwardingModel(req *v1.UdpForwardingData, ruleId int, require v1.GlobalRequire) *model.UdpForWarding {
  78. return &model.UdpForWarding{
  79. HostId: require.HostId,
  80. RuleId: ruleId,
  81. Tag: require.Tag,
  82. Port: strconv.Itoa(req.Port),
  83. WafGatewayGroupId: require.WafGatewayGroupId,
  84. UdpLimitRuleId: require.LimitRuleId,
  85. CcPacketCount: req.CcPacketCount,
  86. CcPacketDuration: req.CcPacketDuration,
  87. CcPacketBlockCount: req.CcBlockCount,
  88. CcPacketBlockDuration: req.CcBlockDuration,
  89. CcCount: req.CcCount,
  90. CcDuration: req.CcDuration,
  91. CcBlockCount: req.CcBlockCount,
  92. CcBlockDuration: req.CcBlockDuration,
  93. SessionTimeout: req.SessionTimeout,
  94. Comment: req.Comment,
  95. }
  96. }
  97. func (s *udpForWardingService) AddUdpForwarding(ctx context.Context, req *v1.UdpForwardingRequest) (string, error) {
  98. require, err := s.require(ctx, v1.GlobalRequire{
  99. HostId: req.HostId,
  100. Uid: req.Uid,
  101. Comment: req.UdpForwardingData.Comment,
  102. })
  103. spew.Dump(require)
  104. if err != nil {
  105. return "", err
  106. }
  107. formData := s.buildWafFormData(&req.UdpForwardingData, require)
  108. wafUdpId, err := s.wafformatter.sendFormData(ctx, "admin/info/waf_udp/new", "admin/new/waf_udp", formData)
  109. if err != nil {
  110. return "", err
  111. }
  112. udpModel := s.buildUdpForwardingModel(&req.UdpForwardingData, wafUdpId, require)
  113. if err := s.udpForWardingRepository.AddUdpForwarding(ctx, udpModel); err != nil {
  114. return "", err
  115. }
  116. return "", nil
  117. }
  118. func (s *udpForWardingService) EditUdpForwarding(ctx context.Context, req *v1.UdpForwardingRequest) (string, error) {
  119. require, err := s.require(ctx, v1.GlobalRequire{
  120. HostId: req.HostId,
  121. Uid: req.Uid,
  122. Comment: req.UdpForwardingData.Comment,
  123. })
  124. if err != nil {
  125. return "", err
  126. }
  127. formData := s.buildWafFormData(&req.UdpForwardingData, require)
  128. _, err = s.wafformatter.sendFormData(ctx, "admin/info/waf_udp/edit?&__goadmin_edit_pk="+strconv.Itoa(req.UdpForwardingData.WafUdpId), "admin/edit/waf_udp", formData)
  129. if err != nil {
  130. return "", err
  131. }
  132. udpMdel := s.buildUdpForwardingModel(&req.UdpForwardingData, req.UdpForwardingData.WafUdpId, require)
  133. udpMdel.Id = req.Id
  134. if err := s.udpForWardingRepository.EditUdpForwarding(ctx, udpMdel); err != nil {
  135. return "", err
  136. }
  137. return "", nil
  138. }
  139. func (s *udpForWardingService) DeleteUdpForwarding(ctx context.Context, wafUdpId int) (string, error) {
  140. res, err := s.crawler.DeleteRule(ctx, wafUdpId, "admin/delete/waf_udp?page=1&__pageSize=10&__sort=waf_udp_id&__sort_type=desc")
  141. if err != nil {
  142. return "", err
  143. }
  144. return res, nil
  145. }