proxy.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package service
  2. import (
  3. "context"
  4. "encoding/json"
  5. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/repository"
  8. )
  9. type ProxyService interface {
  10. GetProxyId (ctx context.Context, cdnWebId int64) (int64, error)
  11. GetProxy (ctx context.Context, id int64) (*model.Proxy, error)
  12. GetProxyData (ctx context.Context, cdnWebId int64) (*model.Proxy, error)
  13. EditProxy (ctx context.Context, cdnWebId int64, req v1.ProxyProtocolJSON) error
  14. }
  15. func NewProxyService(
  16. service *Service,
  17. proxyRep repository.ProxyRepository,
  18. cdn CdnService,
  19. ) ProxyService {
  20. return &proxyService{
  21. Service: service,
  22. proxyRep: proxyRep,
  23. cdn: cdn,
  24. }
  25. }
  26. type proxyService struct {
  27. *Service
  28. proxyRep repository.ProxyRepository
  29. cdn CdnService
  30. }
  31. func (s *proxyService) GetProxyId (ctx context.Context, cdnWebId int64) (int64, error) {
  32. id, err := s.proxyRep.GetProxyId(ctx, cdnWebId)
  33. if err != nil {
  34. return 0, err
  35. }
  36. return id, nil
  37. }
  38. func (s *proxyService) GetProxy (ctx context.Context, id int64) (*model.Proxy, error) {
  39. res, err := s.proxyRep.GetProxy(ctx, id)
  40. if err != nil {
  41. return nil, err
  42. }
  43. return res, nil
  44. }
  45. func (s *proxyService) GetProxyData (ctx context.Context, cdnWebId int64) (*model.Proxy, error) {
  46. id,err := s.proxyRep.GetProxyId(ctx, cdnWebId)
  47. if err != nil {
  48. return nil, err
  49. }
  50. data, err := s.proxyRep.GetProxy(ctx, id)
  51. if err != nil {
  52. return nil, err
  53. }
  54. return data, nil
  55. }
  56. func (r *proxyService) EditProxy(ctx context.Context,cdnWebId int64, req v1.ProxyProtocolJSON) error {
  57. proxyData, err := r.GetProxyData(ctx, cdnWebId)
  58. if err != nil {
  59. return err
  60. }
  61. var reqJson []byte
  62. reqJson, err = json.Marshal(req)
  63. if err != nil {
  64. return err
  65. }
  66. var addHeaders []string
  67. err = json.Unmarshal([]byte(proxyData.AddHeaders), &addHeaders)
  68. if err != nil {
  69. return err
  70. }
  71. if err := r.cdn.EditProxy(ctx, v1.Proxy{
  72. AddHeaders: addHeaders,
  73. ReverseProxyId: proxyData.Id,
  74. RequestHostType: proxyData.RequestHostType,
  75. RequestHost: proxyData.RequestHost,
  76. RequestHostExcludingPort: proxyData.RequestHostExcludingPort,
  77. RequestURI: proxyData.RequestURI,
  78. StripPrefix: proxyData.StripPrefix,
  79. AutoFlush: proxyData.AutoFlush,
  80. ProxyProtocolJSON: reqJson,
  81. FollowRedirects: proxyData.FollowRedirects,
  82. Retry50X: proxyData.Retry50X,
  83. Retry40X: proxyData.Retry40X,
  84. }); err != nil {
  85. return err
  86. }
  87. return nil
  88. }