diff --git a/server/common/types.go b/server/common/types.go index f3b05da3..2d6edc9c 100644 --- a/server/common/types.go +++ b/server/common/types.go @@ -120,12 +120,13 @@ type WorkflowSpecs struct { } type File struct { - FName string `json:"name"` - FType string `json:"type"` - FTime int64 `json:"time"` - FSize int64 `json:"size"` - FPath string `json:"path,omitempty"` - Offline bool `json:"offline,omitempty"` + FName string `json:"name"` + FType string `json:"type"` + FTime int64 `json:"time"` + FSize int64 `json:"size"` + FPath string `json:"path,omitempty"` + Offline bool `json:"offline,omitempty"` + Metadata map[string]any `json:"metadata,omitempty"` } func (f File) Name() string { diff --git a/server/pkg/files/handler_ls.go b/server/pkg/files/handler_ls.go index 199f52d7..6ec56868 100644 --- a/server/pkg/files/handler_ls.go +++ b/server/pkg/files/handler_ls.go @@ -14,6 +14,15 @@ import ( "github.com/mickael-kerjean/filestash/server/pkg/permissions" ) +type FileInfo struct { + Name string `json:"name"` + Type string `json:"type"` + Size int64 `json:"size"` + Time int64 `json:"time"` + Offline bool `json:"offline,omitempty"` + Metadata map[string]any `json:"metadata,omitempty"` +} + func FileLs(ctx *App, res http.ResponseWriter, req *http.Request) { if permissions.CanRead(ctx) == false { if permissions.CanUpload(ctx) == false { @@ -110,12 +119,10 @@ func FileLs(ctx *App, res http.ResponseWriter, req *http.Request) { } return "directory" }(entries[i].Mode()), - Mode: func(mode os.FileMode) uint32 { - return uint32(mode) - }(entries[i].Mode()), } - if f, ok := entries[i].Sys().(File); ok && f.Offline == true { - files[i].Offline = true + if f, ok := entries[i].Sys().(File); ok { + files[i].Offline = f.Offline + files[i].Metadata = f.Metadata } } diff --git a/server/pkg/files/index.go b/server/pkg/files/index.go deleted file mode 100644 index 8845bfa8..00000000 --- a/server/pkg/files/index.go +++ /dev/null @@ -1,10 +0,0 @@ -package files - -type FileInfo struct { - Name string `json:"name"` - Type string `json:"type"` - Size int64 `json:"size"` - Time int64 `json:"time"` - Mode uint32 `json:"mode,omitempty"` - Offline bool `json:"offline,omitempty"` -} diff --git a/server/plugin/plg_backend_nfs/index.go b/server/plugin/plg_backend_nfs/index.go index ac083b94..26e8a5e5 100644 --- a/server/plugin/plg_backend_nfs/index.go +++ b/server/plugin/plg_backend_nfs/index.go @@ -1,6 +1,7 @@ package plg_backend_nfs import ( + "fmt" "io" "os" "path/filepath" @@ -265,6 +266,13 @@ func (this NfsShare) Ls(path string) ([]os.FileInfo, error) { }(), FSize: int64(dir.Attr.Attr.Filesize), FTime: int64(dir.Attr.Attr.Ctime.Seconds), + Metadata: map[string]any{ + "uid": dir.Attr.Attr.UID, + "gid": dir.Attr.Attr.GID, + "mode": fmt.Sprintf("%#o", dir.Attr.Attr.FileMode), + "atime": int64(dir.Attr.Attr.Atime.Seconds) * 1000, + "mtime": int64(dir.Attr.Attr.Mtime.Seconds) * 1000, + }, }) } return files, nil