mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 00:52:16 -06:00
optimizations, failsafes, formatting
This commit is contained in:
parent
480ac254ab
commit
1ff14b4e05
|
@ -1057,6 +1057,7 @@ class CPPF(Operations):
|
|||
def statfs(self, path):
|
||||
dbg("@@ statfs [{}]".format(path))
|
||||
return {}
|
||||
|
||||
# !rm.no>
|
||||
|
||||
if sys.platform == "win32":
|
||||
|
|
|
@ -427,6 +427,7 @@ class HttpCli(object):
|
|||
vpath = undot(vpath)
|
||||
|
||||
ptn = self.conn.hsrv.ptn_cc
|
||||
k_safe = self.conn.hsrv.uparam_cc_ok
|
||||
for k in arglist.split("&"):
|
||||
if "=" in k:
|
||||
k, zs = k.split("=", 1)
|
||||
|
@ -439,7 +440,7 @@ class HttpCli(object):
|
|||
k = k.lower()
|
||||
uparam[k] = sv
|
||||
|
||||
if k in ("doc", "move", "tree"):
|
||||
if k in k_safe:
|
||||
continue
|
||||
|
||||
zs = "%s=%s" % (k, sv)
|
||||
|
@ -3829,7 +3830,7 @@ class HttpCli(object):
|
|||
items: list[str],
|
||||
) -> bool:
|
||||
if self.args.no_zip:
|
||||
raise Pebkac(400, "not enabled")
|
||||
raise Pebkac(400, "not enabled in server config")
|
||||
|
||||
logmsg = "{:4} {} ".format("", self.req)
|
||||
self.keepalive = False
|
||||
|
@ -4145,7 +4146,7 @@ class HttpCli(object):
|
|||
"dbwt": None,
|
||||
}
|
||||
|
||||
assert vstate and vs # type: ignore # !rm
|
||||
assert vstate.items and vs # type: ignore # !rm
|
||||
|
||||
fmt = self.uparam.get("ls", "")
|
||||
if not fmt and (self.ua.startswith("curl/") or self.ua.startswith("fetch")):
|
||||
|
@ -5149,6 +5150,9 @@ class HttpCli(object):
|
|||
for k in ["zip", "tar"]:
|
||||
v = self.uparam.get(k)
|
||||
if v is not None and (not add_og or not og_fn):
|
||||
if is_dk and "dks" not in vn.flags:
|
||||
t = "server config does not allow download-as-zip/tar; only dk is specified, need dks too"
|
||||
raise Pebkac(403, t)
|
||||
return self.tx_zip(k, v, self.vpath, vn, rem, [])
|
||||
|
||||
fsroot, vfs_ls, vfs_virt = vn.ls(
|
||||
|
|
|
@ -181,6 +181,7 @@ class HttpSrv(object):
|
|||
|
||||
self.ptn_cc = re.compile(r"[\x00-\x1f]")
|
||||
self.ptn_hsafe = re.compile(r"[\x00-\x1f<>\"'&]")
|
||||
self.uparam_cc_ok = set("doc move tree".split())
|
||||
|
||||
self.mallow = "GET HEAD POST PUT DELETE OPTIONS".split()
|
||||
if not self.args.no_dav:
|
||||
|
|
|
@ -816,6 +816,8 @@ class _LUnrecv(object):
|
|||
self.buf = buf + self.buf
|
||||
t = "\033[0;7mur:push\033[0;1;31m {}\n\033[0;7mur:rem:\033[0;1;35m {}\033[0m"
|
||||
print(t.format(buf, self.buf))
|
||||
|
||||
|
||||
# !rm.no>
|
||||
|
||||
|
||||
|
@ -3572,6 +3574,8 @@ except ImportError:
|
|||
except ImportError:
|
||||
impresources = None
|
||||
try:
|
||||
if sys.version_info > (3, 10):
|
||||
raise ImportError()
|
||||
import pkg_resources
|
||||
except ImportError:
|
||||
pkg_resources = None
|
||||
|
|
|
@ -107,9 +107,9 @@ class TestDots(unittest.TestCase):
|
|||
os.rename(".b", "v/.b")
|
||||
|
||||
vcfg = [
|
||||
".::r.,u1:g,u2:c,dk",
|
||||
"v/a:v/a:r.,u1:g,u2:c,dk",
|
||||
"v/.b:v/.b:r.,u1:g,u2:c,dk",
|
||||
".::r.,u1:g,u2:c,dks",
|
||||
"v/a:v/a:r.,u1:g,u2:c,dks",
|
||||
"v/.b:v/.b:r.,u1:g,u2:c,dks",
|
||||
]
|
||||
self.args = Cfg(v=vcfg, a=["u1:u1", "u2:u2"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
|
|
|
@ -26,6 +26,7 @@ def hdr(query):
|
|||
class TestHttpCli(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.td = tu.get_ramdisk()
|
||||
self.maxDiff = 99999
|
||||
|
||||
def tearDown(self):
|
||||
os.chdir(tempfile.gettempdir())
|
||||
|
@ -39,6 +40,7 @@ class TestHttpCli(unittest.TestCase):
|
|||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
# "perm+user"; r/w/a (a=rw) for user a/o/x (a=all)
|
||||
self.dtypes = ["ra", "ro", "rx", "wa", "wo", "wx", "aa", "ao", "ax"]
|
||||
self.can_read = ["ra", "ro", "aa", "ao"]
|
||||
self.can_write = ["wa", "wo", "aa", "ao"]
|
||||
|
@ -121,7 +123,8 @@ class TestHttpCli(unittest.TestCase):
|
|||
|
||||
# expected files in archives
|
||||
if rok:
|
||||
ref = [x for x in vfiles if self.in_dive(top + "/" + durl, x)]
|
||||
zs = top + "/" + durl
|
||||
ref = [x for x in vfiles if self.in_dive(zs, x)]
|
||||
ref.sort()
|
||||
else:
|
||||
ref = []
|
||||
|
@ -166,7 +169,7 @@ class TestHttpCli(unittest.TestCase):
|
|||
self.assertEqual([], zf_ng)
|
||||
|
||||
# stash
|
||||
h, ret = self.put(url)
|
||||
h, ret = self.put(durl)
|
||||
res = h.startswith("HTTP/1.1 201 ")
|
||||
self.assertEqual(res, wok)
|
||||
if wok:
|
||||
|
|
|
@ -267,6 +267,7 @@ class VHttpSrv(object):
|
|||
|
||||
self.u2idx = None
|
||||
self.ptn_cc = re.compile(r"[\x00-\x1f]")
|
||||
self.uparam_cc_ok = set("doc move tree".split())
|
||||
|
||||
def cachebuster(self):
|
||||
return "a"
|
||||
|
|
Loading…
Reference in a new issue