diff --git a/CHANGELOG.md b/CHANGELOG.md index f1efee87..be7348f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.10.0](https://github.com/filebrowser/filebrowser/compare/v2.9.0...v2.10.0) (2020-11-24) + + +### Features + +* add hide dotfiles param ([#1148](https://github.com/filebrowser/filebrowser/issues/1148)) ([10e399b](https://github.com/filebrowser/filebrowser/commit/10e399b3c3dbdcfb4465a9d4138e1da6bae0873d)) +* add single click mode ([#1139](https://github.com/filebrowser/filebrowser/issues/1139)) ([e8b4e9a](https://github.com/filebrowser/filebrowser/commit/e8b4e9af46d6e99dbeb965dd9727d9ed017d52a2)) +* automatically jump to the next photo when deleting while previewing ([#1143](https://github.com/filebrowser/filebrowser/issues/1143)) ([9515cee](https://github.com/filebrowser/filebrowser/commit/9515ceeb42e5ef5267400220a2082dec775e843d)) +* shared folder file listing ([e119bc5](https://github.com/filebrowser/filebrowser/commit/e119bc55ea82cefcbcc0571650107dfd5d73f570)) +* shared item information ([36cacdf](https://github.com/filebrowser/filebrowser/commit/36cacdf598e4e09f064c8ace0ca7a6c24b23028e)) + + +### Bug Fixes + +* empty folder in archive ([7096b3d](https://github.com/filebrowser/filebrowser/commit/7096b3dab92441981c9964e4a6175af0a255d2be)) +* fix hanging when reading a named pipe file (closes [#1155](https://github.com/filebrowser/filebrowser/issues/1155)) ([586d198](https://github.com/filebrowser/filebrowser/commit/586d198d47b525eeccc6fe587573a3ad83adb4f6)) +* previewer title overflow ([4e48ffc](https://github.com/filebrowser/filebrowser/commit/4e48ffc14d09dabeea12dc495144277db62b5b7d)) +* resource rename action invalid path ([1ce3068](https://github.com/filebrowser/filebrowser/commit/1ce3068a99c80c153fd41359255d173bce6e79e8)) + ## [2.9.0](https://github.com/filebrowser/filebrowser/compare/v2.8.0...v2.9.0) (2020-10-21) diff --git a/files/file.go b/files/file.go index c2566e6a..1ae6597a 100644 --- a/files/file.go +++ b/files/file.go @@ -135,6 +135,10 @@ func (i *FileInfo) Checksum(algo string) error { //nolint:goconst //TODO: use constants func (i *FileInfo) detectType(modify, saveContent bool) error { + if IsNamedPipe(i.Mode) { + i.Type = "blob" + return nil + } // failing to detect the type should not return error. // imagine the situation where a file in a dir with thousands // of files couldn't be opened: we'd have immediately @@ -237,9 +241,9 @@ func (i *FileInfo) readListing(checker rules.Checker) error { continue } - if strings.HasPrefix(f.Mode().String(), "L") { + if IsSymlink(f.Mode()) { // It's a symbolic link. We try to follow it. If it doesn't work, - // we stay with the link information instead if the target's. + // we stay with the link information instead of the target's. info, err := i.Fs.Stat(fPath) if err == nil { f = info diff --git a/files/utils.go b/files/utils.go index 519a5326..bcaa13f1 100644 --- a/files/utils.go +++ b/files/utils.go @@ -1,6 +1,7 @@ package files import ( + "os" "unicode/utf8" ) @@ -48,3 +49,11 @@ func isBinary(content []byte, _ int) bool { } return false } + +func IsNamedPipe(mode os.FileMode) bool { + return mode&os.ModeNamedPipe != 0 +} + +func IsSymlink(mode os.FileMode) bool { + return mode&os.ModeSymlink != 0 +} diff --git a/http/raw.go b/http/raw.go index 12b51536..1f3c19ef 100644 --- a/http/raw.go +++ b/http/raw.go @@ -1,7 +1,9 @@ package http import ( + "bytes" "errors" + "io/ioutil" "net/http" "net/url" gopath "path" @@ -9,6 +11,7 @@ import ( "strings" "github.com/mholt/archiver" + "github.com/spf13/afero" "github.com/filebrowser/filebrowser/v2/files" "github.com/filebrowser/filebrowser/v2/fileutils" @@ -91,6 +94,11 @@ var rawHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) return errToStatus(err), err } + if files.IsNamedPipe(file.Mode) { + setContentDisposition(w, r, file) + return 0, nil + } + if !file.IsDir { return rawFileHandler(w, r, file) } @@ -110,11 +118,18 @@ func addFile(ar archiver.Writer, d *data, path, commonPath string) error { return err } - file, err := d.user.Fs.Open(path) - if err != nil { - return err + var ( + file afero.File + arcReadCloser = ioutil.NopCloser(&bytes.Buffer{}) + ) + if !files.IsNamedPipe(info.Mode()) { + file, err = d.user.Fs.Open(path) + if err != nil { + return err + } + defer file.Close() + arcReadCloser = file } - defer file.Close() if path != commonPath { filename := strings.TrimPrefix(path, commonPath) @@ -124,7 +139,7 @@ func addFile(ar archiver.Writer, d *data, path, commonPath string) error { FileInfo: info, CustomName: filename, }, - ReadCloser: file, + ReadCloser: arcReadCloser, }) if err != nil { return err