round_tripper.go 883 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package transport
  2. import (
  3. "net/http"
  4. "github.com/imgproxy/imgproxy/v3/storage"
  5. )
  6. // RoundTripper wraps storage with http.RoundTripper
  7. type RoundTripper struct {
  8. http.RoundTripper
  9. storage storage.Reader
  10. querySeparator string
  11. }
  12. // New creates a new RoundTripper
  13. func NewRoundTripper(storage storage.Reader, querySeparator string) *RoundTripper {
  14. return &RoundTripper{
  15. storage: storage,
  16. querySeparator: querySeparator,
  17. }
  18. }
  19. // RoundTrip implements the http.RoundTripper interface
  20. func (t RoundTripper) RoundTrip(req *http.Request) (resp *http.Response, err error) {
  21. // Parse container and object name from the URL
  22. container, key, query := GetBucketAndKey(req.URL, t.querySeparator)
  23. // Call GetObject
  24. r, err := t.storage.GetObject(req.Context(), req.Header, container, key, query)
  25. if err != nil {
  26. return nil, err
  27. }
  28. return r.Response(req), nil
  29. }