UI - config.json refactoring

This commit is contained in:
bunkerity 2020-12-23 11:31:37 +01:00
parent bd7b6af668
commit 569ad75c42
No known key found for this signature in database
GPG Key ID: 654FFF51CEF7CC47
4 changed files with 612 additions and 527 deletions

View File

@ -1,512 +1,607 @@
{
"max-client-size":{
"category":"Misc",
"Misc":{
"id":"max-client-size",
"params":[
{
"type":"text",
"label":"Max client size",
"env":"MAX_CLIENT_SIZE"
"env":"MAX_CLIENT_SIZE",
"id":"max-client-size"
},
"allowed-methods":{
"category":"Misc",
{
"type":"text",
"label":"Allowed methods",
"env":"ALLOWED_METHODS"
"env":"ALLOWED_METHODS",
"id":"allowed-methods"
},
"serve-files":{
"category":"Misc",
{
"type":"checkbox",
"label":"Serve files",
"env":"SERVE_FILES"
"env":"SERVE_FILES",
"id":"serve-files"
}
]
},
"remove-headers":{
"category":"Info leak",
"Info leak":{
"id":"remove-headers",
"params":[
{
"type":"text",
"label":"Remove headers",
"env":"REMOVE_HEADERS"
"env":"REMOVE_HEADERS",
"id":"remove-headers"
}
]
},
"use-auth-basic":{
"category":"Basic auth",
"Basic auth":{
"id":"use-auth-basic",
"params":[
{
"type":"checkbox",
"label":"Use auth basic",
"env":"USE_AUTH_BASIC"
"env":"USE_AUTH_BASIC",
"id":"use-auth-basic"
},
"auth-basic-location":{
"category":"Basic auth",
{
"type":"text",
"label":"Auth basic location",
"env":"AUTH_BASIC_LOCATION"
"env":"AUTH_BASIC_LOCATION",
"id":"auth-basic-location"
},
"auth-basic-user":{
"category":"Basic auth",
{
"type":"text",
"label":"Auth basic user",
"env":"AUTH_BASIC_USER"
"env":"AUTH_BASIC_USER",
"id":"auth-basic-user"
},
"auth-basic-password":{
"category":"Basic auth",
{
"type":"text",
"label":"Auth basic password",
"env":"AUTH_BASIC_PASSWORD"
"env":"AUTH_BASIC_PASSWORD",
"id":"auth-basic-password"
},
"auth-basic-text":{
"category":"Basic auth",
{
"type":"text",
"label":"Auth basic text",
"env":"AUTH_BASIC_TEXT"
"env":"AUTH_BASIC_TEXT",
"id":"auth-basic-text"
}
]
},
"use-reverse-proxy":{
"category":"Reverse proxy",
"Reverse proxy":{
"id":"use-reverse-proxy",
"params":[
{
"type":"checkbox",
"label":"Use reverse proxy",
"env":"USE_REVERSE_PROXY"
"env":"USE_REVERSE_PROXY",
"id":"use-reverse-proxy"
},
"reverse-proxy-url":{
"category":"Reverse proxy",
{
"type":"text",
"label":"Reverse proxy url",
"env":"REVERSE_PROXY_URL"
"env":"REVERSE_PROXY_URL",
"id":"reverse-proxy-url"
},
"reverse-proxy-host":{
"category":"Reverse proxy",
{
"type":"text",
"label":"Reverse proxy host",
"env":"REVERSE_PROXY_HOST"
"env":"REVERSE_PROXY_HOST",
"id":"reverse-proxy-host"
},
"reverse-proxy-ws":{
"category":"Reverse proxy",
{
"type":"checkbox",
"label":"Reverse proxy ws",
"env":"REVERSE_PROXY_WS"
"env":"REVERSE_PROXY_WS",
"id":"reverse-proxy-ws"
},
"proxy-real-ip":{
"category":"Reverse proxy",
{
"type":"checkbox",
"label":"Proxy real ip",
"env":"PROXY_REAL_IP"
"env":"PROXY_REAL_IP",
"id":"proxy-real-ip"
},
"proxy-real-ip-from":{
"category":"Reverse proxy",
{
"type":"text",
"label":"Proxy real ip from",
"env":"PROXY_REAL_IP_FROM"
"env":"PROXY_REAL_IP_FROM",
"id":"proxy-real-ip-from"
},
"proxy-real-ip-header":{
"category":"Reverse proxy",
{
"type":"text",
"label":"Proxy real ip header",
"env":"PROXY_REAL_IP_HEADER"
"env":"PROXY_REAL_IP_HEADER",
"id":"proxy-real-ip-header"
},
"proxy-real-ip-recursive":{
"category":"Reverse proxy",
{
"type":"text",
"label":"Proxy real ip recursive",
"env":"PROXY_REAL_IP_RECURSIVE"
"env":"PROXY_REAL_IP_RECURSIVE",
"id":"proxy-real-ip-recursive"
}
]
},
"use-gzip":{
"category":"Compression",
"Compression":{
"id":"compression",
"params":[
{
"type":"checkbox",
"label":"Use gzip",
"env":"USE_GZIP"
"env":"USE_GZIP",
"id":"use-gzip"
},
"gzip-comp-level":{
"category":"Compression",
{
"type":"text",
"label":"Gzip comp level",
"env":"GZIP_COMP_LEVEL"
"env":"GZIP_COMP_LEVEL",
"id":"gzip-comp-level"
},
"gzip-min-length":{
"category":"Compression",
{
"type":"text",
"label":"Gzip min length",
"env":"GZIP_MIN_LENGTH"
"env":"GZIP_MIN_LENGTH",
"id":"gzip-min-length"
},
"gzip-types":{
"category":"Compression",
{
"type":"text",
"label":"Gzip types",
"env":"GZIP_TYPES"
"env":"GZIP_TYPES",
"id":"gzip-types"
},
"use-brotli":{
"category":"Compression",
{
"type":"checkbox",
"label":"Use brotli",
"env":"USE_BROTLI"
"env":"USE_BROTLI",
"id":"use-brotli"
},
"brotli-comp-level":{
"category":"Compression",
{
"type":"text",
"label":"Brotli comp level",
"env":"BROTLI_COMP_LEVEL"
"env":"BROTLI_COMP_LEVEL",
"id":"brotli-comp-level"
},
"brotli-min-length":{
"category":"Compression",
{
"type":"text",
"label":"Brotli min length",
"env":"BROTLI_MIN_LENGTH"
"env":"BROTLI_MIN_LENGTH",
"id":"brotli-min-length"
},
"brotli-types":{
"category":"Compression",
{
"type":"text",
"label":"Brotli types",
"env":"BROTLI_TYPES"
"env":"BROTLI_TYPES",
"id":"brotli-types"
}
]
},
"use-client-cache":{
"category":"Cache",
"Cache":{
"id":"cache",
"params":[
{
"type":"checkbox",
"label":"Use client cache",
"env":"USE_CLIENT_CACHE"
"env":"USE_CLIENT_CACHE",
"id":"use-client-cache"
},
"client-cache-extensions":{
"category":"Cache",
{
"type":"text",
"label":"Client cache extensions",
"env":"CLIENT_CACHE_EXTENSIONS"
"env":"CLIENT_CACHE_EXTENSIONS",
"id":"client-cache-extensions"
},
"client-cache-control":{
"category":"Cache",
{
"type":"text",
"label":"Client cache control",
"env":"CLIENT_CACHE_CONTROL"
"env":"CLIENT_CACHE_CONTROL",
"id":"client-cache-control"
},
"client-cache-etag":{
"category":"Cache",
{
"type":"text",
"label":"Client cache etag",
"env":"CLIENT_CACHE_ETAG"
"env":"CLIENT_CACHE_ETAG",
"id":"client-cache-etag"
},
"use-open-file-cache":{
"category":"Cache",
{
"type":"checkbox",
"label":"Use open file cache",
"env":"USE_OPEN_FILE_CACHE"
"env":"USE_OPEN_FILE_CACHE",
"id":"use-open-file-cache"
},
"open-file-cache":{
"category":"Cache",
{
"type":"text",
"label":"Open file cache",
"env":"OPEN_FILE_CACHE"
"env":"OPEN_FILE_CACHE",
"id":"open-file-cache"
},
"open-file-cache-errors":{
"category":"Cache",
{
"type":"text",
"label":"Open file cache errors",
"env":"OPEN_FILE_CACHE_ERRORS"
"env":"OPEN_FILE_CACHE_ERRORS",
"id":"open-file-cache-errors"
},
"open-file-cache-min-uses":{
"category":"Cache",
{
"type":"text",
"label":"Open file cache min uses",
"env":"OPEN_FILE_CACHE_MIN_USES"
"env":"OPEN_FILE_CACHE_MIN_USES",
"id":"open-file-cache-min-uses"
},
"open-file-cache-valid":{
"category":"Cache",
{
"type":"text",
"label":"Open file cache valid",
"env":"OPEN_FILE_CACHE_VALID"
"env":"OPEN_FILE_CACHE_VALID",
"id":"open-file-cache-valid"
},
"use-proxy-cache":{
"category":"Cache",
{
"type":"checkbox",
"label":"Use proxy cache",
"env":"USE_PROXY_CACHE"
"env":"USE_PROXY_CACHE",
"id":"use-proxy-cache"
},
"proxy-cache-path-zone-size":{
"category":"Cache",
{
"type":"text",
"label":"Proxy cache path zone size",
"env":"PROXY_CACHE_PATH_ZONE_SIZE"
"env":"PROXY_CACHE_PATH_ZONE_SIZE",
"id":"proxy-cache-path-zone-size"
},
"proxy-cache-path-params":{
"category":"Cache",
{
"type":"text",
"label":"Proxy cache path params",
"env":"PROXY_CACHE_PATH_PARAMS"
"env":"PROXY_CACHE_PATH_PARAMS",
"id":"proxy-cache-path-params"
},
"proxy-cache-methods":{
"category":"Cache",
{
"type":"text",
"label":"Proxy cache methods",
"env":"PROXY_CACHE_METHODS"
"env":"PROXY_CACHE_METHODS",
"id":"proxy-cache-methods"
},
"proxy-cache-min-uses":{
"category":"Cache",
{
"type":"text",
"label":"Proxy cache min uses",
"env":"PROXY_CACHE_MIN_USES"
"env":"PROXY_CACHE_MIN_USES",
"id":"proxy-cache-min-uses"
},
"proxy-cache-key":{
"category":"Cache",
{
"type":"text",
"label":"Proxy cache key",
"env":"PROXY_CACHE_KEY"
"env":"PROXY_CACHE_KEY",
"id":"proxy-cache-key"
},
"proxy-cache-valid":{
"category":"Cache",
{
"type":"text",
"label":"Proxy cache valid",
"env":"PROXY_CACHE_VALID"
"env":"PROXY_CACHE_VALID",
"id":"proxy-cache-valid"
},
"proxy-no-cache":{
"category":"Cache",
{
"type":"text",
"label":"Proxy no cache",
"env":"PROXY_NO_CACHE"
"env":"PROXY_NO_CACHE",
"id":"proxy-no-cache"
},
"proxy-cache-bypass":{
"category":"Cache",
{
"type":"text",
"label":"Proxy cache bypass",
"env":"PROXY_CACHE_BYPASS"
"env":"PROXY_CACHE_BYPASS",
"id":"proxy-cache-bypass"
}
]
},
"auto-lets-encrypt":{
"category":"HTTPS",
"HTTPS":{
"id":"https",
"params":[
{
"type":"checkbox",
"label":"Auto lets encrypt",
"env":"AUTO_LETS_ENCRYPT"
"env":"AUTO_LETS_ENCRYPT",
"id":"auto-lets-encrypt"
},
"email-lets-encrypt":{
"category":"HTTPS",
{
"type":"text",
"label":"Email lets encrypt",
"env":"EMAIL_LETS_ENCRYPT"
"env":"EMAIL_LETS_ENCRYPT",
"id":"email-lets-encrypt"
},
"listen-http":{
"category":"",
"type":"checkbox",
"label":"Listen http",
"env":"LISTEN_HTTP"
},
"redirect-http-to-https":{
"category":"HTTPS",
{
"type":"checkbox",
"label":"Redirect http to https",
"env":"REDIRECT_HTTP_TO_HTTPS"
"env":"REDIRECT_HTTP_TO_HTTPS",
"id":"redirect-http-to-https"
},
"http2":{
"category":"HTTPS",
{
"type":"checkbox",
"label":"HTTP2",
"env":"HTTP2"
"env":"HTTP2",
"id":"http2"
},
"https-protocols":{
"category":"HTTPS",
{
"type":"text",
"label":"HTTPS protocols",
"env":"HTTPS_PROTOCOLS"
"env":"HTTPS_PROTOCOLS",
"id":"https-protocols"
},
"use-modsecurity":{
"category":"ModSecurity",
{
"type":"checkbox",
"label":"Listen http",
"env":"LISTEN_HTTP",
"id":"listen-http"
}
]
},
"ModSecurity":{
"id":"modsecurity",
"params":[
{
"type":"checkbox",
"label":"Use modsecurity",
"env":"USE_MODSECURITY"
"env":"USE_MODSECURITY",
"id":"use-modsecurity"
},
"use-modsecurity-crs":{
"category":"ModSecurity",
{
"type":"checkbox",
"label":"Use modsecurity crs",
"env":"USE_MODSECURITY_CRS"
"env":"USE_MODSECURITY_CRS",
"id":"use-modsecurity-crs"
}
]
},
"x-frame-options":{
"category":"Headers",
"Headers":{
"id":"headers",
"params":[
{
"type":"text",
"label":"X frame options",
"env":"X_FRAME_OPTIONS"
"env":"X_FRAME_OPTIONS",
"id":"x-frame-options"
},
"x-xss-protection":{
"category":"Headers",
{
"type":"text",
"label":"X xss protection",
"env":"X_XSS_PROTECTION"
"env":"X_XSS_PROTECTION",
"id":"x-xss-protection"
},
"x-content-type-options":{
"category":"Headers",
{
"type":"text",
"label":"X content type options",
"env":"X_CONTENT_TYPE_OPTIONS"
"env":"X_CONTENT_TYPE_OPTIONS",
"id":"x-content-type-options"
},
"referrer-policy":{
"category":"Headers",
{
"type":"text",
"label":"Referrer policy",
"env":"REFERRER_POLICY"
"env":"REFERRER_POLICY",
"id":"referrer-policy"
},
"feature-policy":{
"category":"Headers",
{
"type":"text",
"label":"Feature policy",
"env":"FEATURE_POLICY"
"env":"FEATURE_POLICY",
"id":"feature-policy"
},
"permissions-policy":{
"category":"Headers",
{
"type":"text",
"label":"Permissions policy",
"env":"PERMISSIONS_POLICY"
"env":"PERMISSIONS_POLICY",
"id":"permissions-policy"
},
"cookie-flags":{
"category":"Headers",
{
"type":"text",
"label":"Cookie flags",
"env":"COOKIE_FLAGS"
"env":"COOKIE_FLAGS",
"id":"cookie-flags"
},
"cookie-auto-secure-flag":{
"category":"Headers",
{
"type":"checkbox",
"label":"Cookie auto secure flag",
"env":"COOKIE_AUTO_SECURE_FLAG"
"env":"COOKIE_AUTO_SECURE_FLAG",
"id":"cookie-auto-secure-flag"
},
"strict-transport-security":{
"category":"Headers",
{
"type":"text",
"label":"Strict transport security",
"env":"STRICT_TRANSPORT_SECURITY"
"env":"STRICT_TRANSPORT_SECURITY",
"id":"strict-transport-security"
},
"content-security-policy":{
"category":"Headers",
{
"type":"text",
"label":"Content security policy",
"env":"CONTENT_SECURITY_POLICY"
"env":"CONTENT_SECURITY_POLICY",
"id":"content-security-policy"
}
]
},
"use-antibot":{
"category":"Antibot",
"Antibot":{
"id":"Antibot",
"params":[
{
"type":"text",
"label":"Use antibot",
"env":"USE_ANTIBOT"
"env":"USE_ANTIBOT",
"id":"use-antibot"
},
"antibot-uri":{
"category":"Antibot",
{
"type":"text",
"label":"Antibot uri",
"env":"ANTIBOT_URI"
"env":"ANTIBOT_URI",
"id":"antibot-uri"
},
"antibot-session-secret":{
"category":"Antibot",
{
"type":"text",
"label":"Antibot session secret",
"env":"ANTIBOT_SESSION_SECRET"
"env":"ANTIBOT_SESSION_SECRET",
"id":"antibot-session-secret"
},
"antibot-recaptcha-score":{
"category":"Antibot",
{
"type":"text",
"label":"Antibot recaptcha score",
"env":"ANTIBOT_RECAPTCHA_SCORE"
"env":"ANTIBOT_RECAPTCHA_SCORE",
"id":"antibot-recaptcha-score"
}
]
},
"block-user-agent":{
"category":"Block",
"Block":{
"id":"block",
"params":[
{
"type":"checkbox",
"label":"Block user agent",
"env":"BLOCK_USER_AGENT"
"env":"BLOCK_USER_AGENT",
"id":"block-user-agent"
},
"block-tor-exit-node":{
"category":"Block",
{
"type":"checkbox",
"label":"Block tor exit node",
"env":"BLOCK_TOR_EXIT_NODE"
"env":"BLOCK_TOR_EXIT_NODE",
"id":"block-tor-exit-node"
},
"block-proxies":{
"category":"Block",
{
"type":"checkbox",
"label":"Block proxies",
"env":"BLOCK_PROXIES"
"env":"BLOCK_PROXIES",
"id":"block-proxies"
},
"block-abusers":{
"category":"Block",
{
"type":"checkbox",
"label":"Block abusers",
"env":"BLOCK_ABUSERS"
"env":"BLOCK_ABUSERS",
"id":"block-abusers"
},
"block-referrer":{
"category":"Block",
{
"type":"checkbox",
"label":"Block referrer",
"env":"BLOCK_REFERRER"
"env":"BLOCK_REFERRER",
"id":"block-referrer"
}
]
},
"use-dnsbl":{
"category":"DNSBL",
"DNSBL":{
"id":"dnsbl",
"params":[
{
"type":"checkbox",
"label":"Use dnsbl",
"env":"USE_DNSBL"
"env":"USE_DNSBL",
"id":"use-dnsbl"
}
]
},
"use-crowdsec":{
"category":"CrowdSec",
"CrowdSec":{
"id":"use-crowdsec",
"params":[
{
"type":"checkbox",
"label":"Use crowdsec",
"env":"USE_CROWDSEC"
"env":"USE_CROWDSEC",
"id":"use-crowdsec"
}
]
},
"use-whitelist-ip":{
"category":"Whitelist",
"Whitelist":{
"id":"whitelist",
"params":[
{
"type":"checkbox",
"label":"Use whitelist ip",
"env":"USE_WHITELIST_IP"
"env":"USE_WHITELIST_IP",
"id":"use-whitelist-ip"
},
"use-whitelist-reverse":{
"category":"Whitelist",
{
"type":"checkbox",
"label":"Use whitelist reverse",
"env":"USE_WHITELIST_REVERSE"
"env":"USE_WHITELIST_REVERSE",
"id":"use-whitelist-reverse"
},
"use-blacklist-ip":{
"category":"Blacklist",
"type":"checkbox",
"label":"Use blacklist ip",
"env":"USE_BLACKLIST_IP"
},
"use-blacklist-reverse":{
"category":"Blacklist",
"type":"checkbox",
"label":"Use blacklist reverse",
"env":"USE_BLACKLIST_REVERSE"
},
"use-limit-req":{
"category":"Limit req",
"type":"checkbox",
"label":"Use limit req",
"env":"USE_LIMIT_REQ"
},
"limit-req-rate":{
"category":"Limit req",
"type":"text",
"label":"Limit req rate",
"env":"LIMIT_REQ_RATE"
},
"limit-req-burst":{
"category":"Limit req",
"type":"text",
"label":"Limit req burst",
"env":"LIMIT_REQ_BURST"
},
"blacklist-country":{
"category":"Blacklist",
"type":"text",
"label":"Blacklist country",
"env":"BLACKLIST_COUNTRY"
},
"whitelist-country":{
"category":"Whitelist",
{
"type":"text",
"label":"Whitelist country",
"env":"WHITELIST_COUNTRY"
"env":"WHITELIST_COUNTRY",
"id":"whitelist-country"
}
]
},
"remote-php":{
"category":"PHP",
"Blacklist":{
"id":"blacklist",
"params":[
{
"type":"checkbox",
"label":"Use blacklist ip",
"env":"USE_BLACKLIST_IP",
"id":"use-blacklist-ip"
},
{
"type":"checkbox",
"label":"Use blacklist reverse",
"env":"USE_BLACKLIST_REVERSE",
"id":"use-blacklist-reverse"
},
{
"type":"text",
"label":"Blacklist country",
"env":"BLACKLIST_COUNTRY",
"id":"blacklist-country"
}
]
},
"Limit req":{
"id":"limit-req",
"params":[
{
"type":"checkbox",
"label":"Use limit req",
"env":"USE_LIMIT_REQ",
"id":"use-limit-req"
},
{
"type":"text",
"label":"Limit req rate",
"env":"LIMIT_REQ_RATE",
"id":"limit-req-rate"
},
{
"type":"text",
"label":"Limit req burst",
"env":"LIMIT_REQ_BURST",
"id":"limit-req-burst"
}
]
},
"PHP":{
"id":"php",
"params":[
{
"type":"text",
"label":"Remote php",
"env":"REMOTE_PHP"
"env":"REMOTE_PHP",
"id":"remote-php"
},
"remote-php-path":{
"category":"PHP",
{
"type":"text",
"label":"Remote php path",
"env":"REMOTE_PHP_PATH"
"env":"REMOTE_PHP_PATH",
"id":"remote-php-path"
}
]
},
"use-fail2ban":{
"category":"PHP",
"Fail2ban":{
"id":"fail2ban",
"params":[
{
"type":"checkbox",
"label":"Use fail2ban",
"env":"USE_FAIL2BAN"
"env":"USE_FAIL2BAN",
"id":"use-fail2ban"
}
]
},
"use-clamav-upload":{
"category":"ClamAV",
"ClamAV":{
"id":"clamav",
"params":[
{
"type":"checkbox",
"label":"Use clamav upload",
"env":"USE_CLAMAV_UPLOAD"
"env":"USE_CLAMAV_UPLOAD",
"id":"use-clamav-upload"
}
]
}
}

View File

@ -11,15 +11,7 @@ if "ABSOLUTE_URI" in os.environ :
ABSOLUTE_URI = os.environ["ABSOLUTE_URI"]
app.config["ABSOLUTE_URI"] = ABSOLUTE_URI
with open("/opt/entrypoint/config.json", "r") as f :
config = json.loads(f.read())
app.config["CONFIG"] = {}
for k in config :
if not config[k]["category"] in app.config["CONFIG"] :
app.config["CONFIG"][config[k]["category"]] = []
tmp = config[k].copy()
tmp["id"] = k
app.config["CONFIG"][config[k]["category"]].append(tmp)
app.config["CONFIG"] = json.loads(f.read())
app.jinja_env.globals.update(env_to_summary_class=utils.env_to_summary_class)
app.jinja_env.globals.update(form_service_gen=utils.form_service_gen)

View File

@ -10,10 +10,9 @@
<div class="modal-body">
<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
{% set check = {"active": "active", "selected": "true"} %}
{% for category in config["CONFIG"] %}
{% set id_category = category.replace(" ", "") %}
{% for k, v in config["CONFIG"].items() %}
<li class="nav-item" role="presentation">
<a class="nav-link {{ check.active }}" id="edit-{{ id_category }}-{{ id_server_name }}-tab" data-bs-toggle="pill" href="#edit-{{ id_category }}-{{ id_server_name }}" role="tab" aria-controls="edit-{{ id_category }}-{{ id_server_name }}" aria-selected="{{ check.selected }}">{{ category }}</a>
<a class="nav-link {{ check.active }}" id="edit-{{ v["id"] }}-{{ id_server_name }}-tab" data-bs-toggle="pill" href="#edit-{{ v["id"] }}-{{ id_server_name }}" role="tab" aria-controls="edit-{{ v["id"] }}-{{ id_server_name }}" aria-selected="{{ check.selected }}">{{ k }}</a>
</li>
{% if check.update({"active": "", "selected": "false"}) %}
{% endif %}
@ -21,11 +20,10 @@
</ul>
<div class="tab-content" id="edit-content-{{ id_server_name }}">
{% set check = {"class": "show active"} %}
{% for category in config["CONFIG"] %}
{% set id_category = category.replace(" ", "") %}
<div class="tab-pane fade {{ check.class }}" id="edit-{{ id_category }}-{{ id_server_name }}" role="tabpanel" aria-labelledby="edit-{{ id_category }}-{{ id_server_name }}-tab">
{% for config in config["CONFIG"][category] %}
{{ form_service_gen("edit", service["SERVER_NAME"], config["id"], config["label"], config["type"], service[config["env"]])|safe }}
{% for k, v in config["CONFIG"].items() %}
<div class="tab-pane fade {{ check.class }}" id="edit-{{ v["id"] }}-{{ id_server_name }}" role="tabpanel" aria-labelledby="edit-{{ v["id"] }}-{{ id_server_name }}-tab">
{% for param in v["params"] %}
{{ form_service_gen("edit", id_server_name, param["id"], param["label"], param["type"], service[param["env"]])|safe }}
{% endfor %}
</div>
{% if check.update({"class": ""}) %}

View File

@ -26,7 +26,7 @@ def env_to_summary_class(var, value) :
def form_service_gen(form, server, id, label, type, value) :
if form == "edit" :
new_id = "form-edit-" + server.replace(".", "-") + "-" + id
new_id = "form-edit-" + server + "-" + id
elif form == "new" :
new_id = "form-new-" + id
if type == "text" :