cciplist.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. IpFrom: ip,
  92. IpTo: ip,
  93. EventLevel: "notice",
  94. SourceCategory: "cc",
  95. })
  96. if err != nil {
  97. return err
  98. }
  99. return nil
  100. }
  101. func (s *ccIpListService) EditCcWhiteIp(ctx context.Context, webId int64,oldIp string,newIp string) error {
  102. serverId, err := s.GetServerId(ctx, webId)
  103. if err != nil {
  104. return err
  105. }
  106. ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white")
  107. if err != nil {
  108. return err
  109. }
  110. ipItemId, err := s.ccIpListRepository.GetIpId(ctx, ipListId,oldIp,"cc")
  111. if err != nil {
  112. return err
  113. }
  114. err = s.cdn.EditIpItem(ctx,v1.AddIpItem{
  115. IpItemId: ipItemId,
  116. Value: newIp,
  117. IpFrom: newIp,
  118. IpTo: newIp,
  119. EventLevel: "notice",
  120. SourceCategory: "cc",
  121. })
  122. if err != nil {
  123. return err
  124. }
  125. return nil
  126. }
  127. func (s *ccIpListService) DelCcWhiteIp(ctx context.Context, webId int64,ips []string) error {
  128. serverId, err := s.GetServerId(ctx, webId)
  129. if err != nil {
  130. return err
  131. }
  132. for _,ip := range ips {
  133. ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white")
  134. if err != nil {
  135. return err
  136. }
  137. ipItemId, err := s.ccIpListRepository.GetIpId(ctx, ipListId,ip,"cc")
  138. if err != nil {
  139. return err
  140. }
  141. err = s.cdn.DelIpItem(ctx,ipItemId,ip,"", "", ipListId)
  142. if err != nil {
  143. return err
  144. }
  145. }
  146. return nil
  147. }