123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package web
- import (
- "context"
- "fmt"
- v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
- "github.com/go-nunu/nunu-layout-advanced/internal/model"
- )
- type Origin interface {
- CreateOriginServers(ctx context.Context, req *v1.WebForwardingRequest) (map[string]int64, error)
- AddOriginsToWebsite(ctx context.Context, req *v1.WebForwardingRequest, webId int64) (map[string]int64, error)
- UpdateOriginServers(ctx context.Context, req *v1.WebForwardingRequest, oldData *model.WebForwarding, ipData *model.WebForwardingRule) error
- }
- // CreateOriginServers 创建源站服务器
- func (s *aidedWebService) CreateOriginServers(ctx context.Context, req *v1.WebForwardingRequest) (map[string]int64, error) {
- cdnOriginIds := make(map[string]int64)
- for _, backend := range req.WebForwardingData.BackendList {
- apiType := s.GetProtocolType(backend.IsHttps)
- id, err := s.wafformatter.AddOrigin(ctx, v1.WebJson{
- ApiType: apiType,
- BackendList: backend.Addr,
- Host: backend.CustomHost,
- Comment: req.WebForwardingData.Comment,
- })
- if err != nil {
- return nil, fmt.Errorf("添加源站 %s 失败: %w", backend.Addr, err)
- }
- cdnOriginIds[backend.Addr] = id
- }
- return cdnOriginIds, nil
- }
- // AddOriginsToWebsite 添加源站到网站
- func (s *aidedWebService) AddOriginsToWebsite(ctx context.Context, req *v1.WebForwardingRequest, webId int64) (map[string]int64, error) {
- cdnOriginIds, err := s.CreateOriginServers(ctx, req)
- if err != nil {
- return nil, fmt.Errorf("创建源站服务器失败: %w", err)
- }
- // 添加源站到网站
- for _, originId := range cdnOriginIds {
- if err := s.cdn.AddServerOrigin(ctx, webId, originId); err != nil {
- return nil, fmt.Errorf("添加源站到网站失败: %w", err)
- }
- }
- return cdnOriginIds, nil
- }
- // UpdateOriginServers 更新源站服务器
- func (s *aidedWebService) UpdateOriginServers(ctx context.Context, req *v1.WebForwardingRequest, oldData *model.WebForwarding, ipData *model.WebForwardingRule) error {
- addOrigins, delOrigins := s.FindDifferenceList(ipData.BackendList, req.WebForwardingData.BackendList)
- addedIds := make(map[string]int64)
- // 添加新源站
- for _, v := range addOrigins {
- apiType := s.GetProtocolType(v.IsHttps)
- id, err := s.wafformatter.AddOrigin(ctx, v1.WebJson{
- ApiType: apiType,
- BackendList: v.Addr,
- Host: v.CustomHost,
- Comment: req.WebForwardingData.Comment,
- })
- if err != nil {
- return fmt.Errorf("添加源站 %s 失败: %w", v.Addr, err)
- }
- addedIds[v.Addr] = id
- }
- // 将新源站添加到网站
- for _, v := range addedIds {
- if err := s.cdn.AddServerOrigin(ctx, int64(oldData.CdnWebId), v); err != nil {
- return fmt.Errorf("添加源站到网站失败: %w", err)
- }
- }
- // 删除旧源站
- for k, v := range ipData.CdnOriginIds {
- for _, ip := range delOrigins {
- if k == ip.Addr {
- if err := s.cdn.DelServerOrigin(ctx, int64(oldData.CdnWebId), v); err != nil {
- return fmt.Errorf("删除源站失败: %w", err)
- }
- delete(ipData.CdnOriginIds, k)
- }
- }
- }
- // 合并新的源站ID
- for k, v := range addedIds {
- ipData.CdnOriginIds[k] = v
- }
- return nil
- }
|