cciplist.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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. )
  10. type CcIpListService interface {
  11. GetCcIpList(ctx context.Context, webId int64) ([]string, error)
  12. AddCcIpListPolicy(ctx context.Context, serverId int64,serverGroupId int64) error
  13. AddCcWhiteIp(ctx context.Context, webId int64,ip string) error
  14. DelCcWhiteIp(ctx context.Context, webId int64,ips []string) error
  15. EditCcWhiteIp(ctx context.Context, webId int64,oldIp string,newIp string) error
  16. }
  17. func NewCcIpListService(
  18. service *service.Service,
  19. ccIpListRepository flexCdn.CcIpListRepository,
  20. cdn CdnService,
  21. webForwardingRep waf.WebForwardingRepository,
  22. ) CcIpListService {
  23. return &ccIpListService{
  24. Service: service,
  25. ccIpListRepository: ccIpListRepository,
  26. cdn: cdn,
  27. webForwardingRep: webForwardingRep,
  28. }
  29. }
  30. type ccIpListService struct {
  31. *service.Service
  32. ccIpListRepository flexCdn.CcIpListRepository
  33. cdn CdnService
  34. webForwardingRep waf.WebForwardingRepository
  35. }
  36. func (s *ccIpListService) GetServerId(ctx context.Context, webId int64) (int64, error) {
  37. webData, err := s.webForwardingRep.GetWebForwarding(ctx, webId)
  38. if err != nil {
  39. return 0, err
  40. }
  41. return int64(webData.CdnWebId), nil
  42. }
  43. func (s *ccIpListService) GetCcIpList(ctx context.Context, webId int64) ([]string, error) {
  44. webData, err := s.webForwardingRep.GetWebForwarding(ctx, webId)
  45. if err != nil {
  46. return nil, err
  47. }
  48. return s.ccIpListRepository.GetCcIpList(ctx, int64(webData.CdnWebId))
  49. }
  50. func (s *ccIpListService) AddCcIpListPolicy(ctx context.Context, serverId int64,serverGroupId int64) error {
  51. httpWebId, err := s.ccIpListRepository.GetHttpWebId(ctx, serverId)
  52. if err != nil {
  53. return err
  54. }
  55. // 创建用户自定义防火墙策略
  56. httpFirewallPolicyId, err := s.cdn.AddWafPolicy(ctx, v1.AddWafPolicy{
  57. IsOn: true,
  58. ServerId: serverId,
  59. ServerGroupId: serverGroupId,
  60. Name: "用户自定义防火墙策略",
  61. Description: "",
  62. })
  63. if err != nil {
  64. return err
  65. }
  66. if httpFirewallPolicyId == 0 {
  67. return fmt.Errorf("创建用户自定义防火墙策略失败")
  68. }
  69. // 修改防火墙
  70. err = s.cdn.EditHTTPWebFirewal(ctx, httpWebId, v1.Firewall{
  71. IsOn: true,
  72. IsPrior: false,
  73. FirewallPolicyId: httpFirewallPolicyId,
  74. IgnoreGlobalRules: true,
  75. DefaultCaptchaType: "none",
  76. })
  77. if err != nil {
  78. return err
  79. }
  80. return nil
  81. }
  82. // 添加白名单
  83. func (s *ccIpListService) AddCcWhiteIp(ctx context.Context, serverId int64,ip string) error {
  84. ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white")
  85. if err != nil {
  86. return err
  87. }
  88. err = s.cdn.AddIpItem(ctx,v1.AddIpItem{
  89. IpListId: ipListId,
  90. Value: ip,
  91. EventLevel: "notice",
  92. SourceCategory: "cc",
  93. })
  94. if err != nil {
  95. return err
  96. }
  97. return nil
  98. }
  99. func (s *ccIpListService) EditCcWhiteIp(ctx context.Context, webId int64,oldIp string,newIp string) error {
  100. serverId, err := s.GetServerId(ctx, webId)
  101. if err != nil {
  102. return err
  103. }
  104. ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white")
  105. if err != nil {
  106. return err
  107. }
  108. ipItemId, err := s.ccIpListRepository.GetIpId(ctx, ipListId,oldIp,"cc")
  109. if err != nil {
  110. return err
  111. }
  112. err = s.cdn.EditIpItem(ctx,v1.AddIpItem{
  113. IpItemId: ipItemId,
  114. Value: newIp,
  115. EventLevel: "notice",
  116. SourceCategory: "cc",
  117. })
  118. if err != nil {
  119. return err
  120. }
  121. return nil
  122. }
  123. func (s *ccIpListService) DelCcWhiteIp(ctx context.Context, webId int64,ips []string) error {
  124. serverId, err := s.GetServerId(ctx, webId)
  125. if err != nil {
  126. return err
  127. }
  128. for _,ip := range ips {
  129. ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white")
  130. if err != nil {
  131. return err
  132. }
  133. ipItemId, err := s.ccIpListRepository.GetIpId(ctx, ipListId,ip,"cc")
  134. if err != nil {
  135. return err
  136. }
  137. err = s.cdn.DelIpItem(ctx,ipItemId,ip,"", "", ipListId)
  138. if err != nil {
  139. return err
  140. }
  141. }
  142. return nil
  143. }