aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/Admin.py65
1 files changed, 59 insertions, 6 deletions
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("/")