import jinja2 import os import config import utils template_factory = jinja2.Environment(loader=jinja2.FileSystemLoader('../interface/')) admin_dirs = template_factory.get_template("admin_dirs.tmpl") admin_files = template_factory.get_template("admin_files.tmpl") admin_delete = template_factory.get_template("admin_delete.tmpl") def route(path, env, post): auth = config.Auth.get(env) if not auth: print("No authorized user for admin access") return utils.redirect("/") # Directory overview if len(path) == 1: errmsg = None if post and "new" in post: try: dirname = utils.sanitize_filename(post["new"][0]) os.mkdir(utils.userdir(auth["user"]) + dirname) except FileExistsError: errmsg = "This directory already exists" except ValueError: errmsg = "The directory name was invalid" dirs = utils.dirlisting(utils.userdir(auth["user"]), False, True) return [admin_dirs.render({"user": auth["user"], "listing": dirs, "error": errmsg}), [("Content-Type", "text/html")], "200 OK"] # File listing if len(path) == 2 and path[1]: directory = utils.userdir(auth["user"]) + utils.sanitize_filename(path[1]) + "/" if not os.path.isdir(directory): return utils.redirect("/admin") files = utils.dirlisting(directory, True, False) return [admin_files.render({"user": auth["user"], "listing": files, "directory": utils.sanitize_filename(path[1])}), [("Content-Type", "text/html")], "200 OK"] # Alias management / Limits config # TODO # Renaming # TODO # Deletion if len(path) == 3 and path[2] == "delete": directory = utils.userdir(auth["user"]) + utils.sanitize_filename(path[1]) + "/" if not os.path.isdir(directory): return utils.redirect("/admin") files = utils.dirlisting(directory, True, False) if len(files) == 0 or env.get("QUERY_STRING", "") == "confirm": # TODO remove contents # TODO remove aliases os.rmdir(directory) return utils.redirect("/admin") return [admin_delete.render({"user": auth["user"], "listing": files, "directory": utils.sanitize_filename(path[1])}), [("Content-Type", "text/html")], "200 OK"] # Default case for admin / fallthrough return utils.redirect("/")