1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package web
- import (
- "context"
- "fmt"
- v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
- "github.com/go-nunu/nunu-layout-advanced/internal/model"
- )
- // 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
- }
|