mirror of
				https://github.com/9001/copyparty.git
				synced 2025-10-30 20:22:20 -06: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