From 05a176370a08cf8eea3183af07358579b5092305 Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Tue, 14 Feb 2023 16:16:35 +0100 Subject: [PATCH] Fix missing filesystem metadata and middlewares --- app/api/api.go | 6 ++++++ http/handler/filesystem.go | 2 +- http/server.go | 17 +++++++++++++---- io/fs/fs.go | 2 +- io/fs/sized.go | 6 +++--- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/app/api/api.go b/app/api/api.go index 9610f842..f82846f5 100644 --- a/app/api/api.go +++ b/app/api/api.go @@ -389,6 +389,12 @@ func (a *api) start() error { return fmt.Errorf("disk filesystem: %w", err) } + if diskfsRoot, err := filepath.Abs(cfg.Storage.Disk.Dir); err != nil { + return err + } else { + diskfs.SetMetadata("base", diskfsRoot) + } + a.diskfs = diskfs baseMemFS := url.URL{ diff --git a/http/handler/filesystem.go b/http/handler/filesystem.go index 73adde44..a8277e7c 100644 --- a/http/handler/filesystem.go +++ b/http/handler/filesystem.go @@ -84,7 +84,7 @@ func (h *FSHandler) PutFile(c echo.Context) error { _, created, err := h.fs.Filesystem.WriteFileReader(path, req.Body) if err != nil { - return api.Err(http.StatusBadRequest, "%s", err) + return api.Err(http.StatusBadRequest, "Bad request", "%s", err) } if h.fs.Cache != nil { diff --git a/http/server.go b/http/server.go index 7b4b9828..21c88ad4 100644 --- a/http/server.go +++ b/http/server.go @@ -153,7 +153,8 @@ type server struct { type filesystem struct { fs.FS - handler *handler.FSHandler + handler *handler.FSHandler + middleware echo.MiddlewareFunc } func NewServer(config Config) (Server, error) { @@ -194,13 +195,13 @@ func NewServer(config Config) (Server, error) { handler: handler.NewFS(fs), } - s.filesystems[filesystem.Name] = filesystem - if fs.Filesystem.Type() == "disk" { - s.middleware.hlsrewrite = mwhlsrewrite.NewHLSRewriteWithConfig(mwhlsrewrite.HLSRewriteConfig{ + filesystem.middleware = mwhlsrewrite.NewHLSRewriteWithConfig(mwhlsrewrite.HLSRewriteConfig{ PathPrefix: fs.Filesystem.Metadata("base"), }) } + + s.filesystems[filesystem.Name] = filesystem } if _, ok := corsPrefixes["/"]; !ok { @@ -461,6 +462,14 @@ func (s *server) setRoutes() { fs.Use(mwcache) } + if filesystem.middleware != nil { + fs.Use(filesystem.middleware) + } + + if s.middleware.session != nil { + fs.Use(s.middleware.session) + } + fs.GET("", filesystem.handler.GetFile) fs.HEAD("", filesystem.handler.GetFile) diff --git a/io/fs/fs.go b/io/fs/fs.go index 2977e178..d8b8553b 100644 --- a/io/fs/fs.go +++ b/io/fs/fs.go @@ -44,7 +44,7 @@ type File interface { type ReadFilesystem interface { // Size returns the consumed size and capacity of the filesystem in bytes. The - // capacity is negative if the filesystem can consume as much space as it wants. + // capacity is zero or negative if the filesystem can consume as much space as it wants. Size() (int64, int64) // Files returns the current number of files in the filesystem. diff --git a/io/fs/sized.go b/io/fs/sized.go index 1a87ac18..366ef6f5 100644 --- a/io/fs/sized.go +++ b/io/fs/sized.go @@ -22,7 +22,7 @@ type PurgeFilesystem interface { type sizedFilesystem struct { Filesystem - // Siez is the capacity of the filesystem in bytes + // Size is the capacity of the filesystem in bytes maxSize int64 // Set true to automatically delete the oldest files until there's @@ -67,7 +67,7 @@ func (r *sizedFilesystem) Resize(size int64) error { func (r *sizedFilesystem) WriteFileReader(path string, rd io.Reader) (int64, bool, error) { currentSize, maxSize := r.Size() - if maxSize < 0 { + if maxSize <= 0 { return r.Filesystem.WriteFileReader(path, rd) } @@ -106,7 +106,7 @@ func (r *sizedFilesystem) WriteFile(path string, data []byte) (int64, bool, erro func (r *sizedFilesystem) WriteFileSafe(path string, data []byte) (int64, bool, error) { currentSize, maxSize := r.Size() - if maxSize < 0 { + if maxSize <= 0 { return r.Filesystem.WriteFile(path, data) }