Skip to content

Commit

Permalink
update json by base64
Browse files Browse the repository at this point in the history
Update JSON in DOM by base64 equivalent to avoid parse issues with large JSON elements (like global config)
  • Loading branch information
syrk4web committed Jul 8, 2024
1 parent f7bbffe commit a5d504d
Show file tree
Hide file tree
Showing 20 changed files with 204 additions and 18,105 deletions.
4 changes: 2 additions & 2 deletions src/client/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,9 @@ async function setBuildTempToUI() {
{% endfor %}
{% endwith %}
<div class='hidden' data-csrf-token='{{ csrf_token() }}'></div>
<div class='hidden' data-server-global='{{data_server_global if data_server_global else {}}}''></div>
<div class='hidden' data-server-global='{{data_server_global if data_server_global else {}}}'></div>
<div class='hidden' data-server-flash='{{data_server_flash|tojson}}'></div>
<div class='hidden' data-server-builder='{{data_server_builder}}'></div>
<div class='hidden' data-server-builder='{{data_server_builder[1:-1]}}'></div>
<div id='app'></div>
</body>
</html>`;
Expand Down
8,966 changes: 1 addition & 8,965 deletions src/client/tests/globalconfig.json

Large diffs are not rendered by default.

103 changes: 56 additions & 47 deletions src/client/tests/globalconfig.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import json
import copy
import base64


plugins = [
Expand Down Expand Up @@ -3036,15 +3037,9 @@ def get_service_forms(templates=[], plugins=[], service_settings={}):
forms = {"advanced": {}, "easy": {}, "raw": {}}

for template in templates:
forms["advanced"][template.get("name")] = set_advanced(
template, plugins, service_settings
)
forms["raw"][template.get("name")] = set_raw(
template, plugins, service_settings
)
forms["easy"][template.get("name")] = set_easy(
template, plugins, service_settings
)
forms["advanced"][template.get("name")] = set_advanced(template, plugins, service_settings)
forms["raw"][template.get("name")] = set_raw(template, plugins, service_settings)
forms["easy"][template.get("name")] = set_easy(template, plugins, service_settings)

return forms

Expand Down Expand Up @@ -3111,9 +3106,7 @@ def set_raw(template, plugins_base, service_settings):
for plugin in plugins:
for setting, value in plugin.get("settings").items():
# avoid some methods from services_settings
if setting in service_settings and service_settings[setting].get(
"method", "ui"
) not in ("ui", "default"):
if setting in service_settings and service_settings[setting].get("method", "ui") not in ("ui", "default"):
continue

raw_value = False
Expand All @@ -3125,9 +3118,7 @@ def set_raw(template, plugins_base, service_settings):

# Then override by service settings
if setting in service_settings:
raw_value = service_settings[setting].get(
"value", value.get("value", value.get("default"))
)
raw_value = service_settings[setting].get("value", value.get("value", value.get("default")))

# Add value only if exists
if raw_value:
Expand Down Expand Up @@ -3158,9 +3149,45 @@ def set_advanced(template, plugins_base, service_settings):
template_settings,
service_settings,
)

set_multiples(plugins)

return plugins


def set_multiples(format_plugins):
"""
Set the multiples settings for each plugin.
"""
# copy of format plugins
for plugin in format_plugins:
# Prepare multiples key
plugin["multiples"] = {}
# Get multiples
multiples = {}
settings_to_delete = []
for setting, value in plugin.get("settings").items():
if not value.get("multiple"):
continue

mult_name = value.get("multiple")
# Get the multiple value and set it as key if not in multiples dict
if mult_name not in multiples:
multiples[mult_name] = {}

multiples[mult_name][setting] = value
settings_to_delete.append(setting)

# Delete multiple settings from regular settings
for setting in settings_to_delete:
del plugin["settings"][setting]

if len(multiples):
plugin["multiples"].update(multiples)

return format_plugins


def format_setting(
setting_name,
setting_value,
Expand All @@ -3182,11 +3209,7 @@ def format_setting(
inpType = (
"checkbox"
if setting_value.get("type") == "check"
else (
"select"
if setting_value.get("type") == "select"
else "datepicker" if setting_value.get("type") == "date" else "input"
)
else ("select" if setting_value.get("type") == "select" else "datepicker" if setting_value.get("type") == "date" else "input")
)
setting_value["inpType"] = inpType

Expand All @@ -3209,27 +3232,17 @@ def format_setting(
# Start by setting template value if exists
if setting_name in template_settings:
# Update value or set default as value
setting_value["value"] = template_settings.get(
setting_name, setting_value.get("default")
)
setting_value["value"] = template_settings.get(setting_name, setting_value.get("default"))

# Then override by service settings
if setting_name in service_settings:
setting_value["value"] = service_settings[setting_name].get(
"value", setting_value.get("value", setting_value.get("default"))
)
setting_value["disabled"] = (
False
if service_settings[setting_name].get("method", "ui") in ("ui", "default")
else True
)
setting_value["value"] = service_settings[setting_name].get("value", setting_value.get("value", setting_value.get("default")))
setting_value["disabled"] = False if service_settings[setting_name].get("method", "ui") in ("ui", "default") else True

# Prepare popover checking "help", "context"
popovers = []

if (setting_value.get("disabled", False)) and service_settings[setting_name].get(
"method", "ui"
) not in ("ui", "default"):
if (setting_value.get("disabled", False)) and service_settings[setting_name].get("method", "ui") not in ("ui", "default"):
popovers.append(
{
"iconName": "trespass",
Expand All @@ -3240,14 +3253,8 @@ def format_setting(
if setting_value.get("context"):
popovers.append(
{
"iconName": (
"disk" if setting_value.get("context") == "multisite" else "globe"
),
"text": (
"inp_popover_multisite"
if setting_value.get("context") == "multisite"
else "inp_popover_global"
),
"iconName": ("disk" if setting_value.get("context") == "multisite" else "globe"),
"text": ("inp_popover_multisite" if setting_value.get("context") == "multisite" else "inp_popover_global"),
}
)

Expand Down Expand Up @@ -3283,9 +3290,7 @@ def global_config_builder():
{
"type": "Templates",
"data": {
"templates": get_service_forms(
templates, plugins, service_settings
),
"templates": get_service_forms(templates, plugins, service_settings),
},
},
],
Expand All @@ -3296,6 +3301,10 @@ def global_config_builder():


output = global_config_builder()

with open("globalconfig.json", "w") as f:
with open("globalconfig64.txt", "w") as f:
json.dump(output, f, indent=4)

output_base64_bytes = base64.b64encode(bytes(json.dumps(output), "utf-8"))
output_base64_string = output_base64_bytes.decode("ascii")
with open("globalconfig64.txt", "w") as f:
f.write(output_base64_string)
1 change: 1 addition & 0 deletions src/client/tests/globalconfig64.txt

Large diffs are not rendered by default.

107 changes: 107 additions & 0 deletions src/client/tests/home.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
[
{
"type": "card",
"link": "https://panel.bunkerweb.io/?utm_campaign=self&utm_source=ui#pro",
"containerColumns": {
"pc": 4,
"tablet": 6,
"mobile": 12
},
"widgets": [
{
"type": "Stat",
"data": {
"title": "home_version",
"subtitle": "home_upgrade_to_pro",
"subtitleColor": "warning",
"stat": "home_free",
"iconName": "key"
}
}
]
},
{
"type": "card",
"link": "https://github.com/bunkerity/bunkerweb",
"containerColumns": {
"pc": 4,
"tablet": 6,
"mobile": 12
},
"widgets": [
{
"type": "Stat",
"data": {
"title": "home_version_number",
"subtitle": "home_update_available",
"subtitleColor": "warning",
"stat": "1.5.8",
"iconName": "wire"
}
}
]
},
{
"type": "card",
"link": "/instances",
"containerColumns": {
"pc": 4,
"tablet": 6,
"mobile": 12
},
"widgets": [
{
"type": "Stat",
"data": {
"title": "home_instances",
"subtitle": "home_total_number",
"subtitleColor": "info",
"stat": 1,
"iconName": "box"
}
}
]
},
{
"type": "card",
"link": "/services",
"containerColumns": {
"pc": 4,
"tablet": 6,
"mobile": 12
},
"widgets": [
{
"type": "Stat",
"data": {
"title": "home_services",
"subtitle": "home_all_methods_included",
"subtitleColor": "info",
"stat": 2,
"iconName": "disk"
}
}
]
},
{
"type": "card",
"link": "/plugins",
"containerColumns": {
"pc": 4,
"tablet": 6,
"mobile": 12
},
"widgets": [
{
"type": "Stat",
"data": {
"title": "home_plugins",
"subtitle": "home_no_error",
"subtitleColor": "success",
"stat": "42",
"iconName": "puzzle"
}
}
]
}
]
6 changes: 6 additions & 0 deletions src/client/tests/home.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
import base64

home = [
{
Expand Down Expand Up @@ -91,3 +92,8 @@
# store on a file
with open("home.json", "w") as f:
json.dump(home, f, indent=4)
output_base64_bytes = base64.b64encode(bytes(json.dumps(home), "utf-8"))
output_base64_string = output_base64_bytes.decode("ascii")

with open("home.txt", "w") as f:
f.write(output_base64_string)
1 change: 1 addition & 0 deletions src/client/tests/home.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
W3sidHlwZSI6ICJjYXJkIiwgImxpbmsiOiAiaHR0cHM6Ly9wYW5lbC5idW5rZXJ3ZWIuaW8vP3V0bV9jYW1wYWlnbj1zZWxmJnV0bV9zb3VyY2U9dWkjcHJvIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJTdGF0IiwgImRhdGEiOiB7InRpdGxlIjogImhvbWVfdmVyc2lvbiIsICJzdWJ0aXRsZSI6ICJob21lX3VwZ3JhZGVfdG9fcHJvIiwgInN1YnRpdGxlQ29sb3IiOiAid2FybmluZyIsICJzdGF0IjogImhvbWVfZnJlZSIsICJpY29uTmFtZSI6ICJrZXkifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICJodHRwczovL2dpdGh1Yi5jb20vYnVua2VyaXR5L2J1bmtlcndlYiIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX3ZlcnNpb25fbnVtYmVyIiwgInN1YnRpdGxlIjogImhvbWVfdXBkYXRlX2F2YWlsYWJsZSIsICJzdWJ0aXRsZUNvbG9yIjogIndhcm5pbmciLCAic3RhdCI6ICIxLjUuOCIsICJpY29uTmFtZSI6ICJ3aXJlIn19XX0sIHsidHlwZSI6ICJjYXJkIiwgImxpbmsiOiAiL2luc3RhbmNlcyIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX2luc3RhbmNlcyIsICJzdWJ0aXRsZSI6ICJob21lX3RvdGFsX251bWJlciIsICJzdWJ0aXRsZUNvbG9yIjogImluZm8iLCAic3RhdCI6IDEsICJpY29uTmFtZSI6ICJib3gifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICIvc2VydmljZXMiLCAiY29udGFpbmVyQ29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlN0YXQiLCAiZGF0YSI6IHsidGl0bGUiOiAiaG9tZV9zZXJ2aWNlcyIsICJzdWJ0aXRsZSI6ICJob21lX2FsbF9tZXRob2RzX2luY2x1ZGVkIiwgInN1YnRpdGxlQ29sb3IiOiAiaW5mbyIsICJzdGF0IjogMiwgImljb25OYW1lIjogImRpc2sifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICIvcGx1Z2lucyIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX3BsdWdpbnMiLCAic3VidGl0bGUiOiAiaG9tZV9ub19lcnJvciIsICJzdWJ0aXRsZUNvbG9yIjogInN1Y2Nlc3MiLCAic3RhdCI6ICI0MiIsICJpY29uTmFtZSI6ICJwdXp6bGUifX1dfV0=
7 changes: 7 additions & 0 deletions src/client/tests/instances.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
import base64


# Create instance class using keys from the instances list
Expand Down Expand Up @@ -75,3 +76,9 @@ def instances_builder(instances: list):
# store on a file
with open("instances.json", "w") as f:
json.dump(builder, f)

output_base64_bytes = base64.b64encode(bytes(json.dumps(builder), "utf-8"))
output_base64_string = output_base64_bytes.decode("ascii")

with open("instances.txt", "w") as f:
f.write(output_base64_string)
1 change: 1 addition & 0 deletions src/client/tests/instances.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfaG9zdG5hbWUiLCAidmFsdWUiOiAiYnVua2Vyd2ViIn0sIHsia2V5IjogImluc3RhbmNlc190eXBlIiwgInZhbHVlIjogIm1hbnVhbCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfc3RhdHVzIiwgInZhbHVlIjogImluc3RhbmNlc19hY3RpdmUifV0sICJzdGF0dXMiOiAic3VjY2VzcyIsICJ0aXRsZSI6ICJidW5rZXJ3ZWIiLCAiYnV0dG9ucyI6IFt7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJyZWxvYWRcIiB9In0sICJ0ZXh0IjogImFjdGlvbl9yZWxvYWQiLCAiY29sb3IiOiAid2FybmluZyJ9LCB7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJzdG9wXCIgfSJ9LCAidGV4dCI6ICJhY3Rpb25fc3RvcCIsICJjb2xvciI6ICJlcnJvciJ9XX19XX0sIHsidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfaG9zdG5hbWUiLCAidmFsdWUiOiAiYnVua2Vyd2ViIn0sIHsia2V5IjogImluc3RhbmNlc190eXBlIiwgInZhbHVlIjogIm1hbnVhbCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfc3RhdHVzIiwgInZhbHVlIjogImluc3RhbmNlc19hY3RpdmUifV0sICJzdGF0dXMiOiAic3VjY2VzcyIsICJ0aXRsZSI6ICJidW5rZXJ3ZWIiLCAiYnV0dG9ucyI6IFt7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJyZWxvYWRcIiB9In0sICJ0ZXh0IjogImFjdGlvbl9yZWxvYWQiLCAiY29sb3IiOiAid2FybmluZyJ9LCB7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJzdG9wXCIgfSJ9LCAidGV4dCI6ICJhY3Rpb25fc3RvcCIsICJjb2xvciI6ICJlcnJvciJ9XX19XX1d
Loading

0 comments on commit a5d504d

Please sign in to comment.