Files

58 lines
1.4 KiB
Go

package files
import (
"net/http"
"strings"
. "github.com/mickael-kerjean/filestash/server/pkg/core"
. "github.com/mickael-kerjean/filestash/server/pkg/kernel"
. "github.com/mickael-kerjean/filestash/server/pkg/utils"
. "github.com/mickael-kerjean/filestash/server/pkg/permissions"
)
func FileSearch(ctx *App, res http.ResponseWriter, req *http.Request) {
path, err := PathBuilder(ctx, req.URL.Query().Get("path"))
if err != nil {
path = "/"
}
q := req.URL.Query().Get("q")
if CanRead(ctx) == false {
Log.Debug("ctrl::search 'can not read \"%s\"'", path)
SendErrorResult(res, ErrPermissionDenied)
return
}
var searchResults []IFile
searchEngine := Hooks.Get.SearchEngine()
if searchEngine == nil {
SendErrorResult(res, ErrMissingDependency)
return
}
searchResults, err = searchEngine.Query(*ctx, path, q)
if err != nil {
SendErrorResult(res, err)
return
}
// overwrite the path of a file according to chroot
if ctx.Session["path"] != "" {
for i := 0; i < len(searchResults); i++ {
searchResults[i] = File{
FName: searchResults[i].Name(),
FSize: searchResults[i].Size(),
FType: func() string {
if searchResults[i].IsDir() {
return "directory"
}
return "file"
}(),
FPath: "/" + strings.TrimPrefix(
searchResults[i].Path(),
ctx.Session["path"],
),
}
}
}
SendSuccessResults(res, searchResults)
}