From 83094a255627d55df2cd96d9c1b0be7a3ea2b198 Mon Sep 17 00:00:00 2001 From: cbdev Date: Mon, 11 Jul 2022 20:46:14 +0200 Subject: Initial admin templates and logic --- backend/Admin.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 6 deletions(-) (limited to 'backend') diff --git a/backend/Admin.py b/backend/Admin.py index b88f4c7..a844aff 100644 --- a/backend/Admin.py +++ b/backend/Admin.py @@ -1,9 +1,62 @@ +import jinja2 +import os + import config -from utils import redirect +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): - user = config.Auth.get(env) - if not user: - return redirect("/") - # TBD - return ["Admin panel for " + user["user"], [('Content-Type','text/html')], "200 OK"] + 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("/") -- cgit v1.2.3