From f94aa46a11ff891d244a7e7f3b2ba860efedf454 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 12 May 2021 21:50:32 +0200 Subject: [PATCH] open write-only folders from tree --- copyparty/authsrv.py | 7 ++++++- copyparty/httpcli.py | 25 +++++++++++++++---------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/copyparty/authsrv.py b/copyparty/authsrv.py index 14dcb531..557d1333 100644 --- a/copyparty/authsrv.py +++ b/copyparty/authsrv.py @@ -141,7 +141,12 @@ class VFS(object): real.sort() if not rem: for name, vn2 in sorted(self.nodes.items()): - if uname in vn2.uread or "*" in vn2.uread: + if ( + uname in vn2.uread + or "*" in vn2.uread + or uname in vn2.uwrite + or "*" in vn2.uwrite + ): virt_vis[name] = vn2 # no vfs nodes in the list of real inodes diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index 745ff091..d1816f96 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -1367,6 +1367,14 @@ class HttpCli(object): with open(fsenc(fn), "rb") as f: logues[n] = f.read().decode("utf-8") + ls_ret = { + "dirs": [], + "files": [], + "taglist": [], + "srvinf": srv_info, + "perms": perms, + "logues": logues, + } j2a = { "vdir": quotep(self.vpath), "vpnodes": vpnodes, @@ -1386,7 +1394,9 @@ class HttpCli(object): } if not self.readable: if is_ls: - raise Pebkac(403) + ret = json.dumps(ls_ret) + self.reply(ret.encode("utf-8", "replace"), mime="application/json") + return True if not os.path.isdir(fsenc(abspath)): raise Pebkac(404) @@ -1535,15 +1545,10 @@ class HttpCli(object): if is_ls: [x.pop(k) for k in ["name", "dt"] for y in [dirs, files] for x in y] - ret = { - "dirs": dirs, - "files": files, - "srvinf": srv_info, - "perms": perms, - "logues": logues, - "taglist": taglist, - } - ret = json.dumps(ret) + ls_ret["dirs"] = dirs + ls_ret["files"] = files + ls_ret["taglist"] = taglist + ret = json.dumps(ls_ret) self.reply(ret.encode("utf-8", "replace"), mime="application/json") return True