mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 00:52:16 -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"
|