package flexCdn import ( "context" "fmt" v1 "github.com/go-nunu/nunu-layout-advanced/api/v1" "github.com/go-nunu/nunu-layout-advanced/internal/repository/api/flexCdn" "github.com/go-nunu/nunu-layout-advanced/internal/service" ) type CcIpListService interface { GetCcIpList(ctx context.Context, serverId int64) ([]string, error) AddCcIpListPolicy(ctx context.Context, serverId int64,serverGroupId int64,httpWebId int64) error } func NewCcIpListService( service *service.Service, ccIpListRepository flexCdn.CcIpListRepository, cdn CdnService, ) CcIpListService { return &ccIpListService{ Service: service, ccIpListRepository: ccIpListRepository, cdn: cdn, } } type ccIpListService struct { *service.Service ccIpListRepository flexCdn.CcIpListRepository cdn CdnService } func (s *ccIpListService) GetCcIpList(ctx context.Context, serverId int64) ([]string, error) { return s.ccIpListRepository.GetCcIpList(ctx, serverId) } func (s *ccIpListService) AddCcIpListPolicy(ctx context.Context, serverId int64,serverGroupId int64,httpWebId int64) error { // 创建用户自定义防火墙策略 httpFirewallPolicyId, err := s.cdn.AddWafPolicy(ctx, v1.AddWafPolicy{ IsOn: true, ServerId: serverId, ServerGroupId: serverGroupId, Name: "用户自定义防火墙策略", Description: "", }) if err != nil { return err } if httpFirewallPolicyId == 0 { return fmt.Errorf("创建用户自定义防火墙策略失败") } // 修改防火墙 err = s.cdn.EditHTTPWebFirewal(ctx, httpWebId, v1.Firewall{ IsOn: true, IsPrior: false, FirewallPolicyId: httpFirewallPolicyId, IgnoreGlobalRules: false, DefaultCaptchaType: "default", }) if err != nil { return err } return nil } // 添加白名单 func (s *ccIpListService) AddCcWhiteIp(ctx context.Context, serverId int64,ip string) error { ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white") if err != nil { return err } err = s.cdn.AddIpItem(ctx,v1.AddIpItem{ IpListId: ipListId, Value: ip, EventLevel: "notice", SourceCategory: "cc", }) if err != nil { return err } return nil } func (s *ccIpListService) DelCcWhiteIp(ctx context.Context, serverId int64,ip string) error { ipListId, err := s.ccIpListRepository.GetIpListId(ctx, serverId,"white") if err != nil { return err } ipItemId, err := s.ccIpListRepository.GetIpId(ctx, ipListId,ip,"cc") if err != nil { return err } err = s.cdn.DelIpItem(ctx,ipItemId,ip,"", "", ipListId) if err != nil { return err } return nil }