cciplist.go 4.7 KB

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