package ctrl import ( . "github.com/mickael-kerjean/filestash/server/common" "github.com/mickael-kerjean/filestash/server/model" "net/http" "strings" ) 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 model.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) }