rw_edit fixes

This commit is contained in:
ed 2026-02-08 00:43:21 +00:00
parent fd09638567
commit d692838095
5 changed files with 31 additions and 12 deletions

View file

@ -2589,6 +2589,11 @@ class AuthSrv(object):
t = "WARNING: volume [/%s]: invalid value specified for ext-th: %s" t = "WARNING: volume [/%s]: invalid value specified for ext-th: %s"
self.log(t % (vol.vpath, etv), 3) self.log(t % (vol.vpath, etv), 3)
zsl = [x.strip() for x in vol.flags["rw_edit"].split(",")]
zsl = [x for x in zsl if x]
vol.flags["rw_edit"] = ",".join(zsl)
vol.flags["rw_edit_set"] = set(x for x in zsl if x)
emb_all = vol.flags["emb_all"] = set() emb_all = vol.flags["emb_all"] = set()
zsl1 = [x for x in vol.flags["preadmes"].split(",") if x] zsl1 = [x for x in vol.flags["preadmes"].split(",") if x]

View file

@ -3534,10 +3534,10 @@ class HttpCli(object):
if not self.can_delete and ( if not self.can_delete and (
"." not in new_file "." not in new_file
or new_file.rsplit(".", 1)[1].lower() not in self.args.rw_edit_set or new_file.rsplit(".", 1)[1].lower() not in vfs.flags["rw_edit_set"]
): ):
t = "you can only create %s files because you don't have the delete-permission" t = "you can only create %s files because you don't have the delete-permission"
raise Pebkac(400, t % (self.args.rw_edit.replace(",", "/"))) raise Pebkac(400, t % (vfs.flags["rw_edit"].replace(",", "/")))
sanitized = sanitize_fn(new_file) sanitized = sanitize_fn(new_file)
fdir = vfs.canonical(rem) fdir = vfs.canonical(rem)
@ -4055,10 +4055,11 @@ class HttpCli(object):
dbv, vrem = vfs.get_dbv(rem) dbv, vrem = vfs.get_dbv(rem)
if not self.can_delete and ( if not self.can_delete and (
"." not in rem or rem.rsplit(".", 1)[1].lower() not in self.args.rw_edit_set "." not in rem
or rem.rsplit(".", 1)[1].lower() not in vfs.flags["rw_edit_set"]
): ):
t = "you can only edit %s files because you don't have the delete-permission" t = "you can only edit %s files because you don't have the delete-permission"
raise Pebkac(400, t % (self.args.rw_edit.replace(",", "/"))) raise Pebkac(400, t % (vfs.flags["rw_edit"].replace(",", "/")))
if nullwrite: if nullwrite:
response = json.dumps({"ok": True, "lastmod": 0}) response = json.dumps({"ok": True, "lastmod": 0})
@ -6881,13 +6882,20 @@ class HttpCli(object):
vpnodes.pop() vpnodes.pop()
if ( if (
(is_md or self.can_delete) (
and "nohtml" not in vn.flags
and (
(is_md and "v" in self.uparam) (is_md and "v" in self.uparam)
or "edit" in self.uparam or "edit" in self.uparam
or "edit2" in self.uparam or "edit2" in self.uparam
) )
and "nohtml" not in vn.flags
and (
is_md
or self.can_delete
or (
"." in abspath
and abspath.rsplit(".", 1)[1].lower() in vn.flags["rw_edit_set"]
)
)
): ):
return self.tx_md(vn, abspath) return self.tx_md(vn, abspath)

View file

@ -1122,7 +1122,7 @@ class SvcHub(object):
vs = os.path.expandvars(os.path.expanduser(vs)) vs = os.path.expandvars(os.path.expanduser(vs))
setattr(al, k, vs) setattr(al, k, vs)
for k in "idp_adm rw_edit stats_u".split(" "): for k in "idp_adm stats_u".split(" "):
vs = getattr(al, k) vs = getattr(al, k)
vsa = [x.strip() for x in vs.split(",")] vsa = [x.strip() for x in vs.split(",")]
vsa = [x.lower() for x in vsa if x] vsa = [x.lower() for x in vsa if x]

View file

@ -1152,7 +1152,7 @@ class Up2k(object):
ft = "\033[0;32m{}{:.0}" ft = "\033[0;32m{}{:.0}"
ff = "\033[0;35m{}{:.0}" ff = "\033[0;35m{}{:.0}"
fv = "\033[0;36m{}:\033[90m{}" fv = "\033[0;36m{}:\033[90m{}"
zs = "bcasechk du_iwho emb_all emb_lgs emb_mds ext_th_d html_head html_head_d html_head_s ls_q_m put_name2 mv_re_r mv_re_t rm_re_r rm_re_t srch_re_dots srch_re_nodot zipmax zipmaxn_v zipmaxs_v" zs = "bcasechk du_iwho emb_all emb_lgs emb_mds ext_th_d html_head html_head_d html_head_s ls_q_m put_name2 mv_re_r mv_re_t rm_re_r rm_re_t rw_edit_set srch_re_dots srch_re_nodot zipmax zipmaxn_v zipmaxs_v"
fx = set(zs.split()) fx = set(zs.split())
fd = vf_bmap() fd = vf_bmap()
fd.update(vf_cmap()) fd.update(vf_cmap())

View file

@ -3818,6 +3818,12 @@ function fmt_ren(re, md, fmt) {
} }
function enre_rw_edit() {
window.re_rw_edit = new RegExp('\.(' + rw_edit.replace(/,/g, '|') + ')$', 'i');
}
enre_rw_edit();
function fs_abrt() { function fs_abrt() {
toast.inf(30, L.fp_abrt); toast.inf(30, L.fp_abrt);
fileman.sn++; fileman.sn++;
@ -5161,7 +5167,7 @@ var showfile = (function () {
ebi('files').style.display = ebi('gfiles').style.display = ebi('lazy').style.display = ebi('pro').style.display = ebi('epi').style.display = 'none'; ebi('files').style.display = ebi('gfiles').style.display = ebi('lazy').style.display = ebi('pro').style.display = ebi('epi').style.display = 'none';
ebi('dldoc').setAttribute('href', url); ebi('dldoc').setAttribute('href', url);
ebi('editdoc').setAttribute('href', addq(url, 'edit')); ebi('editdoc').setAttribute('href', addq(url, 'edit'));
ebi('editdoc').style.display = (has(perms, 'write') && (is_md || has(perms, 'delete'))) ? '' : 'none'; ebi('editdoc').style.display = (has(perms, 'write') && (re_rw_edit.test(name) || has(perms, 'delete'))) ? '' : 'none';
var wr = ebi('bdoc'), var wr = ebi('bdoc'),
nrend = r.nrend, nrend = r.nrend,
@ -7981,7 +7987,7 @@ function apply_perms(res) {
if (res.cfg) if (res.cfg)
rw_edit = res.rw_edit; rw_edit = res.rw_edit;
window.re_rw_edit = new RegExp('\.(' + rw_edit.replace(/,/g, '|') + ')$', 'i'); enre_rw_edit();
ebi('new_mdi').innerHTML = has(perms, "delete") ? L.nmd_i1 : L.nmd_i2.format(rw_edit.replace(/,/g, '/')); ebi('new_mdi').innerHTML = has(perms, "delete") ? L.nmd_i1 : L.nmd_i2.format(rw_edit.replace(/,/g, '/'));
widget.setvis(); widget.setvis();
@ -8790,7 +8796,7 @@ var msel = (function () {
form.onsubmit = function (e) { form.onsubmit = function (e) {
if (!has(perms, "delete") && !re_rw_edit.test(tb.value)) { if (!has(perms, "delete") && !re_rw_edit.test(tb.value)) {
ev(e); ev(e);
toast.err(10, L.nmd_i2); toast.err(10, L.nmd_i2.format(rw_edit.replace(/,/g, '/')));
return false; return false;
} }
if (tb.value) { if (tb.value) {