pico

created pr with 69.1 on 2025-06-08T14:58:33Z · by c8ef7d19
added 69.2 on 2025-06-08T15:26:57Z · by c8ef7d19
1: 827f272 = 1: 827f272 feat(storage): base storage fn
2: e63282c = 2: e63282c feat(prose): use storage base for prose
3: 2a52510 = 3: 2a52510 refactor(prose): use fs adapter for images
-: ------- > 4: 6ddc654 refactor: proxy headers for images
cmds
checkout latest patchset:
ssh pr.pico.sh print 69 | git am -3
checkout any patchset in a patch request:
ssh pr.pico.sh print 69.[rev] | git am -3
add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add 69
+1 -1 pkg/apps/prose/api.go #
......@@ -897,7 +897,7 @@ func imgRequest(w http.ResponseWriter, r *http.Request) {
897897 }
898898
899899 fmt.Println("HERERERERER", fname, opts)
900- contents, info, err := st.ServeObject(bucket, fname, opts)
900+ contents, info, err := st.ServeObject(r, bucket, fname, opts)
901901 if err != nil {
902902 logger.Error("serve object", "err", err)
903903 http.Error(w, err.Error(), http.StatusUnprocessableEntity)
+3 -2 pkg/shared/storage/fs.go #
......@@ -4,6 +4,7 @@ import (
44 "fmt"
55 "io"
66 "log/slog"
7+ "net/http"
78 "os"
89 "path/filepath"
910 "strings"
......@@ -25,7 +26,7 @@ func NewStorageFS(logger *slog.Logger, dir string) (*StorageFS, error) {
2526 return &StorageFS{st, logger}, nil
2627 }
2728
28-func (s *StorageFS) ServeObject(bucket sst.Bucket, fpath string, opts *ImgProcessOpts) (io.ReadCloser, *sst.ObjectInfo, error) {
29+func (s *StorageFS) ServeObject(r *http.Request, bucket sst.Bucket, fpath string, opts *ImgProcessOpts) (io.ReadCloser, *sst.ObjectInfo, error) {
2930 var rc io.ReadCloser
3031 info := &sst.ObjectInfo{}
3132 var err error
......@@ -40,7 +41,7 @@ func (s *StorageFS) ServeObject(bucket sst.Bucket, fpath string, opts *ImgProces
4041 } else {
4142 filePath := filepath.Join(bucket.Name, fpath)
4243 dataURL := fmt.Sprintf("local:///%s", filePath)
43- rc, info, err = HandleProxy(s.Logger, dataURL, opts)
44+ rc, info, err = HandleProxy(r, s.Logger, dataURL, opts)
4445 }
4546 if err != nil {
4647 return nil, nil, err
+1 -1 pkg/shared/storage/memory.go #
......@@ -21,7 +21,7 @@ func NewStorageMemory(sto map[string]map[string]string) (*StorageMemory, error)
2121 return &StorageMemory{st}, nil
2222 }
2323
24-func (s *StorageMemory) ServeObject(bucket sst.Bucket, fpath string, opts *ImgProcessOpts) (io.ReadCloser, *sst.ObjectInfo, error) {
24+func (s *StorageMemory) ServeObject(r *http.Request, bucket sst.Bucket, fpath string, opts *ImgProcessOpts) (io.ReadCloser, *sst.ObjectInfo, error) {
2525 obj, info, err := s.GetObject(bucket, fpath)
2626 if info.Metadata == nil {
2727 info.Metadata = make(http.Header)
+3 -2 pkg/shared/storage/minio.go #
......@@ -4,6 +4,7 @@ import (
44 "fmt"
55 "io"
66 "log/slog"
7+ "net/http"
78 "os"
89 "path/filepath"
910 "strings"
......@@ -24,7 +25,7 @@ func NewStorageMinio(logger *slog.Logger, address, user, pass string) (*StorageM
2425 return &StorageMinio{st}, nil
2526 }
2627
27-func (s *StorageMinio) ServeObject(bucket sst.Bucket, fpath string, opts *ImgProcessOpts) (io.ReadCloser, *sst.ObjectInfo, error) {
28+func (s *StorageMinio) ServeObject(r *http.Request, bucket sst.Bucket, fpath string, opts *ImgProcessOpts) (io.ReadCloser, *sst.ObjectInfo, error) {
2829 var rc io.ReadCloser
2930 info := &sst.ObjectInfo{}
3031 var err error
......@@ -39,7 +40,7 @@ func (s *StorageMinio) ServeObject(bucket sst.Bucket, fpath string, opts *ImgPro
3940 } else {
4041 filePath := filepath.Join(bucket.Name, fpath)
4142 dataURL := fmt.Sprintf("s3://%s", filePath)
42- rc, info, err = HandleProxy(s.Logger, dataURL, opts)
43+ rc, info, err = HandleProxy(r, s.Logger, dataURL, opts)
4344 }
4445 if err != nil {
4546 return nil, nil, err
+11 -2 pkg/shared/storage/proxy.go #
......@@ -133,7 +133,7 @@ func (img *ImgProcessOpts) String() string {
133133 return processOpts
134134 }
135135
136-func HandleProxy(logger *slog.Logger, dataURL string, opts *ImgProcessOpts) (io.ReadCloser, *storage.ObjectInfo, error) {
136+func HandleProxy(r *http.Request, logger *slog.Logger, dataURL string, opts *ImgProcessOpts) (io.ReadCloser, *storage.ObjectInfo, error) {
137137 imgProxyURL := os.Getenv("IMGPROXY_URL")
138138 imgProxySalt := os.Getenv("IMGPROXY_SALT")
139139 imgProxyKey := os.Getenv("IMGPROXY_KEY")
......@@ -162,7 +162,16 @@ func HandleProxy(logger *slog.Logger, dataURL string, opts *ImgProcessOpts) (io.
162162 }
163163 proxyAddress := fmt.Sprintf("%s/%s%s", imgProxyURL, signature, processPath)
164164
165- res, err := http.Get(proxyAddress)
165+ req, err := http.NewRequest(http.MethodGet, proxyAddress, nil)
166+ if err != nil {
167+ return nil, nil, err
168+ }
169+ req.Header.Set("accept", r.Header.Get("accept"))
170+ req.Header.Set("accept-encoding", r.Header.Get("accept-encoding"))
171+ req.Header.Set("accept-language", r.Header.Get("accept-language"))
172+ req.Header.Set("content-type", r.Header.Get("content-type"))
173+ fmt.Println("HEADERS", req.Header)
174+ res, err := http.DefaultClient.Do(req)
166175 if err != nil {
167176 return nil, nil, err
168177 }
+2 -1 pkg/shared/storage/storage.go #
......@@ -2,11 +2,12 @@ package storage
22
33 import (
44 "io"
5+ "net/http"
56
67 sst "github.com/picosh/pico/pkg/pobj/storage"
78 )
89
910 type StorageServe interface {
1011 sst.ObjectStorage
11- ServeObject(bucket sst.Bucket, fpath string, opts *ImgProcessOpts) (io.ReadCloser, *sst.ObjectInfo, error)
12+ ServeObject(r *http.Request, bucket sst.Bucket, fpath string, opts *ImgProcessOpts) (io.ReadCloser, *sst.ObjectInfo, error)
1213 }
Back to top