aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2022-07-11 20:46:14 +0200
committercbdev <cb@cbcdn.com>2022-07-11 20:46:14 +0200
commit83094a255627d55df2cd96d9c1b0be7a3ea2b198 (patch)
tree29bdab8a5cc22b95ab03983ac7b2a29403067337 /backend
parent596d683fc26e18e68f2a7a13520dd2b85674814b (diff)
downloadcargohold-83094a255627d55df2cd96d9c1b0be7a3ea2b198.tar.gz
cargohold-83094a255627d55df2cd96d9c1b0be7a3ea2b198.tar.bz2
cargohold-83094a255627d55df2cd96d9c1b0be7a3ea2b198.zip
Initial admin templates and logic
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("/")