origin.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package web
  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/model"
  7. )
  8. // CreateOriginServers 创建源站服务器
  9. func (s *AidedWebService) CreateOriginServers(ctx context.Context, req *v1.WebForwardingRequest) (map[string]int64, error) {
  10. cdnOriginIds := make(map[string]int64)
  11. for _, backend := range req.WebForwardingData.BackendList {
  12. apiType := s.GetProtocolType(backend.IsHttps)
  13. id, err := s.wafformatter.AddOrigin(ctx, v1.WebJson{
  14. ApiType: apiType,
  15. BackendList: backend.Addr,
  16. Host: backend.CustomHost,
  17. Comment: req.WebForwardingData.Comment,
  18. })
  19. if err != nil {
  20. return nil, fmt.Errorf("添加源站 %s 失败: %w", backend.Addr, err)
  21. }
  22. cdnOriginIds[backend.Addr] = id
  23. }
  24. return cdnOriginIds, nil
  25. }
  26. // AddOriginsToWebsite 添加源站到网站
  27. func (s *AidedWebService) AddOriginsToWebsite(ctx context.Context, req *v1.WebForwardingRequest, webId int64) (map[string]int64, error) {
  28. cdnOriginIds, err := s.CreateOriginServers(ctx, req)
  29. if err != nil {
  30. return nil, fmt.Errorf("创建源站服务器失败: %w", err)
  31. }
  32. // 添加源站到网站
  33. for _, originId := range cdnOriginIds {
  34. if err := s.cdn.AddServerOrigin(ctx, webId, originId); err != nil {
  35. return nil, fmt.Errorf("添加源站到网站失败: %w", err)
  36. }
  37. }
  38. return cdnOriginIds, nil
  39. }
  40. // UpdateOriginServers 更新源站服务器
  41. func (s *AidedWebService) UpdateOriginServers(ctx context.Context, req *v1.WebForwardingRequest, oldData *model.WebForwarding, ipData *model.WebForwardingRule) error {
  42. addOrigins, delOrigins := s.FindDifferenceList(ipData.BackendList, req.WebForwardingData.BackendList)
  43. addedIds := make(map[string]int64)
  44. // 添加新源站
  45. for _, v := range addOrigins {
  46. apiType := s.GetProtocolType(v.IsHttps)
  47. id, err := s.wafformatter.AddOrigin(ctx, v1.WebJson{
  48. ApiType: apiType,
  49. BackendList: v.Addr,
  50. Host: v.CustomHost,
  51. Comment: req.WebForwardingData.Comment,
  52. })
  53. if err != nil {
  54. return fmt.Errorf("添加源站 %s 失败: %w", v.Addr, err)
  55. }
  56. addedIds[v.Addr] = id
  57. }
  58. // 将新源站添加到网站
  59. for _, v := range addedIds {
  60. if err := s.cdn.AddServerOrigin(ctx, int64(oldData.CdnWebId), v); err != nil {
  61. return fmt.Errorf("添加源站到网站失败: %w", err)
  62. }
  63. }
  64. // 删除旧源站
  65. for k, v := range ipData.CdnOriginIds {
  66. for _, ip := range delOrigins {
  67. if k == ip.Addr {
  68. if err := s.cdn.DelServerOrigin(ctx, int64(oldData.CdnWebId), v); err != nil {
  69. return fmt.Errorf("删除源站失败: %w", err)
  70. }
  71. delete(ipData.CdnOriginIds, k)
  72. }
  73. }
  74. }
  75. // 合并新的源站ID
  76. for k, v := range addedIds {
  77. ipData.CdnOriginIds[k] = v
  78. }
  79. return nil
  80. }