mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
new option: default-hasher for PUTs
This commit is contained in:
parent
bfb39969a4
commit
0de09860f6
|
@ -1004,6 +1004,8 @@ def add_upload(ap):
|
||||||
ap2.add_argument("--dotpart", action="store_true", help="dotfile incomplete uploads, hiding them from clients unless \033[33m-ed\033[0m")
|
ap2.add_argument("--dotpart", action="store_true", help="dotfile incomplete uploads, hiding them from clients unless \033[33m-ed\033[0m")
|
||||||
ap2.add_argument("--plain-ip", action="store_true", help="when avoiding filename collisions by appending the uploader's ip to the filename: append the plaintext ip instead of salting and hashing the ip")
|
ap2.add_argument("--plain-ip", action="store_true", help="when avoiding filename collisions by appending the uploader's ip to the filename: append the plaintext ip instead of salting and hashing the ip")
|
||||||
ap2.add_argument("--put-name", metavar="TXT", type=u, default="put-{now.6f}-{cip}.bin", help="filename for nameless uploads (when uploader doesn't provide a name); default is [\033[32mput-UNIXTIME-IP.bin\033[0m] (the \033[32m.6f\033[0m means six decimal places) (volflag=put_name)")
|
ap2.add_argument("--put-name", metavar="TXT", type=u, default="put-{now.6f}-{cip}.bin", help="filename for nameless uploads (when uploader doesn't provide a name); default is [\033[32mput-UNIXTIME-IP.bin\033[0m] (the \033[32m.6f\033[0m means six decimal places) (volflag=put_name)")
|
||||||
|
ap2.add_argument("--put-ck", metavar="ALG", type=u, default="sha512", help="default checksum-hasher for PUT/WebDAV uploads: no / md5 / sha1 / sha256 / sha512 / b2 / blake2 / b2s / blake2s (volflag=put_ck)")
|
||||||
|
ap2.add_argument("--bup-ck", metavar="ALG", type=u, default="sha512", help="default checksum-hasher for bup/basic-uploader: no / md5 / sha1 / sha256 / sha512 / b2 / blake2 / b2s / blake2s (volflag=bup_ck)")
|
||||||
ap2.add_argument("--unpost", metavar="SEC", type=int, default=3600*12, help="grace period where uploads can be deleted by the uploader, even without delete permissions; 0=disabled, default=12h")
|
ap2.add_argument("--unpost", metavar="SEC", type=int, default=3600*12, help="grace period where uploads can be deleted by the uploader, even without delete permissions; 0=disabled, default=12h")
|
||||||
ap2.add_argument("--u2abort", metavar="NUM", type=int, default=1, help="clients can abort incomplete uploads by using the unpost tab (requires \033[33m-e2d\033[0m). [\033[32m0\033[0m] = never allowed (disable feature), [\033[32m1\033[0m] = allow if client has the same IP as the upload AND is using the same account, [\033[32m2\033[0m] = just check the IP, [\033[32m3\033[0m] = just check account-name (volflag=u2abort)")
|
ap2.add_argument("--u2abort", metavar="NUM", type=int, default=1, help="clients can abort incomplete uploads by using the unpost tab (requires \033[33m-e2d\033[0m). [\033[32m0\033[0m] = never allowed (disable feature), [\033[32m1\033[0m] = allow if client has the same IP as the upload AND is using the same account, [\033[32m2\033[0m] = just check the IP, [\033[32m3\033[0m] = just check account-name (volflag=u2abort)")
|
||||||
ap2.add_argument("--blank-wt", metavar="SEC", type=int, default=300, help="file write grace period (any client can write to a blank file last-modified more recently than \033[33mSEC\033[0m seconds ago)")
|
ap2.add_argument("--blank-wt", metavar="SEC", type=int, default=300, help="file write grace period (any client can write to a blank file last-modified more recently than \033[33mSEC\033[0m seconds ago)")
|
||||||
|
|
|
@ -75,6 +75,7 @@ def vf_vmap() -> dict[str, str]:
|
||||||
"th_x3": "th3x",
|
"th_x3": "th3x",
|
||||||
}
|
}
|
||||||
for k in (
|
for k in (
|
||||||
|
"bup_ck",
|
||||||
"dbd",
|
"dbd",
|
||||||
"forget_ip",
|
"forget_ip",
|
||||||
"hsortn",
|
"hsortn",
|
||||||
|
@ -95,6 +96,7 @@ def vf_vmap() -> dict[str, str]:
|
||||||
"og_title_i",
|
"og_title_i",
|
||||||
"og_tpl",
|
"og_tpl",
|
||||||
"og_ua",
|
"og_ua",
|
||||||
|
"put_ck",
|
||||||
"put_name",
|
"put_name",
|
||||||
"mv_retry",
|
"mv_retry",
|
||||||
"rm_retry",
|
"rm_retry",
|
||||||
|
@ -167,6 +169,8 @@ flagcats = {
|
||||||
"nosub": "forces all uploads into the top folder of the vfs",
|
"nosub": "forces all uploads into the top folder of the vfs",
|
||||||
"magic": "enables filetype detection for nameless uploads",
|
"magic": "enables filetype detection for nameless uploads",
|
||||||
"put_name": "fallback filename for nameless uploads",
|
"put_name": "fallback filename for nameless uploads",
|
||||||
|
"put_ck": "default checksum-hasher for PUT/WebDAV uploads",
|
||||||
|
"bup_ck": "default checksum-hasher for bup/basic uploads",
|
||||||
"gz": "allows server-side gzip compression of uploads with ?gz",
|
"gz": "allows server-side gzip compression of uploads with ?gz",
|
||||||
"xz": "allows server-side lzma compression of uploads with ?xz",
|
"xz": "allows server-side lzma compression of uploads with ?xz",
|
||||||
"pk": "forces server-side compression, optional arg: xz,9",
|
"pk": "forces server-side compression, optional arg: xz,9",
|
||||||
|
|
|
@ -2179,28 +2179,26 @@ class HttpCli(object):
|
||||||
# small toctou, but better than clobbering a hardlink
|
# small toctou, but better than clobbering a hardlink
|
||||||
wunlink(self.log, path, vfs.flags)
|
wunlink(self.log, path, vfs.flags)
|
||||||
|
|
||||||
halg = "sha512"
|
|
||||||
hasher = None
|
hasher = None
|
||||||
copier = hashcopy
|
copier = hashcopy
|
||||||
if "ck" in self.ouparam or "ck" in self.headers:
|
halg = self.ouparam.get("ck") or self.headers.get("ck") or vfs.flags["put_ck"]
|
||||||
halg = zs = self.ouparam.get("ck") or self.headers.get("ck") or ""
|
if halg == "sha512":
|
||||||
if not zs or zs == "no":
|
pass
|
||||||
copier = justcopy
|
elif halg == "no":
|
||||||
halg = ""
|
copier = justcopy
|
||||||
elif zs == "md5":
|
halg = ""
|
||||||
hasher = hashlib.md5(**USED4SEC)
|
elif halg == "md5":
|
||||||
elif zs == "sha1":
|
hasher = hashlib.md5(**USED4SEC)
|
||||||
hasher = hashlib.sha1(**USED4SEC)
|
elif halg == "sha1":
|
||||||
elif zs == "sha256":
|
hasher = hashlib.sha1(**USED4SEC)
|
||||||
hasher = hashlib.sha256(**USED4SEC)
|
elif halg == "sha256":
|
||||||
elif zs in ("blake2", "b2"):
|
hasher = hashlib.sha256(**USED4SEC)
|
||||||
hasher = hashlib.blake2b(**USED4SEC)
|
elif halg in ("blake2", "b2"):
|
||||||
elif zs in ("blake2s", "b2s"):
|
hasher = hashlib.blake2b(**USED4SEC)
|
||||||
hasher = hashlib.blake2s(**USED4SEC)
|
elif halg in ("blake2s", "b2s"):
|
||||||
elif zs == "sha512":
|
hasher = hashlib.blake2s(**USED4SEC)
|
||||||
pass
|
else:
|
||||||
else:
|
raise Pebkac(500, "unknown hash alg")
|
||||||
raise Pebkac(500, "unknown hash alg")
|
|
||||||
|
|
||||||
f, fn = ren_open(fn, *open_a, **params)
|
f, fn = ren_open(fn, *open_a, **params)
|
||||||
try:
|
try:
|
||||||
|
@ -3083,15 +3081,18 @@ class HttpCli(object):
|
||||||
vfs, rem = self.asrv.vfs.get(self.vpath, self.uname, False, True)
|
vfs, rem = self.asrv.vfs.get(self.vpath, self.uname, False, True)
|
||||||
self._assert_safe_rem(rem)
|
self._assert_safe_rem(rem)
|
||||||
|
|
||||||
halg = "sha512"
|
|
||||||
hasher = None
|
hasher = None
|
||||||
copier = hashcopy
|
|
||||||
if nohash:
|
if nohash:
|
||||||
halg = ""
|
halg = ""
|
||||||
copier = justcopy
|
copier = justcopy
|
||||||
elif "ck" in self.ouparam or "ck" in self.headers:
|
else:
|
||||||
halg = self.ouparam.get("ck") or self.headers.get("ck") or ""
|
copier = hashcopy
|
||||||
if not halg or halg == "no":
|
halg = (
|
||||||
|
self.ouparam.get("ck") or self.headers.get("ck") or vfs.flags["bup_ck"]
|
||||||
|
)
|
||||||
|
if halg == "sha512":
|
||||||
|
pass
|
||||||
|
elif halg == "no":
|
||||||
copier = justcopy
|
copier = justcopy
|
||||||
halg = ""
|
halg = ""
|
||||||
elif halg == "md5":
|
elif halg == "md5":
|
||||||
|
@ -3104,8 +3105,6 @@ class HttpCli(object):
|
||||||
hasher = hashlib.blake2b(**USED4SEC)
|
hasher = hashlib.blake2b(**USED4SEC)
|
||||||
elif halg in ("blake2s", "b2s"):
|
elif halg in ("blake2s", "b2s"):
|
||||||
hasher = hashlib.blake2s(**USED4SEC)
|
hasher = hashlib.blake2s(**USED4SEC)
|
||||||
elif halg == "sha512":
|
|
||||||
pass
|
|
||||||
else:
|
else:
|
||||||
raise Pebkac(500, "unknown hash alg")
|
raise Pebkac(500, "unknown hash alg")
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,7 @@ class Cfg(Namespace):
|
||||||
v=v or [],
|
v=v or [],
|
||||||
c=c,
|
c=c,
|
||||||
E=E,
|
E=E,
|
||||||
|
bup_ck="sha512",
|
||||||
dbd="wal",
|
dbd="wal",
|
||||||
dk_salt="b" * 16,
|
dk_salt="b" * 16,
|
||||||
fk_salt="a" * 16,
|
fk_salt="a" * 16,
|
||||||
|
@ -192,6 +193,7 @@ class Cfg(Namespace):
|
||||||
mte={"a": True},
|
mte={"a": True},
|
||||||
mth={},
|
mth={},
|
||||||
mtp=[],
|
mtp=[],
|
||||||
|
put_ck="sha512",
|
||||||
put_name="put-{now.6f}-{cip}.bin",
|
put_name="put-{now.6f}-{cip}.bin",
|
||||||
mv_retry="0/0",
|
mv_retry="0/0",
|
||||||
rm_retry="0/0",
|
rm_retry="0/0",
|
||||||
|
|
Loading…
Reference in a new issue