cc.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package waf
  2. import (
  3. "context"
  4. "fmt"
  5. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  6. flexCdnRep "github.com/go-nunu/nunu-layout-advanced/internal/repository/api/flexCdn"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/repository/api/waf"
  8. "github.com/go-nunu/nunu-layout-advanced/internal/service"
  9. "github.com/go-nunu/nunu-layout-advanced/internal/service/api/flexCdn"
  10. "time"
  11. )
  12. type CcService interface {
  13. GetCcList(ctx context.Context, req v1.CCListRequest) ([]v1.CCListResponse, error)
  14. EditCcState(ctx context.Context, req v1.CCStateRequest) error
  15. // 修改CC配置
  16. EditCcConfig(ctx context.Context,webId int64, req v1.CcConfigRequest) error
  17. // 一键加白
  18. AddWhiteOneClick (ctx context.Context, req v1.CCStateRequest) error
  19. }
  20. func NewCcService(
  21. service *service.Service,
  22. ccRepository flexCdnRep.CcRepository,
  23. webForwardingRep waf.WebForwardingRepository,
  24. cdn flexCdn.CdnService,
  25. ccIpList CcIpListService,
  26. ) CcService {
  27. return &ccService{
  28. Service: service,
  29. ccRepository: ccRepository,
  30. webForwardingRep: webForwardingRep,
  31. cdn: cdn,
  32. ccIpList: ccIpList,
  33. }
  34. }
  35. type ccService struct {
  36. *service.Service
  37. ccRepository flexCdnRep.CcRepository
  38. webForwardingRep waf.WebForwardingRepository
  39. cdn flexCdn.CdnService
  40. ccIpList CcIpListService
  41. }
  42. func (s *ccService) GetCcList(ctx context.Context, req v1.CCListRequest) ([]v1.CCListResponse, error) {
  43. webData, err := s.webForwardingRep.GetWebForwarding(ctx, req.WebId)
  44. if err != nil {
  45. return nil, err
  46. }
  47. if webData.CdnWebId == 0 {
  48. return nil, fmt.Errorf("网站不存在")
  49. }
  50. ccList, err := s.ccRepository.GetCcList(ctx, int64(webData.CdnWebId))
  51. if err != nil {
  52. return nil, err
  53. }
  54. var res []v1.CCListResponse
  55. for _, v := range ccList {
  56. res = append(res, v1.CCListResponse{
  57. Value: v.Value,
  58. Type: v.Type,
  59. Reason: v.Reason,
  60. SourceURL: v.SourceURL,
  61. SourceUserAgent: v.SourceUserAgent,
  62. CreatedAt: time.Unix(v.CreatedAt, 0).Format("2006-01-02 15:04:05"),
  63. ExpiredAt: time.Unix(v.ExpiredAt, 0).Format("2006-01-02 15:04:05"),
  64. })
  65. }
  66. return res, nil
  67. }
  68. func (s *ccService) EditCcState(ctx context.Context, req v1.CCStateRequest) error {
  69. for _, v := range req.Ips {
  70. webData, err := s.webForwardingRep.GetWebForwarding(ctx, req.WebId)
  71. if err != nil {
  72. return err
  73. }
  74. if webData.CdnWebId == 0 {
  75. return fmt.Errorf("网站不存在")
  76. }
  77. ccId, err := s.ccRepository.GetCcId(ctx, int64(webData.CdnWebId), v)
  78. if err != nil {
  79. return err
  80. }
  81. if ccId == 0 {
  82. return fmt.Errorf("IP不存在")
  83. }
  84. err = s.cdn.DelIpItem(ctx, ccId, v, "", "", 2000000000)
  85. if err != nil {
  86. return err
  87. }
  88. }
  89. return nil
  90. }
  91. // 一键加白
  92. func (s *ccService) AddWhiteOneClick (ctx context.Context, req v1.CCStateRequest) error {
  93. err := s.EditCcState(ctx, req)
  94. if err != nil {
  95. return err
  96. }
  97. for _, v := range req.Ips {
  98. err = s.ccIpList.AddCcWhiteIp(ctx, req.WebId, v, "")
  99. if err != nil {
  100. return err
  101. }
  102. }
  103. return nil
  104. }
  105. // 修改CC配置
  106. func (s *ccService) EditCcConfig(ctx context.Context,webId int64, req v1.CcConfigRequest) error {
  107. webConfigId, err := s.webForwardingRep.GetWebConfigId(ctx, webId)
  108. if err != nil {
  109. return err
  110. }
  111. configThreshold := []struct{
  112. MaxRequests int `json:"maxRequests"`
  113. BlockSeconds int `json:"blockSeconds"`
  114. PeriodSeconds int `json:"periodSeconds"`
  115. }{
  116. {MaxRequests: req.Limit5s},
  117. {MaxRequests: req.Limit60s},
  118. {MaxRequests: req.Limit300s},
  119. }
  120. if err := s.cdn.EditCcConfig(ctx, webConfigId, v1.CcConfig{
  121. IsOn: req.IsOn,
  122. ThresholdMethod: req.ThresholdMethod,
  123. Thresholds: configThreshold,
  124. Level: req.Level,
  125. UseDefaultThresholds : true,
  126. EnableGET302: true,
  127. EnableFingerprint : true,
  128. IgnoreCommonFiles : true,
  129. }); err != nil {
  130. return err
  131. }
  132. return nil
  133. }