templating - added missing features in site templates

This commit is contained in:
bunkerity
2021-05-25 17:07:06 +02:00
parent 23aa053003
commit ec19f93081
8 changed files with 119 additions and 30 deletions

View File

@@ -40,4 +40,9 @@ class Configurator :
real_var = var
elif var[len(var.split("_")[0])+1:] in self.__settings :
real_var = var[len(var.split("_")[0])+1:]
elif re.search("\\_\d+$", var) and ("_".join(var.split("_")[:-1]) in self.__settings or "_".join(var.split("_")[:-1][1:]) in self.__settings) :
if "_".join(var.split("_")[:-1]) in self.__settings :
real_var = "_".join(var.split("_")[:-1])
else :
real_var = "_".join(var.split("_")[:-1][1:])
return real_var != "" and re.search(self.__settings[real_var]["regex"], value) and (not multisite_only or self.__settings[real_var]["context"] == "multisite")

View File

@@ -1,4 +1,4 @@
import jinja2, glob, os, pathlib, copy, crypt
import jinja2, glob, os, pathlib, copy, crypt, random, string
class Templator :
@@ -21,7 +21,7 @@ class Templator :
first_server = self.__config["SERVER_NAME"].split(" ")[0]
return self.__render("site", server_name, first_server)
def __render(self, type, server_name=None, first_server=None) :
def __prepare_config(self, type, server_name=None, first_server=None) :
real_config = copy.deepcopy(self.__config)
if not server_name is None :
real_config["SERVER_NAME"] = server_name
@@ -30,23 +30,48 @@ class Templator :
real_config["NGINX_PREFIX"] = self.__target_path
if real_config["MULTISITE"] == "yes" and type == "site" :
real_config["NGINX_PREFIX"] += first_server + "/"
real_config["ROOT_FOLDER"] += "/" + first_server
for variable, value in self.__config.items() :
if variable.startswith(first_server + "_") :
real_config[variable.replace(first_server + "_", "", 1)] = value
if real_config["ROOT_SITE_SUBFOLDER"] != "" :
real_config["ROOT_FOLDER"] += "/" + real_config["ROOT_SITE_SUBFOLDER"]
return real_config
def __save_config(self, type, config) :
data = ""
for variable, value in config.items() :
data += variable + "=" + value + "\n"
file = self.__output_path
if type == "global" :
file += "/global.env"
elif config["MULTISITE"] == "yes" :
file += "/" + config["FIRST_SERVER"] + "/site.env"
else :
file += "/site.env"
with open(file, "w") as f :
f.write(data)
def __render(self, type, server_name=None, first_server=None) :
real_config = self.__prepare_config(type, server_name, first_server)
for filename in glob.iglob(self.__input_path + "/" + type + "**/**", recursive=True) :
if os.path.isfile(filename) :
relative_filename = filename.replace(self.__input_path, "").replace(type + "/", "")
template = self.__template_env.get_template(type + "/" + relative_filename)
template.globals["has_value"] = Templator.has_value
template.globals["sha512_crypt"] = Templator.sha512_crypt
output = template.render(real_config, all=real_config)
if real_config["MULTISITE"] == "yes" and type == "site" :
relative_filename = first_server + "/" + relative_filename
if "/" in relative_filename :
directory = relative_filename.replace(relative_filename.split("/")[-1], "")
pathlib.Path(self.__output_path + "/" + directory).mkdir(parents=True, exist_ok=True)
with open(self.__output_path + "/" + relative_filename, "w") as f :
f.write(output)
if not os.path.isfile(filename) :
continue
relative_filename = filename.replace(self.__input_path, "").replace(type + "/", "")
template = self.__template_env.get_template(type + "/" + relative_filename)
template.globals["has_value"] = Templator.has_value
template.globals["sha512_crypt"] = Templator.sha512_crypt
template.globals["is_custom_conf"] = Templator.is_custom_conf
template.globals["random"] = Templator.random
output = template.render(real_config, all=real_config)
if real_config["MULTISITE"] == "yes" and type == "site" :
relative_filename = real_config["FIRST_SERVER"] + "/" + relative_filename
if "/" in relative_filename :
directory = relative_filename.replace(relative_filename.split("/")[-1], "")
pathlib.Path(self.__output_path + "/" + directory).mkdir(parents=True, exist_ok=True)
with open(self.__output_path + "/" + relative_filename, "w") as f :
f.write(output)
self.__save_config(type, real_config)
@jinja2.contextfunction
def has_value(context, name, value) :
@@ -57,3 +82,11 @@ class Templator :
def sha512_crypt(password) :
return crypt.crypt(password, crypt.mksalt(crypt.METHOD_SHA512))
def is_custom_conf(folder) :
for filename in glob.iglob(folder + "/*.conf") :
return True
return False
def random(number) :
return "".join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits, k=number))