cciplist.go 4.2 KB

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