tcpforwarding.go 4.5 KB

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