mirror of
https://github.com/9001/copyparty.git
synced 2025-11-24 07:23:22 -07:00
xm-hooks: list of selected files; closes #921
previously, `xm` hooks would be called with the `txt` property containing the url-decoded message now, a new property `body` contains the original unmodified message, to avoid any ambiguity caused by url-decoding if any files are selected, the list of files is appended to the `txt` field as lines, and as `sel` url-parameters in `body` Co-authored-by: Carson Coder <carson@carsoncoder.com>
This commit is contained in:
parent
d099e5e84e
commit
6c024dbf80
|
|
@ -511,7 +511,7 @@ class FtpHandler(FTPHandler):
|
||||||
0,
|
0,
|
||||||
self.cli_ip,
|
self.cli_ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
|
||||||
|
|
@ -2144,7 +2144,7 @@ class HttpCli(object):
|
||||||
t = "urlform_raw %d @ %r\n %r\n"
|
t = "urlform_raw %d @ %r\n %r\n"
|
||||||
self.log(t % (len(orig), "/" + self.vpath, orig))
|
self.log(t % (len(orig), "/" + self.vpath, orig))
|
||||||
try:
|
try:
|
||||||
zb = unquote(buf.replace(b"+", b" "))
|
zb = unquote(buf.replace(b"+", b" ").replace(b"&", b"\n"))
|
||||||
plain = zb.decode("utf-8", "replace")
|
plain = zb.decode("utf-8", "replace")
|
||||||
if buf.startswith(b"msg="):
|
if buf.startswith(b"msg="):
|
||||||
plain = plain[4:]
|
plain = plain[4:]
|
||||||
|
|
@ -2165,7 +2165,7 @@ class HttpCli(object):
|
||||||
len(buf),
|
len(buf),
|
||||||
self.ip,
|
self.ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
plain,
|
[plain, orig],
|
||||||
)
|
)
|
||||||
|
|
||||||
t = "urlform_dec %d @ %r\n %r\n"
|
t = "urlform_dec %d @ %r\n %r\n"
|
||||||
|
|
@ -2326,7 +2326,7 @@ class HttpCli(object):
|
||||||
remains,
|
remains,
|
||||||
self.ip,
|
self.ip,
|
||||||
at,
|
at,
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
@ -2461,7 +2461,7 @@ class HttpCli(object):
|
||||||
post_sz,
|
post_sz,
|
||||||
self.ip,
|
self.ip,
|
||||||
at,
|
at,
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
@ -3299,7 +3299,7 @@ class HttpCli(object):
|
||||||
0,
|
0,
|
||||||
self.ip,
|
self.ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
@ -3471,7 +3471,7 @@ class HttpCli(object):
|
||||||
0,
|
0,
|
||||||
self.ip,
|
self.ip,
|
||||||
at,
|
at,
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
@ -3578,7 +3578,7 @@ class HttpCli(object):
|
||||||
sz,
|
sz,
|
||||||
self.ip,
|
self.ip,
|
||||||
at,
|
at,
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
@ -3891,7 +3891,7 @@ class HttpCli(object):
|
||||||
0,
|
0,
|
||||||
self.ip,
|
self.ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
@ -3939,7 +3939,7 @@ class HttpCli(object):
|
||||||
sz,
|
sz,
|
||||||
self.ip,
|
self.ip,
|
||||||
new_lastmod,
|
new_lastmod,
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
|
||||||
|
|
@ -262,7 +262,7 @@ class SMB(object):
|
||||||
0,
|
0,
|
||||||
"1.7.6.2",
|
"1.7.6.2",
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
|
||||||
|
|
@ -379,7 +379,7 @@ class Tftpd(object):
|
||||||
0,
|
0,
|
||||||
"8.3.8.7",
|
"8.3.8.7",
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
|
||||||
|
|
@ -3304,7 +3304,7 @@ class Up2k(object):
|
||||||
job["size"],
|
job["size"],
|
||||||
job["addr"],
|
job["addr"],
|
||||||
job["at"],
|
job["at"],
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
@ -4000,7 +4000,7 @@ class Up2k(object):
|
||||||
sz,
|
sz,
|
||||||
ip,
|
ip,
|
||||||
at or time.time(),
|
at or time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
@ -4236,7 +4236,7 @@ class Up2k(object):
|
||||||
st.st_size,
|
st.st_size,
|
||||||
ip,
|
ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
):
|
):
|
||||||
t = "delete blocked by xbd server config: %r"
|
t = "delete blocked by xbd server config: %r"
|
||||||
self.log(t % (abspath,), 1)
|
self.log(t % (abspath,), 1)
|
||||||
|
|
@ -4276,7 +4276,7 @@ class Up2k(object):
|
||||||
st.st_size,
|
st.st_size,
|
||||||
ip,
|
ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
|
|
||||||
if is_dir:
|
if is_dir:
|
||||||
|
|
@ -4404,7 +4404,7 @@ class Up2k(object):
|
||||||
fsize,
|
fsize,
|
||||||
ip,
|
ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
):
|
):
|
||||||
t = "copy blocked by xbr server config: %r" % (svp,)
|
t = "copy blocked by xbr server config: %r" % (svp,)
|
||||||
self.log(t, 1)
|
self.log(t, 1)
|
||||||
|
|
@ -4505,7 +4505,7 @@ class Up2k(object):
|
||||||
fsize,
|
fsize,
|
||||||
ip,
|
ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
|
|
||||||
return "k"
|
return "k"
|
||||||
|
|
@ -4656,7 +4656,7 @@ class Up2k(object):
|
||||||
fsize,
|
fsize,
|
||||||
ip,
|
ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
):
|
):
|
||||||
t = "move blocked by xbr server config: %r" % (svp,)
|
t = "move blocked by xbr server config: %r" % (svp,)
|
||||||
self.log(t, 1)
|
self.log(t, 1)
|
||||||
|
|
@ -4696,7 +4696,7 @@ class Up2k(object):
|
||||||
fsize,
|
fsize,
|
||||||
ip,
|
ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
|
|
||||||
return "k"
|
return "k"
|
||||||
|
|
@ -4816,7 +4816,7 @@ class Up2k(object):
|
||||||
fsize,
|
fsize,
|
||||||
ip,
|
ip,
|
||||||
time.time(),
|
time.time(),
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
|
|
||||||
return "k"
|
return "k"
|
||||||
|
|
@ -5154,7 +5154,7 @@ class Up2k(object):
|
||||||
job["size"],
|
job["size"],
|
||||||
job["addr"],
|
job["addr"],
|
||||||
job["t0"],
|
job["t0"],
|
||||||
"",
|
None,
|
||||||
)
|
)
|
||||||
t = hr.get("rejectmsg") or ""
|
t = hr.get("rejectmsg") or ""
|
||||||
if t or not hr:
|
if t or not hr:
|
||||||
|
|
|
||||||
|
|
@ -3885,7 +3885,7 @@ def _runhook(
|
||||||
sz: int,
|
sz: int,
|
||||||
ip: str,
|
ip: str,
|
||||||
at: float,
|
at: float,
|
||||||
txt: str,
|
txt: Optional[list[str]],
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
ret = {"rc": 0}
|
ret = {"rc": 0}
|
||||||
areq, chk, imp, fork, sin, jtxt, wait, sp_ka, acmd = _parsehook(log, cmd)
|
areq, chk, imp, fork, sin, jtxt, wait, sp_ka, acmd = _parsehook(log, cmd)
|
||||||
|
|
@ -3908,15 +3908,17 @@ def _runhook(
|
||||||
"user": uname,
|
"user": uname,
|
||||||
"perms": perms,
|
"perms": perms,
|
||||||
"src": src,
|
"src": src,
|
||||||
"txt": txt,
|
|
||||||
}
|
}
|
||||||
|
if txt:
|
||||||
|
ja["txt"] = txt[0]
|
||||||
|
ja["body"] = txt[1]
|
||||||
if imp:
|
if imp:
|
||||||
ja["log"] = log
|
ja["log"] = log
|
||||||
mod = loadpy(acmd[0], False)
|
mod = loadpy(acmd[0], False)
|
||||||
return mod.main(ja)
|
return mod.main(ja)
|
||||||
arg = json.dumps(ja)
|
arg = json.dumps(ja)
|
||||||
else:
|
else:
|
||||||
arg = txt or ap
|
arg = txt[0] if txt else ap
|
||||||
|
|
||||||
if acmd[0].startswith("zmq:"):
|
if acmd[0].startswith("zmq:"):
|
||||||
zi, zs = _zmq_hook(log, verbose, src, acmd[0][4:].lower(), arg, wait, sp_ka)
|
zi, zs = _zmq_hook(log, verbose, src, acmd[0][4:].lower(), arg, wait, sp_ka)
|
||||||
|
|
@ -3979,7 +3981,7 @@ def runhook(
|
||||||
sz: int,
|
sz: int,
|
||||||
ip: str,
|
ip: str,
|
||||||
at: float,
|
at: float,
|
||||||
txt: str,
|
txt: Optional[list[str]],
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
assert broker or up2k # !rm
|
assert broker or up2k # !rm
|
||||||
args = (broker or up2k).args # type: ignore
|
args = (broker or up2k).args # type: ignore
|
||||||
|
|
|
||||||
|
|
@ -8613,9 +8613,14 @@ var msel = (function () {
|
||||||
sf.textContent = 'sending...';
|
sf.textContent = 'sending...';
|
||||||
|
|
||||||
var xhr = new XHR(),
|
var xhr = new XHR(),
|
||||||
|
sel = msel.getsel(),
|
||||||
|
msg = uricom_enc(tb.value),
|
||||||
ct = 'application/x-www-form-urlencoded;charset=UTF-8';
|
ct = 'application/x-www-form-urlencoded;charset=UTF-8';
|
||||||
|
|
||||||
xhr.msg = tb.value;
|
for (var a = 0; a < sel.length; a++)
|
||||||
|
msg += "&sel=" + sel[a].vp.split('/').pop();
|
||||||
|
|
||||||
|
xhr.msg = msg;
|
||||||
xhr.open('POST', get_evpath(), true);
|
xhr.open('POST', get_evpath(), true);
|
||||||
xhr.responseType = 'text';
|
xhr.responseType = 'text';
|
||||||
xhr.onload = xhr.onerror = cb;
|
xhr.onload = xhr.onerror = cb;
|
||||||
|
|
@ -8623,7 +8628,7 @@ var msel = (function () {
|
||||||
if (xhr.overrideMimeType)
|
if (xhr.overrideMimeType)
|
||||||
xhr.overrideMimeType('Content-Type', ct);
|
xhr.overrideMimeType('Content-Type', ct);
|
||||||
|
|
||||||
xhr.send('msg=' + uricom_enc(xhr.msg));
|
xhr.send('msg=' + xhr.msg);
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue