mirror of
https://github.com/datarhei/core.git
synced 2025-10-05 16:07:07 +08:00
79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/datarhei/core/v16/http/api"
|
|
"github.com/datarhei/core/v16/http/handler/util"
|
|
"github.com/datarhei/core/v16/io/fs"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
// ListFiles lists all files on a filesystem
|
|
// @Summary List all files on a filesystem
|
|
// @Description List all files on a filesystem. The listing can be ordered by name, size, or date of last modification in ascending or descending order.
|
|
// @Tags v16.?.?
|
|
// @ID cluster-3-list-files
|
|
// @Produce json
|
|
// @Param storage path string true "Name of the filesystem"
|
|
// @Param glob query string false "glob pattern for file names"
|
|
// @Param size_min query int64 false "minimal size of files"
|
|
// @Param size_max query int64 false "maximal size of files"
|
|
// @Param lastmod_start query int64 false "minimal last modification time"
|
|
// @Param lastmod_end query int64 false "maximal last modification time"
|
|
// @Param sort query string false "none, name, size, lastmod"
|
|
// @Param order query string false "asc, desc"
|
|
// @Success 200 {array} api.FileInfo
|
|
// @Success 500 {object} api.Error
|
|
// @Security ApiKeyAuth
|
|
// @Router /api/v3/cluster/fs/{storage} [get]
|
|
func (h *ClusterHandler) ListFiles(c echo.Context) error {
|
|
//name := util.PathParam(c, "storage")
|
|
pattern := util.DefaultQuery(c, "glob", "")
|
|
sizeMin := util.DefaultQuery(c, "size_min", "0")
|
|
sizeMax := util.DefaultQuery(c, "size_max", "0")
|
|
modifiedStart := util.DefaultQuery(c, "lastmod_start", "")
|
|
modifiedEnd := util.DefaultQuery(c, "lastmod_end", "")
|
|
//sortby := util.DefaultQuery(c, "sort", "none")
|
|
//order := util.DefaultQuery(c, "order", "asc")
|
|
|
|
options := fs.ListOptions{
|
|
Pattern: pattern,
|
|
}
|
|
|
|
if x, err := strconv.ParseInt(sizeMin, 10, 64); err != nil {
|
|
return api.Err(http.StatusBadRequest, "", "size_min: %s", err.Error())
|
|
} else {
|
|
options.SizeMin = x
|
|
}
|
|
|
|
if x, err := strconv.ParseInt(sizeMax, 10, 64); err != nil {
|
|
return api.Err(http.StatusBadRequest, "", "size_max: %s", err.Error())
|
|
} else {
|
|
options.SizeMax = x
|
|
}
|
|
|
|
if len(modifiedStart) != 0 {
|
|
if x, err := strconv.ParseInt(modifiedStart, 10, 64); err != nil {
|
|
return api.Err(http.StatusBadRequest, "", "lastmod_start: %s", err.Error())
|
|
} else {
|
|
t := time.Unix(x, 0)
|
|
options.ModifiedStart = &t
|
|
}
|
|
}
|
|
|
|
if len(modifiedEnd) != 0 {
|
|
if x, err := strconv.ParseInt(modifiedEnd, 10, 64); err != nil {
|
|
return api.Err(http.StatusBadRequest, "", "lastmode_end: %s", err.Error())
|
|
} else {
|
|
t := time.Unix(x+1, 0)
|
|
options.ModifiedEnd = &t
|
|
}
|
|
}
|
|
|
|
return api.Err(http.StatusNotImplemented, "", "not implemented")
|
|
}
|