static_provider.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package auximageprovider
  2. import (
  3. "context"
  4. "net/http"
  5. "github.com/imgproxy/imgproxy/v3/imagedata"
  6. "github.com/imgproxy/imgproxy/v3/options"
  7. )
  8. // staticProvider is a simple implementation of ImageProvider, which returns
  9. // a static saved image data and headers.
  10. type staticProvider struct {
  11. data imagedata.ImageData
  12. headers http.Header
  13. }
  14. // Get returns the static image data and headers stored in the provider.
  15. func (s *staticProvider) Get(_ context.Context, _ *options.Options) (imagedata.ImageData, http.Header, error) {
  16. return s.data, s.headers.Clone(), nil
  17. }
  18. // NewStaticFromTriple creates a new ImageProvider from either a base64 string, file path, or URL
  19. func NewStaticProvider(
  20. ctx context.Context,
  21. c *StaticConfig,
  22. desc string,
  23. idf *imagedata.Factory,
  24. ) (Provider, error) {
  25. var (
  26. data imagedata.ImageData
  27. headers = make(http.Header)
  28. err error
  29. )
  30. switch {
  31. case len(c.Base64Data) > 0:
  32. data, err = idf.NewFromBase64(c.Base64Data)
  33. case len(c.Path) > 0:
  34. data, err = idf.NewFromPath(c.Path)
  35. case len(c.URL) > 0:
  36. data, headers, err = idf.DownloadSync(
  37. ctx, c.URL, desc, imagedata.DownloadOptions{},
  38. )
  39. default:
  40. return nil, nil
  41. }
  42. if err != nil {
  43. return nil, err
  44. }
  45. return &staticProvider{
  46. data: data,
  47. headers: headers,
  48. }, nil
  49. }