cc.go 3.6 KB

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