mirror of
				https://github.com/9001/copyparty.git
				synced 2025-10-31 04:32:20 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			986 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			986 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| import random
 | |
| from urllib.parse import quote
 | |
| 
 | |
| 
 | |
| # assuming /foo/bar/ is a valid URL but /foo/bar/randpic.png does not exist,
 | |
| # hijack the 404 with a redirect to a random pic in that folder
 | |
| #
 | |
| # thx to lia & kipu for the idea
 | |
| 
 | |
| 
 | |
| def main(cli, vn, rem):
 | |
|     req_fn = rem.split("/")[-1]
 | |
|     if not cli.can_read or not req_fn.startswith("randpic"):
 | |
|         return
 | |
| 
 | |
|     req_abspath = vn.canonical(rem)
 | |
|     req_ap_dir = os.path.dirname(req_abspath)
 | |
|     files_in_dir = os.listdir(req_ap_dir)
 | |
| 
 | |
|     if "." in req_fn:
 | |
|         file_ext = "." + req_fn.split(".")[-1]
 | |
|         files_in_dir = [x for x in files_in_dir if x.lower().endswith(file_ext)]
 | |
| 
 | |
|     if not files_in_dir:
 | |
|         return
 | |
| 
 | |
|     selected_file = random.choice(files_in_dir)
 | |
| 
 | |
|     req_url = "/".join([vn.vpath, rem]).strip("/")
 | |
|     req_dir = req_url.rsplit("/", 1)[0]
 | |
|     new_url = "/".join([req_dir, quote(selected_file)]).strip("/")
 | |
| 
 | |
|     cli.reply(b"redirecting...", 302, headers={"Location": "/" + new_url})
 | |
|     return "true"
 |