summaryrefslogtreecommitdiff
path: root/manage.py
diff options
context:
space:
mode:
authorxengineering <mail2xengineering@protonmail.com>2021-03-01 14:16:47 +0100
committerxengineering <mail2xengineering@protonmail.com>2021-03-01 14:16:47 +0100
commitfcfffa47accad303bd9d927502396d8e4174c234 (patch)
tree277db3e6c2b2e9593fe3afd2c8dbf22747e74f99 /manage.py
parent7c461d3ed31a1805b30e5701873ad702a64ba0de (diff)
downloadweb-template-fcfffa47accad303bd9d927502396d8e4174c234.tar
web-template-fcfffa47accad303bd9d927502396d8e4174c234.tar.zst
web-template-fcfffa47accad303bd9d927502396d8e4174c234.zip
Actix Example
Diffstat (limited to 'manage.py')
-rw-r--r--manage.py226
1 files changed, 0 insertions, 226 deletions
diff --git a/manage.py b/manage.py
deleted file mode 100644
index 351ede6..0000000
--- a/manage.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/python3
-# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab
-
-
-import sys
-import os
-import re
-import pwd
-import grp
-import subprocess
-import json
-import jinja2
-
-
-SETTINGS_PATH = "settings.json"
-SYSTEMD_TEMPLATE = "systemd/webtemplate.service.jinja2"
-FLASK_TEMPLATE = "flask/main.py.jinja2"
-REPOSITORY_WEBROOT = "webroot"
-
-
-def read_settings():
- """Read the SETTINGS_PATH File and return a Dictionary with its Content"""
-
- with open(SETTINGS_PATH, "r") as settings:
- settings = settings.read()
-
- settings = json.loads(settings)
-
- # check for valid project name
- if not re.match(r"\A[a-z]+\Z", settings["project_name"]):
- print("Please provide a project_name in settings.json containing only characters from a to z in lower case")
- sys.exit(1)
-
- # check for valid project description
- if not re.match(r"\A[a-z|A-Z|0-9| ]+\Z", settings["project_description"]):
- print("Please provide a project description in settings.json containing only characters from a to z and numbers")
- sys.exit(1)
-
- # check for valid webroot path
- if not re.match(r"\A(/[a-z|A-Z|0-9|_|-|\.]*)+\Z", settings["webroot"]):
- print("Please select an absolute and valid path as webroot in settings.json")
- sys.exit(1)
-
- # check for valid framework selection
- if not settings["framework"] in [None, "flask", "actix"]:
- print("Unknown framework in settings.json")
- sys.exit(1)
-
- # check for valid framework port
- if not int(settings["framework_port"]) >= 1:
- print("Please select a valid framework_port in settings.json")
- sys.exit(1)
-
- # check for valid framework bind address
- if not re.match(r"\A([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])(\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])){3}\Z", settings["framework_bind"]):
- print("Please provide a valid IP address as framework_bind in settings.json")
- sys.exit(1)
-
- # check for valid user
- users = []
- for user in pwd.getpwall():
- users.append(user[0]) # append just the name
- if not settings["user"] in users:
- print("User '{}' does not exist on this system. Please select a valid user in settings.json".format(settings["user"]))
- sys.exit(1)
-
- # check for valid group
- groups = []
- for group in grp.getgrall():
- groups.append(group[0]) # append just the name
- if not settings["group"] in groups:
- print("Group '{}' does not exist on this system. Please select a valid group in settings.json".format(settings["group"]))
- sys.exit(1)
-
- return settings
-
-
-def build_systemd_file(settings):
- """Generate Systemd Unit File with Settings from SETTINGS_PATH"""
-
- with open(SYSTEMD_TEMPLATE, "r") as template:
- template = template.read()
-
- template = jinja2.Template(template)
- systemd_file = template.render(settings)
-
- subprocess.call("mkdir -p systemd/build", shell=True)
- file_path = "systemd/build/{}.service".format(settings["project_name"])
-
- with open(file_path, "w") as _file:
- _file.write(systemd_file)
-
-
-def build_flask(settings):
- """Generate Python Flask File with Settings from SETTINGS_PATH"""
-
- with open(FLASK_TEMPLATE, "r") as template:
- template = template.read()
-
- template = jinja2.Template(template)
- flask_file = template.render(settings)
-
- subprocess.call("mkdir -p flask/build", shell=True)
-
- file_path = "flask/build/{}".format(settings["project_name"])
-
- with open(file_path, "w") as _file:
- _file.write(flask_file)
-
-
-def install_webroot(settings):
- """Install every File from the Repositories Webroot to the Systems Webroot"""
-
- for directory, subdirs, files in os.walk(REPOSITORY_WEBROOT, topdown=False):
- for _file in files:
- path_to_file = os.path.join(directory, _file)
- relative_path = os.path.relpath(path_to_file, REPOSITORY_WEBROOT)
- target_path = os.path.join(settings["webroot"], relative_path)
- subprocess.run("install -Dm 644 {} {}".format(path_to_file, target_path), shell=True)
-
-
-def uninstall_webroot(settings):
- """Uninstalls every File from the Systems Webroot"""
-
- path_to_delete = os.path.join(settings["webroot"], "*")
- subprocess.run("rm -rf {}".format(path_to_delete), shell=True)
-
-
-def install_flask(settings):
- """Install the Executable for the Dynamic Web Server"""
-
- subprocess.call("sudo mkdir -p /opt/{}".format(settings["project_name"]), shell=True)
- subprocess.call("sudo install -Dm 744 flask/build/{0} /opt/{0}/{0}".format(settings["project_name"]), shell=True)
- order = "sudo find /opt/{0} -exec chown -R {1}:{2}".format(
- settings["project_name"],
- settings["user"],
- settings["group"]
- )
- order += " {} \;"
- subprocess.call(order, shell=True)
-
-
-def uninstall_flask(settings):
- """Uninstall the Executable for the Dynamic Web Server"""
-
- subprocess.call("sudo rm -rf /opt/{}".format(settings["project_name"]), shell=True)
-
-
-def install_systemd_file(settings):
- """Install the Systemd Unit for launching the dynamic Web Server"""
-
- if settings["framework"] != None:
- subprocess.call("sudo install -Dm 644 systemd/build/{0}.service /etc/systemd/system/{0}.service".format(settings["project_name"]), shell=True)
- subprocess.call("sudo systemctl daemon-reload", shell=True)
-
-
-def uninstall_systemd_file(settings):
- """Uninstall the Systemd Unit for launching the dynamic Web Server"""
-
- if settings["framework"] != None:
- subprocess.call("sudo rm /etc/systemd/system/{0}.service".format(settings["project_name"]), shell=True)
-
-
-def main():
- """The main Function"""
-
- settings = read_settings() # get settings from SETTINGS_PATH
-
- # just one argument is allowed:
- if len(sys.argv) != 2:
- print("Provide exactly one parameter")
- sys.exit(1)
-
- # execute given command
- command = sys.argv[1]
- if command == "build_systemd_file":
- build_systemd_file(settings)
- elif command == "build_framework":
- if settings["framework"] == "flask":
- build_flask(settings)
- elif settings["framework"] == "actix-web":
- print("actix-web is not yet implemented ...")
- sys.exit(1)
- elif settings["framework"] == None:
- pass
- else:
- print("Unknown web framework selected")
- sys.exit(1)
- elif command == "install_webroot":
- install_webroot(settings)
- elif command == "uninstall_webroot":
- uninstall_webroot(settings)
- elif command == "install_framework":
- if settings["framework"] == "flask":
- install_flask(settings)
- elif settings["framework"] == "actix-web":
- print("actix-web is not yet implemented ...")
- sys.exit(1)
- elif settings["framework"] == None:
- pass
- else:
- print("Unknown web framework selected")
- sys.exit(1)
- elif command == "uninstall_framework":
- if settings["framework"] == "flask":
- uninstall_flask(settings)
- elif settings["framework"] == "actix-web":
- print("actix-web is not yet implemented ...")
- sys.exit(1)
- elif settings["framework"] == None:
- pass
- else:
- print("Unknown web framework selected")
- sys.exit(1)
- elif command == "install_systemd_file":
- install_systemd_file(settings)
- elif command == "uninstall_systemd_file":
- uninstall_systemd_file(settings)
- else:
- print("Unknown command")
- sys.exit(1)
-
-
-if __name__ == "__main__":
- main()
-