cciplist.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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,comment string) error
  14. DelCcWhiteIp(ctx context.Context, webId int64,ips []string) error
  15. EditCcWhiteIp(ctx context.Context, webId int64,oldIp string,newIp string,comment 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,comment 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. count, err := s.ccIpListRepository.GetCcIpCount(ctx,ipListId, ip,"cc")
  93. if err != nil {
  94. return err
  95. }
  96. if count > 0 {
  97. return fmt.Errorf("ip已存在")
  98. }
  99. err = s.cdn.AddIpItem(ctx,v1.AddIpItem{
  100. IpListId: ipListId,
  101. Value: ip,
  102. Reason: comment,
  103. EventLevel: "notice",
  104. SourceCategory: "cc",
  105. })
  106. if err != nil {
  107. return err
  108. }
  109. return nil
  110. }
  111. func (s *ccIpListService) EditCcWhiteIp(ctx context.Context, webId int64,oldIp string,newIp string,comment string) error {
  112. serverId, err := s.GetServerId(ctx, webId)
  113. if err != nil {
  114. return err
  115. }
  116. ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white")
  117. if err != nil {
  118. return err
  119. }
  120. count, err := s.ccIpListRepository.GetCcIpCount(ctx,ipListId, newIp,"cc")
  121. if err != nil {
  122. return err
  123. }
  124. if count > 0 {
  125. return fmt.Errorf("ip已存在")
  126. }
  127. ipItemId, err := s.ccIpListRepository.GetIpId(ctx, ipListId,oldIp,"cc")
  128. if err != nil {
  129. return err
  130. }
  131. err = s.cdn.EditIpItem(ctx,v1.AddIpItem{
  132. IpItemId: ipItemId,
  133. Value: newIp,
  134. Reason: comment,
  135. EventLevel: "notice",
  136. SourceCategory: "cc",
  137. })
  138. if err != nil {
  139. return err
  140. }
  141. return nil
  142. }
  143. func (s *ccIpListService) DelCcWhiteIp(ctx context.Context, webId int64,ips []string) error {
  144. serverId, err := s.GetServerId(ctx, webId)
  145. if err != nil {
  146. return err
  147. }
  148. for _,ip := range ips {
  149. ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white")
  150. if err != nil {
  151. return err
  152. }
  153. ipItemId, err := s.ccIpListRepository.GetIpId(ctx, ipListId,ip,"cc")
  154. if err != nil {
  155. return err
  156. }
  157. err = s.cdn.DelIpItem(ctx,ipItemId,ip,"", "", ipListId)
  158. if err != nil {
  159. return err
  160. }
  161. }
  162. return nil
  163. }