cc.go 3.1 KB

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