From b45cf73ed8c696518d590bc8a6e6f64fabae1011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yingyi=20/=20=E9=A2=96=E9=80=B8?= <49649786+Zuoqiu-Yingyi@users.noreply.github.com> Date: Sat, 22 Jul 2023 22:20:24 +0800 Subject: [PATCH] :art: API `/api/file/readDir` support for returning symbolic link information (#8805) * :art: API `/api/file/readDir` response symlink info * :art: distinguish between directory symlink and file symlink --- API.md | 2 ++ API_zh_CN.md | 2 ++ kernel/api/file.go | 13 +++++++++++-- kernel/util/file.go | 6 +++++- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/API.md b/API.md index 0533f7049..bddad934f 100644 --- a/API.md +++ b/API.md @@ -1076,10 +1076,12 @@ View API token in Settings - About, request header: `Authorization: T "data": [ { "isDir": true, + "isSymlink": false, "name": "20210808180320-abz7w6k" }, { "isDir": false, + "isSymlink": false, "name": "20210808180320-abz7w6k.sy" } ] diff --git a/API_zh_CN.md b/API_zh_CN.md index d4d8ebae4..76ed7ba2f 100644 --- a/API_zh_CN.md +++ b/API_zh_CN.md @@ -1068,10 +1068,12 @@ "data": [ { "isDir": true, + "isSymlink": false, "name": "20210808180320-abz7w6k" }, { "isDir": false, + "isSymlink": false, "name": "20210808180320-abz7w6k.sy" } ] diff --git a/kernel/api/file.go b/kernel/api/file.go index 675c04906..edde4c9f9 100644 --- a/kernel/api/file.go +++ b/kernel/api/file.go @@ -172,9 +172,18 @@ func readDir(c *gin.Context) { files := []map[string]interface{}{} for _, entry := range entries { + path := filepath.Join(dirPath, entry.Name()) + info, err = os.Stat(path) + if nil != err { + logging.LogErrorf("stat [%s] failed: %s", path, err) + ret.Code = 500 + ret.Msg = err.Error() + return + } files = append(files, map[string]interface{}{ - "name": entry.Name(), - "isDir": entry.IsDir(), + "name": entry.Name(), + "isDir": info.IsDir(), + "isSymlink": util.IsSymlink(entry), }) } diff --git a/kernel/util/file.go b/kernel/util/file.go index 97a205364..397bc0a4a 100644 --- a/kernel/util/file.go +++ b/kernel/util/file.go @@ -43,8 +43,12 @@ func IsEmptyDir(p string) bool { return 1 > len(files) } +func IsSymlink(dir fs.DirEntry) bool { + return dir.Type() == fs.ModeSymlink +} + func IsDirRegularOrSymlink(dir fs.DirEntry) bool { - return dir.IsDir() || dir.Type() == fs.ModeSymlink + return dir.IsDir() || IsSymlink(dir) } func IsPathRegularDirOrSymlinkDir(path string) bool {