precommit

This commit is contained in:
Jordan Blasenhauer 2024-08-09 10:28:51 +02:00
parent bf9bb9aa69
commit 6e854aa636
73 changed files with 63186 additions and 42238 deletions

View file

@ -3208,4 +3208,3 @@ This component is lightweight builder containing only the necessary components t
#### Parameters
- `json` ;

View file

@ -46,4 +46,3 @@ def raw_mode_builder(templates: list[dict], plugins: list, global_config: dict,
}
]
return builder

View file

@ -26,4 +26,4 @@ dist-ssr
# build
opt-dashboard
opt-setup
outpout
outpout

View file

@ -4,7 +4,7 @@ Vite.js will be use to build needed pages and resources (CSS, JS...) for the Bun
# Structure
We have two main folders :
We have two main folders :
- `dashboard` with a multi page approach, this part is used to dev main pages on the dashboard. Use `vite.config.dashboard.js`.
- `setup` that is special because we need a all-in-one HTML file for the setup page. Use `vite.config.setup.js`.
@ -21,4 +21,4 @@ In case you want to run the BunkerWeb UI, try to update front-end and get the mo
# Prod mode
You only have to run a basic `docker-compose` and `src/ui/Dockerfile` will build the front automatically.
You only have to run a basic `docker-compose` and `src/ui/Dockerfile` will build the front automatically.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -43,7 +43,7 @@ const banner = reactive({
// I want to match everything inside class and replace it
data[index].content = item.content.replace(
/class='(.+?)'|class="(.+?)"/g,
'class="banner-item-text"'
'class="banner-item-text"',
);
});
return data;
@ -83,7 +83,7 @@ function setupBanner() {
// Refetch after one hour
sessionStorage.setItem(
"bannerRefetch",
Math.round(new Date().getTime() / 1000) + 3600
Math.round(new Date().getTime() / 1000) + 3600,
);
banner.api = res.data[0].data;
if (banner.api.length > 0) {

View file

@ -52,8 +52,8 @@ onMounted(() => {
`dashboard_${header.currPath}`,
$t(
"dashboard_placeholder",
$t("dashboard_placeholder", header.currPath)
)
$t("dashboard_placeholder", header.currPath),
),
)
}}
</h2>
@ -67,8 +67,8 @@ onMounted(() => {
`dashboard_${header.lastPath}`,
$t(
"dashboard_placeholder",
$t("dashboard_placeholder", header.lastPath)
)
$t("dashboard_placeholder", header.lastPath),
),
)
}}
</li>

View file

@ -52,7 +52,7 @@ function loadNews() {
) {
sessionStorage.setItem(
"lastRefetch",
Math.round(new Date().getTime() / 1000) + 3600
Math.round(new Date().getTime() / 1000) + 3600,
);
sessionStorage.setItem("lastNews", JSON.stringify(reverseData));
}

View file

@ -357,8 +357,8 @@ onUnmounted(() => {
data.isReqErr || data.isRegErr
? true
: advancedForm.isUpdateData
? false
: true
? false
: true
"
@click="advancedForm.submit()"
/>

View file

@ -102,7 +102,7 @@ watch(
() => props.template,
() => {
setup();
}
},
);
/**

View file

@ -78,7 +78,7 @@ watch(
setTimeout(() => {
data.isRender = true;
}, 50);
}
},
);
/**

View file

@ -51,12 +51,12 @@ const props = defineProps({
props.isValid
? $t("inp_input_valid")
: props.isNoMatch
? $t("inp_input_no_match")
: props.isValueTaken
? $t("inp_input_error_taken")
: !props.isValue
? $t("inp_input_error_required")
: $t("inp_input_error")
? $t("inp_input_no_match")
: props.isValueTaken
? $t("inp_input_error_taken")
: !props.isValue
? $t("inp_input_error_required")
: $t("inp_input_error")
}}
</p>
</div>

View file

@ -46,12 +46,12 @@ const props = defineProps({
props.isValid
? $t("inp_input_valid")
: props.isNoMatch
? $t("inp_input_no_match")
: props.isValueTaken
? $t("inp_input_error_taken")
: !props.isValue
? $t("inp_input_error_required")
: $t("inp_input_error")
? $t("inp_input_no_match")
: props.isValueTaken
? $t("inp_input_error_taken")
: !props.isValue
? $t("inp_input_error_required")
: $t("inp_input_error")
}}
</p>
</template>

View file

@ -165,7 +165,7 @@ watch(
() => props.value,
() => {
select.value = props.value;
}
},
);
const inp = reactive({
id: "",
@ -174,7 +174,7 @@ const inp = reactive({
isMatching: computed(() => {
if (!props.values) return false;
return props.values.some((str) =>
str.toLowerCase().includes(inp.value.toLowerCase())
str.toLowerCase().includes(inp.value.toLowerCase()),
);
}),
});
@ -191,10 +191,10 @@ const select = reactive({
isValid: !props.required
? true
: props.requiredValues.length <= 0
? true
: props.requiredValues.includes(props.value)
? true
: false,
? true
: props.requiredValues.includes(props.value)
? true
: false,
});
const selectBtn = ref();
@ -235,8 +235,8 @@ function toggleSelect() {
const canBeDown = props.onlyDown
? true
: fieldContainerRect.bottom + selectDropRect.height < parentRect.bottom
? true
: false;
? true
: false;
if (!canBeDown) {
selectDropdown.value.style.top = `-${
@ -275,10 +275,10 @@ function changeValue(newValue) {
select.isValid = !props.required
? true
: props.requiredValues.length <= 0
? true
: props.requiredValues.includes(newValue)
? true
: false;
? true
: props.requiredValues.includes(newValue)
? true
: false;
closeSelect();
return newValue;
}

View file

@ -174,7 +174,7 @@ let datepicker;
function setMonthSelect(calendarEl, id) {
// Hide default select and options
const defaultSelect = calendarEl.querySelector(
".flatpickr-monthDropdown-months"
".flatpickr-monthDropdown-months",
);
defaultSelect.classList.add("hidden");
defaultSelect.setAttribute("aria-hidden", "true");
@ -191,7 +191,7 @@ function setMonthSelect(calendarEl, id) {
container.classList.add(
"flatpickr-monthDropdown-months",
"inline",
"relative"
"relative",
);
// Select-like
const selectCustom = document.createElement("button");
@ -220,7 +220,7 @@ function setMonthSelect(calendarEl, id) {
"text-white",
"py-1",
"hover:brightness-125",
"focus:brightness-125"
"focus:brightness-125",
);
opt.setAttribute("data-month", option.value);
opt.setAttribute("data-value", option.value);
@ -252,7 +252,7 @@ function setMonthSelect(calendarEl, id) {
function setPickerAtt(calendarEl, id = false) {
// change error non-standard attributes
const inps = calendarEl.querySelectorAll(
'input.numInput[type="number"][maxlength]'
'input.numInput[type="number"][maxlength]',
);
inps.forEach((inp) => {
inp.setAttribute("data-maxlength", inp.getAttribute("maxlength"));
@ -313,7 +313,7 @@ function handleEvents(calendarEl, id, datepicker) {
) {
// Get update value
const selectDefault = calendarEl.querySelector(
"select.flatpickr-monthDropdown-months"
"select.flatpickr-monthDropdown-months",
);
let monthValue;
@ -377,7 +377,7 @@ function handleEvents(calendarEl, id, datepicker) {
if (e.key === "Tab" && e.shiftKey) {
e.preventDefault();
const currActive = calendarEl.querySelector(
'[data-tabindex-active="true"]'
'[data-tabindex-active="true"]',
);
if (!currActive) return;
@ -430,7 +430,7 @@ function handleEvents(calendarEl, id, datepicker) {
//Focus previous element with a tabindex
const currIndex = datepicker.input.getAttribute("tabindex");
const elements = document.querySelectorAll(
`input[tabindex="${currIndex}"]`
`input[tabindex="${currIndex}"]`,
);
// Remove disabled elements
const filtered = [];
@ -470,7 +470,7 @@ function handleEvents(calendarEl, id, datepicker) {
//Focus next element with a tabindex
const currIndex = datepicker.input.getAttribute("tabindex");
const elements = document.querySelectorAll(
`input[tabindex="${currIndex}"]`
`input[tabindex="${currIndex}"]`,
);
// Remove disabled elements
const filtered = [];
@ -515,7 +515,7 @@ function toggleSelect(calendar, id, e) {
optCtnr.classList.toggle("hidden");
optCtnr.setAttribute(
"aria-hidden",
optCtnr.classList.contains("hidden") ? "true" : "false"
optCtnr.classList.contains("hidden") ? "true" : "false",
);
}
}
@ -567,7 +567,7 @@ function updateMonth(calendar, id, e, datepicker) {
selectCustom.focus();
// Click on default select to update
const selectDefault = calendar.querySelector(
"select.flatpickr-monthDropdown-months"
"select.flatpickr-monthDropdown-months",
);
selectDefault.querySelectorAll("option").forEach((option) => {
if (option.value === e.target.getAttribute("data-month")) {
@ -623,14 +623,14 @@ function setIndex(calendarEl, tabindex) {
const prevMonth = calendarEl.querySelector(".flatpickr-prev-month");
const year = calendarEl.querySelector(".cur-year");
const monthSelect = calendarEl.querySelector(
".flatpickr-monthDropdown-months"
".flatpickr-monthDropdown-months",
);
prevMonth.setAttribute("tabindex", tabindex);
nextMonth.setAttribute("tabindex", tabindex);
year.setAttribute("tabindex", tabindex);
monthSelect.setAttribute("tabindex", tabindex);
const months = calendarEl.querySelectorAll(
".flatpickr-monthDropdown-month"
".flatpickr-monthDropdown-month",
);
months.forEach((month) => {
month.setAttribute("tabindex", tabindex);

View file

@ -177,7 +177,7 @@ class Editor {
try {
// Get all elements with the same tabindex
const elements = document.querySelectorAll(
`[tabindex="${contentIndex}"]`
`[tabindex="${contentIndex}"]`,
);
// Get index of the current element
const index = Array.from(elements).indexOf(document.activeElement);
@ -185,14 +185,14 @@ class Editor {
if (elements[index - 1]) return elements[index - 1].focus();
// Else try to find tabIndex + 1 element
const prevElements = document.querySelectorAll(
`[tabindex="${+contentIndex - 1}"]`
`[tabindex="${+contentIndex - 1}"]`,
);
// Else find the highest tabindex element in a limit of +20
let maxTabIndex = -10;
let currTabIndex = +contentIndex - 1;
while (currTabIndex > maxTabIndex) {
const minElements = document.querySelectorAll(
`[tabindex="${currTabIndex}"]`
`[tabindex="${currTabIndex}"]`,
);
if (minElements[0]) return minElements[0].focus();
currTabIndex++;
@ -211,7 +211,7 @@ class Editor {
try {
// Get all elements with the same tabindex
const elements = document.querySelectorAll(
`[tabindex="${contentIndex}"]`
`[tabindex="${contentIndex}"]`,
);
// Get index of the current element
const index = Array.from(elements).indexOf(document.activeElement);
@ -222,7 +222,7 @@ class Editor {
let currTabIndex = +contentIndex + 1;
while (currTabIndex < maxTabIndex) {
const maxElements = document.querySelectorAll(
`[tabindex="${currTabIndex}"]`
`[tabindex="${currTabIndex}"]`,
);
if (maxElements[0]) return maxElements[0].focus();
currTabIndex++;
@ -286,7 +286,7 @@ function removeErrCSS() {
setTimeout(() => {
try {
const styleEditors = document.querySelectorAll(
'[style*="font-optical-sizing"]'
'[style*="font-optical-sizing"]',
);
styleEditors.forEach((editor) => {

View file

@ -224,7 +224,7 @@ onMounted(() => {
props.placeholder
? $t(
props.placeholder,
$t('dashboard_placeholder', props.placeholder)
$t('dashboard_placeholder', props.placeholder),
)
: ''
"

View file

@ -222,8 +222,8 @@ function openSelect() {
const canBeDown = props.onlyDown
? true
: fieldContainerRect.bottom + selectDropRect.height < parentRect.bottom
? true
: false;
? true
: false;
if (!canBeDown) {
selectDropdown.value.style.top = `-${
@ -429,7 +429,7 @@ const emits = defineEmits(["inp"]);
props.placeholder
? $t(
props.placeholder,
$t('dashboard_placeholder', props.placeholder)
$t('dashboard_placeholder', props.placeholder),
)
: ''
"

View file

@ -171,10 +171,10 @@ const select = reactive({
isValid: !props.required
? true
: props.requiredValues.length <= 0
? true
: props.requiredValues.includes(props.value)
? true
: false,
? true
: props.requiredValues.includes(props.value)
? true
: false,
});
const selectBtn = ref();
@ -212,8 +212,8 @@ function toggleSelect() {
const canBeDown = props.onlyDown
? true
: fieldContainerRect.bottom + selectDropRect.height < parentRect.bottom
? true
: false;
? true
: false;
if (!canBeDown) {
selectDropdown.value.style.top = `-${
@ -252,10 +252,10 @@ function changeValue(newValue) {
select.isValid = !props.required
? true
: props.requiredValues.length <= 0
? true
: props.requiredValues.includes(newValue)
? true
: false;
? true
: props.requiredValues.includes(newValue)
? true
: false;
closeSelect();
return newValue;
}

View file

@ -5,7 +5,7 @@ import Text from "@components/Widget/Text.vue";
import Filter from "@components/Widget/Filter.vue";
import Grid from "@components/Widget/Grid.vue";
import MessageUnmatch from "@components/Message/Unmatch.vue";
/**
/**
* @name List/Details.vue
* @description This component is a list of items separate on two columns : one for the title, and other for a list of popovers related to the plugin (type, link...)
* @example
@ -110,8 +110,8 @@ function indexPending(id) {
data.upIndex === id
? 'up'
: data.pendingIndex.includes(id)
? 'pending'
: '',
? 'pending'
: '',
]"
v-bind="item.attrs || {}"
@focusin="indexUp(id)"

View file

@ -141,7 +141,7 @@ onMounted(() => {
btnEl.value.setAttribute("aria-controls", btn.modalId);
btnEl.value.setAttribute(
"aria-expanded",
props.openModal ? "true" : "false"
props.openModal ? "true" : "false",
);
}
});
@ -153,7 +153,7 @@ watch(
if (typeof props.modal === "object") {
btnEl.value.setAttribute("aria-expanded", value ? "true" : "false");
}
}
},
);
</script>

View file

@ -79,7 +79,7 @@ watch(
() => {
filterData();
},
{ deep: true }
{ deep: true },
);
/**

View file

@ -98,8 +98,8 @@ onMounted(() => {
props.uppercase
? 'uppercase'
: props.lowercase
? 'lowercase'
: 'capitalize-first',
? 'lowercase'
: 'capitalize-first',
props.subtitleClass,
]"
>

View file

@ -172,7 +172,7 @@ watch(
() => {
getOverflow();
setUnmatchWidth();
}
},
);
onMounted(() => {

View file

@ -104,8 +104,8 @@ onMounted(() => {
props.uppercase
? 'uppercase'
: props.lowercase
? 'lowercase'
: 'capitalize-first',
? 'lowercase'
: 'capitalize-first',
]"
>
{{ $t(props.title, $t("dashboard_placeholder", props.title)) }}

View file

@ -1,5 +1,5 @@
{
"dashboard_placeholder" : "{placeholder}",
"dashboard_placeholder": "{placeholder}",
"dashboard_logo_alt": "BunkerWeb logo image",
"dashboard_logo_link_label": "Redirect to home page",
"dashboard_bw": "BunkerWeb",

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -9,7 +9,11 @@
<title>BunkerWeb | BUILDER</title>
</head>
<body>
<div data-default-value="Title default !" data-flask="{{ flask_data }}" class="hidden"></div>
<div
data-default-value="Title default !"
data-flask="{{ flask_data }}"
class="hidden"
></div>
<div id="app"></div>
<script type="module" src="builder.js"></script>
</body>

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -4,7 +4,7 @@ import DashboardLayout from "@components/Dashboard/Layout.vue";
import BuilderHome from "@components/Builder/Home.vue";
import { useGlobal } from "@utils/global";
/**
/**
* @name Page/Home.vue
* @description This component is the home page.
This page displays an overview of multiple stats related to BunkerWeb.

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -83,7 +83,7 @@ function downloadCacheEvent() {
a.click();
document.body.removeChild(a);
},
true
true,
);
}

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -36,7 +36,7 @@ function redirectPlugin() {
window.location.href = `./${pluginId}`;
},
true
true,
);
}
@ -81,7 +81,7 @@ function deletePlugin() {
modalPluginName.textContent = deleteData.name;
modal.classList.remove("hidden");
},
true
true,
);
}

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

View file

@ -9,7 +9,11 @@
<title>BunkerWeb | TEST</title>
</head>
<body>
<div data-default-value="Title default !" data-flask="{{ flask_data }}" class="hidden"></div>
<div
data-default-value="Title default !"
data-flask="{{ flask_data }}"
class="hidden"
></div>
<div id="app"></div>
<script type="module" src="test.js"></script>
</body>

View file

@ -103,12 +103,12 @@ export const createFormStore = (storeName, formType) => {
// Get the index of plugin using pluginId
const index = templateBase.value.findIndex(
(plugin) => plugin.id === pluginId
(plugin) => plugin.id === pluginId,
);
// For back end, we need to keep the group but updating values to default in order to delete it
for (const [settName, setting] of Object.entries(
templateBase.value[index].multiples[multName][groupName]
templateBase.value[index].multiples[multName][groupName],
)) {
setting.value = setting.default;
}
@ -132,18 +132,18 @@ export const createFormStore = (storeName, formType) => {
// Get the index of plugin using pluginId
const index = templateBase.value.findIndex(
(plugin) => plugin.id === pluginId
(plugin) => plugin.id === pluginId,
);
// Get the right multiple schema
const multipleSchema = JSON.parse(
JSON.stringify(templateBase.value[index]?.multiples_schema[multName])
JSON.stringify(templateBase.value[index]?.multiples_schema[multName]),
);
const newMultiple = {};
// Get the highest id in Object.keys(plugin?.multiples[multName])
const nextGroupId =
Math.max(
...Object.keys(templateBase.value[index]?.multiples[multName])
...Object.keys(templateBase.value[index]?.multiples[multName]),
) + 1;
// Set the default values as value
@ -199,7 +199,7 @@ export const createFormStore = (storeName, formType) => {
* @name _useUpdateTemp
* @description This function will check if the target is a setting input-like field.
* In case it is, it will get the id and value for each field case, this will allow to update the template settings.
* @example
* @example
template = [
{
name: "test",

View file

@ -99,7 +99,7 @@ function getLocalLang() {
navigator.languages &&
navigator.languages > 0 &&
availablesLangs.indexOf(
navigator.languages[0].split("-")[0].toLowerCase()
navigator.languages[0].split("-")[0].toLowerCase(),
) !== -1
) {
return navigator.languages[0].split("-")[0].toLowerCase();

View file

@ -2,7 +2,7 @@
import { reactive, onBeforeMount, onMounted } from "vue";
import BuilderSetup from "@components/Builder/Setup.vue";
/**
/**
* @name Page/Setup.vue
* @description This component is the setup page.
This page displays all steps to setup BunkerWeb.

View file

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1,107 +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://panel.bunkerweb.io/?utm_campaign=self&utm_source=ui#pro",
"containerColumns": {
"pc": 4,
"tablet": 6,
"mobile": 12
},
{
"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"
}
}
]
"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
},
{
"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"
}
}
]
"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
},
{
"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"
}
}
]
"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
},
{
"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"
}
}
]
}
]
"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"
}
}
]
}
]

View file

@ -1 +1 @@
W3sidHlwZSI6ICJjYXJkIiwgImxpbmsiOiAiaHR0cHM6Ly9wYW5lbC5idW5rZXJ3ZWIuaW8vP3V0bV9jYW1wYWlnbj1zZWxmJnV0bV9zb3VyY2U9dWkjcHJvIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJTdGF0IiwgImRhdGEiOiB7InRpdGxlIjogImhvbWVfdmVyc2lvbiIsICJzdWJ0aXRsZSI6ICJob21lX3VwZ3JhZGVfdG9fcHJvIiwgInN1YnRpdGxlQ29sb3IiOiAid2FybmluZyIsICJzdGF0IjogImhvbWVfZnJlZSIsICJpY29uTmFtZSI6ICJrZXkifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICJodHRwczovL2dpdGh1Yi5jb20vYnVua2VyaXR5L2J1bmtlcndlYiIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX3ZlcnNpb25fbnVtYmVyIiwgInN1YnRpdGxlIjogImhvbWVfdXBkYXRlX2F2YWlsYWJsZSIsICJzdWJ0aXRsZUNvbG9yIjogIndhcm5pbmciLCAic3RhdCI6ICIxLjUuOCIsICJpY29uTmFtZSI6ICJ3aXJlIn19XX0sIHsidHlwZSI6ICJjYXJkIiwgImxpbmsiOiAiL2luc3RhbmNlcyIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX2luc3RhbmNlcyIsICJzdWJ0aXRsZSI6ICJob21lX3RvdGFsX251bWJlciIsICJzdWJ0aXRsZUNvbG9yIjogImluZm8iLCAic3RhdCI6IDEsICJpY29uTmFtZSI6ICJib3gifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICIvc2VydmljZXMiLCAiY29udGFpbmVyQ29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlN0YXQiLCAiZGF0YSI6IHsidGl0bGUiOiAiaG9tZV9zZXJ2aWNlcyIsICJzdWJ0aXRsZSI6ICJob21lX2FsbF9tZXRob2RzX2luY2x1ZGVkIiwgInN1YnRpdGxlQ29sb3IiOiAiaW5mbyIsICJzdGF0IjogMiwgImljb25OYW1lIjogImRpc2sifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICIvcGx1Z2lucyIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX3BsdWdpbnMiLCAic3VidGl0bGUiOiAiaG9tZV9ub19lcnJvciIsICJzdWJ0aXRsZUNvbG9yIjogInN1Y2Nlc3MiLCAic3RhdCI6ICI0MiIsICJpY29uTmFtZSI6ICJwdXp6bGUifX1dfV0=
W3sidHlwZSI6ICJjYXJkIiwgImxpbmsiOiAiaHR0cHM6Ly9wYW5lbC5idW5rZXJ3ZWIuaW8vP3V0bV9jYW1wYWlnbj1zZWxmJnV0bV9zb3VyY2U9dWkjcHJvIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNCwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJTdGF0IiwgImRhdGEiOiB7InRpdGxlIjogImhvbWVfdmVyc2lvbiIsICJzdWJ0aXRsZSI6ICJob21lX3VwZ3JhZGVfdG9fcHJvIiwgInN1YnRpdGxlQ29sb3IiOiAid2FybmluZyIsICJzdGF0IjogImhvbWVfZnJlZSIsICJpY29uTmFtZSI6ICJrZXkifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICJodHRwczovL2dpdGh1Yi5jb20vYnVua2VyaXR5L2J1bmtlcndlYiIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX3ZlcnNpb25fbnVtYmVyIiwgInN1YnRpdGxlIjogImhvbWVfdXBkYXRlX2F2YWlsYWJsZSIsICJzdWJ0aXRsZUNvbG9yIjogIndhcm5pbmciLCAic3RhdCI6ICIxLjUuOCIsICJpY29uTmFtZSI6ICJ3aXJlIn19XX0sIHsidHlwZSI6ICJjYXJkIiwgImxpbmsiOiAiL2luc3RhbmNlcyIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX2luc3RhbmNlcyIsICJzdWJ0aXRsZSI6ICJob21lX3RvdGFsX251bWJlciIsICJzdWJ0aXRsZUNvbG9yIjogImluZm8iLCAic3RhdCI6IDEsICJpY29uTmFtZSI6ICJib3gifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICIvc2VydmljZXMiLCAiY29udGFpbmVyQ29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlN0YXQiLCAiZGF0YSI6IHsidGl0bGUiOiAiaG9tZV9zZXJ2aWNlcyIsICJzdWJ0aXRsZSI6ICJob21lX2FsbF9tZXRob2RzX2luY2x1ZGVkIiwgInN1YnRpdGxlQ29sb3IiOiAiaW5mbyIsICJzdGF0IjogMiwgImljb25OYW1lIjogImRpc2sifX1dfSwgeyJ0eXBlIjogImNhcmQiLCAibGluayI6ICIvcGx1Z2lucyIsICJjb250YWluZXJDb2x1bW5zIjogeyJwYyI6IDQsICJ0YWJsZXQiOiA2LCAibW9iaWxlIjogMTJ9LCAid2lkZ2V0cyI6IFt7InR5cGUiOiAiU3RhdCIsICJkYXRhIjogeyJ0aXRsZSI6ICJob21lX3BsdWdpbnMiLCAic3VidGl0bGUiOiAiaG9tZV9ub19lcnJvciIsICJzdWJ0aXRsZUNvbG9yIjogInN1Y2Nlc3MiLCAic3RhdCI6ICI0MiIsICJpY29uTmFtZSI6ICJwdXp6bGUifX1dfV0=

View file

@ -1 +1 @@
"W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfaG9zdG5hbWUiLCAidmFsdWUiOiAiYnVua2Vyd2ViIn0sIHsia2V5IjogImluc3RhbmNlc190eXBlIiwgInZhbHVlIjogIm1hbnVhbCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfc3RhdHVzIiwgInZhbHVlIjogImluc3RhbmNlc19hY3RpdmUifV0sICJzdGF0dXMiOiAic3VjY2VzcyIsICJ0aXRsZSI6ICJidW5rZXJ3ZWIiLCAiYnV0dG9ucyI6IFt7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJyZWxvYWRcIiB9In0sICJ0ZXh0IjogImFjdGlvbl9yZWxvYWQiLCAiY29sb3IiOiAid2FybmluZyJ9LCB7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJzdG9wXCIgfSJ9LCAidGV4dCI6ICJhY3Rpb25fc3RvcCIsICJjb2xvciI6ICJlcnJvciJ9XX19XX0sIHsidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfaG9zdG5hbWUiLCAidmFsdWUiOiAiYnVua2Vyd2ViIn0sIHsia2V5IjogImluc3RhbmNlc190eXBlIiwgInZhbHVlIjogIm1hbnVhbCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfc3RhdHVzIiwgInZhbHVlIjogImluc3RhbmNlc19hY3RpdmUifV0sICJzdGF0dXMiOiAic3VjY2VzcyIsICJ0aXRsZSI6ICJidW5rZXJ3ZWIiLCAiYnV0dG9ucyI6IFt7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJyZWxvYWRcIiB9In0sICJ0ZXh0IjogImFjdGlvbl9yZWxvYWQiLCAiY29sb3IiOiAid2FybmluZyJ9LCB7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJzdG9wXCIgfSJ9LCAidGV4dCI6ICJhY3Rpb25fc3RvcCIsICJjb2xvciI6ICJlcnJvciJ9XX19XX1d"
"W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfaG9zdG5hbWUiLCAidmFsdWUiOiAiYnVua2Vyd2ViIn0sIHsia2V5IjogImluc3RhbmNlc190eXBlIiwgInZhbHVlIjogIm1hbnVhbCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfc3RhdHVzIiwgInZhbHVlIjogImluc3RhbmNlc19hY3RpdmUifV0sICJzdGF0dXMiOiAic3VjY2VzcyIsICJ0aXRsZSI6ICJidW5rZXJ3ZWIiLCAiYnV0dG9ucyI6IFt7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJyZWxvYWRcIiB9In0sICJ0ZXh0IjogImFjdGlvbl9yZWxvYWQiLCAiY29sb3IiOiAid2FybmluZyJ9LCB7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJzdG9wXCIgfSJ9LCAidGV4dCI6ICJhY3Rpb25fc3RvcCIsICJjb2xvciI6ICJlcnJvciJ9XX19XX0sIHsidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfaG9zdG5hbWUiLCAidmFsdWUiOiAiYnVua2Vyd2ViIn0sIHsia2V5IjogImluc3RhbmNlc190eXBlIiwgInZhbHVlIjogIm1hbnVhbCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfc3RhdHVzIiwgInZhbHVlIjogImluc3RhbmNlc19hY3RpdmUifV0sICJzdGF0dXMiOiAic3VjY2VzcyIsICJ0aXRsZSI6ICJidW5rZXJ3ZWIiLCAiYnV0dG9ucyI6IFt7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJyZWxvYWRcIiB9In0sICJ0ZXh0IjogImFjdGlvbl9yZWxvYWQiLCAiY29sb3IiOiAid2FybmluZyJ9LCB7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJzdG9wXCIgfSJ9LCAidGV4dCI6ICJhY3Rpb25fc3RvcCIsICJjb2xvciI6ICJlcnJvciJ9XX19XX1d"

View file

@ -1 +1 @@
Ilczc2lkSGx3WlNJNklDSmpZWEprSWl3Z0ltTnZiblJoYVc1bGNrTnZiSFZ0Ym5NaU9pQjdJbkJqSWpvZ05pd2dJblJoWW14bGRDSTZJRFlzSUNKdGIySnBiR1VpT2lBeE1uMHNJQ0ozYVdSblpYUnpJam9nVzNzaWRIbHdaU0k2SUNKSmJuTjBZVzVqWlNJc0lDSmtZWFJoSWpvZ2V5SndZV2x5Y3lJNklGdDdJbXRsZVNJNklDSnBibk4wWVc1alpYTmZhRzl6ZEc1aGJXVWlMQ0FpZG1Gc2RXVWlPaUFpWW5WdWEyVnlkMlZpSW4wc0lIc2lhMlY1SWpvZ0ltbHVjM1JoYm1ObGMxOTBlWEJsSWl3Z0luWmhiSFZsSWpvZ0ltMWhiblZoYkNKOUxDQjdJbXRsZVNJNklDSnBibk4wWVc1alpYTmZjM1JoZEhWeklpd2dJblpoYkhWbElqb2dJbWx1YzNSaGJtTmxjMTloWTNScGRtVWlmVjBzSUNKemRHRjBkWE1pT2lBaWMzVmpZMlZ6Y3lJc0lDSjBhWFJzWlNJNklDSmlkVzVyWlhKM1pXSWlMQ0FpWW5WMGRHOXVjeUk2SUZ0N0ltRjBkSEp6SWpvZ2V5SmtZWFJoTFhOMVltMXBkQzFtYjNKdElqb2dJbnRjSWtsT1UxUkJUa05GWDBsRVhDSWdPaUJjSW1KMWJtdGxjbmRsWWx3aUxDQmNJbTl3WlhKaGRHbHZibHdpSURvZ1hDSnlaV3h2WVdSY0lpQjlJbjBzSUNKMFpYaDBJam9nSW1GamRHbHZibDl5Wld4dllXUWlMQ0FpWTI5c2IzSWlPaUFpZDJGeWJtbHVaeUo5TENCN0ltRjBkSEp6SWpvZ2V5SmtZWFJoTFhOMVltMXBkQzFtYjNKdElqb2dJbnRjSWtsT1UxUkJUa05GWDBsRVhDSWdPaUJjSW1KMWJtdGxjbmRsWWx3aUxDQmNJbTl3WlhKaGRHbHZibHdpSURvZ1hDSnpkRzl3WENJZ2ZTSjlMQ0FpZEdWNGRDSTZJQ0poWTNScGIyNWZjM1J2Y0NJc0lDSmpiMnh2Y2lJNklDSmxjbkp2Y2lKOVhYMTlYWDBzSUhzaWRIbHdaU0k2SUNKallYSmtJaXdnSW1OdmJuUmhhVzVsY2tOdmJIVnRibk1pT2lCN0luQmpJam9nTml3Z0luUmhZbXhsZENJNklEWXNJQ0p0YjJKcGJHVWlPaUF4TW4wc0lDSjNhV1JuWlhSeklqb2dXM3NpZEhsd1pTSTZJQ0pKYm5OMFlXNWpaU0lzSUNKa1lYUmhJam9nZXlKd1lXbHljeUk2SUZ0N0ltdGxlU0k2SUNKcGJuTjBZVzVqWlhOZmFHOXpkRzVoYldVaUxDQWlkbUZzZFdVaU9pQWlZblZ1YTJWeWQyVmlJbjBzSUhzaWEyVjVJam9nSW1sdWMzUmhibU5sYzE5MGVYQmxJaXdnSW5aaGJIVmxJam9nSW0xaGJuVmhiQ0o5TENCN0ltdGxlU0k2SUNKcGJuTjBZVzVqWlhOZmMzUmhkSFZ6SWl3Z0luWmhiSFZsSWpvZ0ltbHVjM1JoYm1ObGMxOWhZM1JwZG1VaWZWMHNJQ0p6ZEdGMGRYTWlPaUFpYzNWalkyVnpjeUlzSUNKMGFYUnNaU0k2SUNKaWRXNXJaWEozWldJaUxDQWlZblYwZEc5dWN5STZJRnQ3SW1GMGRISnpJam9nZXlKa1lYUmhMWE4xWW0xcGRDMW1iM0p0SWpvZ0ludGNJa2xPVTFSQlRrTkZYMGxFWENJZ09pQmNJbUoxYm10bGNuZGxZbHdpTENCY0ltOXdaWEpoZEdsdmJsd2lJRG9nWENKeVpXeHZZV1JjSWlCOUluMHNJQ0owWlhoMElqb2dJbUZqZEdsdmJsOXlaV3h2WVdRaUxDQWlZMjlzYjNJaU9pQWlkMkZ5Ym1sdVp5SjlMQ0I3SW1GMGRISnpJam9nZXlKa1lYUmhMWE4xWW0xcGRDMW1iM0p0SWpvZ0ludGNJa2xPVTFSQlRrTkZYMGxFWENJZ09pQmNJbUoxYm10bGNuZGxZbHdpTENCY0ltOXdaWEpoZEdsdmJsd2lJRG9nWENKemRHOXdYQ0lnZlNKOUxDQWlkR1Y0ZENJNklDSmhZM1JwYjI1ZmMzUnZjQ0lzSUNKamIyeHZjaUk2SUNKbGNuSnZjaUo5WFgxOVhYMWQi
Ilczc2lkSGx3WlNJNklDSmpZWEprSWl3Z0ltTnZiblJoYVc1bGNrTnZiSFZ0Ym5NaU9pQjdJbkJqSWpvZ05pd2dJblJoWW14bGRDSTZJRFlzSUNKdGIySnBiR1VpT2lBeE1uMHNJQ0ozYVdSblpYUnpJam9nVzNzaWRIbHdaU0k2SUNKSmJuTjBZVzVqWlNJc0lDSmtZWFJoSWpvZ2V5SndZV2x5Y3lJNklGdDdJbXRsZVNJNklDSnBibk4wWVc1alpYTmZhRzl6ZEc1aGJXVWlMQ0FpZG1Gc2RXVWlPaUFpWW5WdWEyVnlkMlZpSW4wc0lIc2lhMlY1SWpvZ0ltbHVjM1JoYm1ObGMxOTBlWEJsSWl3Z0luWmhiSFZsSWpvZ0ltMWhiblZoYkNKOUxDQjdJbXRsZVNJNklDSnBibk4wWVc1alpYTmZjM1JoZEhWeklpd2dJblpoYkhWbElqb2dJbWx1YzNSaGJtTmxjMTloWTNScGRtVWlmVjBzSUNKemRHRjBkWE1pT2lBaWMzVmpZMlZ6Y3lJc0lDSjBhWFJzWlNJNklDSmlkVzVyWlhKM1pXSWlMQ0FpWW5WMGRHOXVjeUk2SUZ0N0ltRjBkSEp6SWpvZ2V5SmtZWFJoTFhOMVltMXBkQzFtYjNKdElqb2dJbnRjSWtsT1UxUkJUa05GWDBsRVhDSWdPaUJjSW1KMWJtdGxjbmRsWWx3aUxDQmNJbTl3WlhKaGRHbHZibHdpSURvZ1hDSnlaV3h2WVdSY0lpQjlJbjBzSUNKMFpYaDBJam9nSW1GamRHbHZibDl5Wld4dllXUWlMQ0FpWTI5c2IzSWlPaUFpZDJGeWJtbHVaeUo5TENCN0ltRjBkSEp6SWpvZ2V5SmtZWFJoTFhOMVltMXBkQzFtYjNKdElqb2dJbnRjSWtsT1UxUkJUa05GWDBsRVhDSWdPaUJjSW1KMWJtdGxjbmRsWWx3aUxDQmNJbTl3WlhKaGRHbHZibHdpSURvZ1hDSnpkRzl3WENJZ2ZTSjlMQ0FpZEdWNGRDSTZJQ0poWTNScGIyNWZjM1J2Y0NJc0lDSmpiMnh2Y2lJNklDSmxjbkp2Y2lKOVhYMTlYWDBzSUhzaWRIbHdaU0k2SUNKallYSmtJaXdnSW1OdmJuUmhhVzVsY2tOdmJIVnRibk1pT2lCN0luQmpJam9nTml3Z0luUmhZbXhsZENJNklEWXNJQ0p0YjJKcGJHVWlPaUF4TW4wc0lDSjNhV1JuWlhSeklqb2dXM3NpZEhsd1pTSTZJQ0pKYm5OMFlXNWpaU0lzSUNKa1lYUmhJam9nZXlKd1lXbHljeUk2SUZ0N0ltdGxlU0k2SUNKcGJuTjBZVzVqWlhOZmFHOXpkRzVoYldVaUxDQWlkbUZzZFdVaU9pQWlZblZ1YTJWeWQyVmlJbjBzSUhzaWEyVjVJam9nSW1sdWMzUmhibU5sYzE5MGVYQmxJaXdnSW5aaGJIVmxJam9nSW0xaGJuVmhiQ0o5TENCN0ltdGxlU0k2SUNKcGJuTjBZVzVqWlhOZmMzUmhkSFZ6SWl3Z0luWmhiSFZsSWpvZ0ltbHVjM1JoYm1ObGMxOWhZM1JwZG1VaWZWMHNJQ0p6ZEdGMGRYTWlPaUFpYzNWalkyVnpjeUlzSUNKMGFYUnNaU0k2SUNKaWRXNXJaWEozWldJaUxDQWlZblYwZEc5dWN5STZJRnQ3SW1GMGRISnpJam9nZXlKa1lYUmhMWE4xWW0xcGRDMW1iM0p0SWpvZ0ludGNJa2xPVTFSQlRrTkZYMGxFWENJZ09pQmNJbUoxYm10bGNuZGxZbHdpTENCY0ltOXdaWEpoZEdsdmJsd2lJRG9nWENKeVpXeHZZV1JjSWlCOUluMHNJQ0owWlhoMElqb2dJbUZqZEdsdmJsOXlaV3h2WVdRaUxDQWlZMjlzYjNJaU9pQWlkMkZ5Ym1sdVp5SjlMQ0I3SW1GMGRISnpJam9nZXlKa1lYUmhMWE4xWW0xcGRDMW1iM0p0SWpvZ0ludGNJa2xPVTFSQlRrTkZYMGxFWENJZ09pQmNJbUoxYm10bGNuZGxZbHdpTENCY0ltOXdaWEpoZEdsdmJsd2lJRG9nWENKemRHOXdYQ0lnZlNKOUxDQWlkR1Y0ZENJNklDSmhZM1JwYjI1ZmMzUnZjQ0lzSUNKamIyeHZjaUk2SUNKbGNuSnZjaUo5WFgxOVhYMWQi

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1,68 +1,65 @@
[
{
"type": "card",
"containerColumns": {
"pc": 12,
"tablet": 12,
"mobile": 12
},
"widgets": [
{
"type": "Title",
"data": {
"title": "logs_title"
}
{
"type": "card",
"containerColumns": {
"pc": 12,
"tablet": 12,
"mobile": 12
},
"widgets": [
{
"type": "Title",
"data": {
"title": "logs_title"
}
},
{
"type": "Fields",
"data": {
"setting": {
"id": "logs-select-file",
"label": "logs_select_file",
"inpType": "select",
"name": "logs-select-file",
"onlyDown": true,
"value": "",
"values": ["file1", "file2"],
"columns": {
"pc": 4,
"tablet": 6,
"mobile": 12
},
{
"type": "Fields",
"data": {
"setting": {
"id": "logs-select-file",
"label": "logs_select_file",
"inpType": "select",
"name": "logs-select-file",
"onlyDown": true,
"value": "",
"values": [
"file1",
"file2"
],
"columns": {
"pc": 4,
"tablet": 6,
"mobile": 12
},
"maxBtnChars": 20,
"attrs": {
"data-log": "true"
},
"popovers": [
{
"iconName": "info",
"text": "logs_select_file_info"
}
]
}
}
"maxBtnChars": 20,
"attrs": {
"data-log": "true"
},
{
"type": "Fields",
"data": {
"setting": {
"containerClass": "mt-4",
"id": "logs-file-content",
"label": "logs_file_content",
"inpType": "editor",
"name": "logs-file-content",
"value": "gefesfesfsefes",
"columns": {
"pc": 12,
"tablet": 12,
"mobile": 12
}
}
}
"popovers": [
{
"iconName": "info",
"text": "logs_select_file_info"
}
]
}
}
},
{
"type": "Fields",
"data": {
"setting": {
"containerClass": "mt-4",
"id": "logs-file-content",
"label": "logs_file_content",
"inpType": "editor",
"name": "logs-file-content",
"value": "gefesfesfsefes",
"columns": {
"pc": 12,
"tablet": 12,
"mobile": 12
}
]
}
]
}
}
}
]
}
]

View file

@ -1 +1 @@
W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogMTIsICJ0YWJsZXQiOiAxMiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlRpdGxlIiwgImRhdGEiOiB7InRpdGxlIjogImxvZ3NfdGl0bGUifX0sIHsidHlwZSI6ICJGaWVsZHMiLCAiZGF0YSI6IHsic2V0dGluZyI6IHsiaWQiOiAibG9ncy1zZWxlY3QtZmlsZSIsICJsYWJlbCI6ICJsb2dzX3NlbGVjdF9maWxlIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAibG9ncy1zZWxlY3QtZmlsZSIsICJvbmx5RG93biI6IHRydWUsICJ2YWx1ZSI6ICIiLCAidmFsdWVzIjogWyJmaWxlMSIsICJmaWxlMiJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgIm1heEJ0bkNoYXJzIjogMjAsICJhdHRycyI6IHsiZGF0YS1sb2ciOiAidHJ1ZSJ9LCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAibG9nc19zZWxlY3RfZmlsZV9pbmZvIn1dfX19LCB7InR5cGUiOiAiRmllbGRzIiwgImRhdGEiOiB7InNldHRpbmciOiB7ImNvbnRhaW5lckNsYXNzIjogIm10LTQiLCAiaWQiOiAibG9ncy1maWxlLWNvbnRlbnQiLCAibGFiZWwiOiAibG9nc19maWxlX2NvbnRlbnQiLCAiaW5wVHlwZSI6ICJlZGl0b3IiLCAibmFtZSI6ICJsb2dzLWZpbGUtY29udGVudCIsICJ2YWx1ZSI6ICJnZWZlc2Zlc2ZzZWZlcyIsICJjb2x1bW5zIjogeyJwYyI6IDEyLCAidGFibGV0IjogMTIsICJtb2JpbGUiOiAxMn19fX1dfV0=
W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogMTIsICJ0YWJsZXQiOiAxMiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlRpdGxlIiwgImRhdGEiOiB7InRpdGxlIjogImxvZ3NfdGl0bGUifX0sIHsidHlwZSI6ICJGaWVsZHMiLCAiZGF0YSI6IHsic2V0dGluZyI6IHsiaWQiOiAibG9ncy1zZWxlY3QtZmlsZSIsICJsYWJlbCI6ICJsb2dzX3NlbGVjdF9maWxlIiwgImlucFR5cGUiOiAic2VsZWN0IiwgIm5hbWUiOiAibG9ncy1zZWxlY3QtZmlsZSIsICJvbmx5RG93biI6IHRydWUsICJ2YWx1ZSI6ICIiLCAidmFsdWVzIjogWyJmaWxlMSIsICJmaWxlMiJdLCAiY29sdW1ucyI6IHsicGMiOiA0LCAidGFibGV0IjogNiwgIm1vYmlsZSI6IDEyfSwgIm1heEJ0bkNoYXJzIjogMjAsICJhdHRycyI6IHsiZGF0YS1sb2ciOiAidHJ1ZSJ9LCAicG9wb3ZlcnMiOiBbeyJpY29uTmFtZSI6ICJpbmZvIiwgInRleHQiOiAibG9nc19zZWxlY3RfZmlsZV9pbmZvIn1dfX19LCB7InR5cGUiOiAiRmllbGRzIiwgImRhdGEiOiB7InNldHRpbmciOiB7ImNvbnRhaW5lckNsYXNzIjogIm10LTQiLCAiaWQiOiAibG9ncy1maWxlLWNvbnRlbnQiLCAibGFiZWwiOiAibG9nc19maWxlX2NvbnRlbnQiLCAiaW5wVHlwZSI6ICJlZGl0b3IiLCAibmFtZSI6ICJsb2dzLWZpbGUtY29udGVudCIsICJ2YWx1ZSI6ICJnZWZlc2Zlc2ZzZWZlcyIsICJjb2x1bW5zIjogeyJwYyI6IDEyLCAidGFibGV0IjogMTIsICJtb2JpbGUiOiAxMn19fX1dfV0=

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,400 +1,400 @@
[
{
"type": "card",
"containerColumns": {
"pc": 12,
"tablet": 12,
"mobile": 12
},
"widgets": [
{
"type": "Title",
"data": {
"title": "app1.example.com",
"type": "container",
"lowercase": true
}
},
{
"type": "Subtitle",
"data": {
"subtitle": "services_manage_subtitle",
"type": "container"
}
},
{
"type": "Templates",
"data": {
"templates": {
"raw": {
"default": {
"SERVER_NAME": "app1.example.com",
"SERVER_TYPE": "http",
"LISTEN_STREAM": "yes",
"LISTEN_STREAM_PORT": "1337",
"LISTEN_STREAM_PORT_SSL": "4242",
"USE_UDP": "no",
"IS_DRAFT": "no",
"USE_ANTIBOT": "no",
"ANTIBOT_URI": "/challenge",
"ANTIBOT_TIME_RESOLVE": "60",
"ANTIBOT_TIME_VALID": "86400",
"ANTIBOT_RECAPTCHA_SCORE": "0.7",
"ANTIBOT_RECAPTCHA_SITEKEY": "",
"ANTIBOT_RECAPTCHA_SECRET": "",
"ANTIBOT_HCAPTCHA_SITEKEY": "",
"ANTIBOT_HCAPTCHA_SECRET": "",
"ANTIBOT_TURNSTILE_SITEKEY": "",
"ANTIBOT_TURNSTILE_SECRET": "",
"USE_AUTH_BASIC": "no",
"AUTH_BASIC_LOCATION": "sitewide",
"AUTH_BASIC_USER": "changeme",
"AUTH_BASIC_PASSWORD": "changeme",
"AUTH_BASIC_TEXT": "Restricted area",
"USE_BAD_BEHAVIOR": "yes",
"BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444",
"BAD_BEHAVIOR_THRESHOLD": "10",
"BAD_BEHAVIOR_COUNT_TIME": "60",
"BAD_BEHAVIOR_BAN_TIME": "86400",
"USE_BLACKLIST": "no",
"BLACKLIST_IP": "",
"BLACKLIST_RDNS": ".shodan.io .censys.io",
"BLACKLIST_RDNS_GLOBAL": "yes",
"BLACKLIST_ASN": "",
"BLACKLIST_USER_AGENT": "",
"BLACKLIST_URI": "",
"BLACKLIST_IGNORE_IP": "",
"BLACKLIST_IGNORE_RDNS": "",
"BLACKLIST_IGNORE_ASN": "",
"BLACKLIST_IGNORE_USER_AGENT": "",
"BLACKLIST_IGNORE_URI": "",
"USE_BROTLI": "no",
"BROTLI_TYPES": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml",
"BROTLI_MIN_LENGTH": "1000",
"BROTLI_COMP_LEVEL": "6",
"USE_BUNKERNET": "no",
"USE_CORS": "no",
"CORS_ALLOW_ORIGIN": "self",
"CORS_ALLOW_METHODS": "GET, POST, OPTIONS",
"CORS_ALLOW_HEADERS": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range",
"CORS_ALLOW_CREDENTIALS": "no",
"CORS_EXPOSE_HEADERS": "Content-Length,Content-Range",
"CROSS_ORIGIN_OPENER_POLICY": "same-origin",
"CROSS_ORIGIN_EMBEDDER_POLICY": "require-corp",
"CROSS_ORIGIN_RESOURCE_POLICY": "same-site",
"CORS_MAX_AGE": "86400",
"CORS_DENY_REQUEST": "yes",
"USE_CLIENT_CACHE": "yes",
"CLIENT_CACHE_ETAG": "yes",
"CLIENT_CACHE_CONTROL": "public, max-age=15552000",
"BLACKLIST_COUNTRY": "",
"WHITELIST_COUNTRY": "",
"USE_CUSTOM_SSL": "no",
"CUSTOM_SSL_CERT": "",
"CUSTOM_SSL_KEY": "",
"CUSTOM_SSL_CERT_DATA": "",
"CUSTOM_SSL_KEY_DATA": "",
"USE_DNSBL": "yes",
"ERRORS": "",
"INTERCEPTED_ERROR_CODES": "400 401 403 404 405 413 429 500 501 502 503 504",
"USE_GREYLIST": "no",
"GREYLIST_IP": "",
"GREYLIST_RDNS": "",
"GREYLIST_RDNS_GLOBAL": "yes",
"GREYLIST_ASN": "",
"GREYLIST_USER_AGENT": "",
"GREYLIST_URI": "",
"USE_GZIP": "yes",
"GZIP_TYPES": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml",
"GZIP_MIN_LENGTH": "1000",
"GZIP_COMP_LEVEL": "5",
"GZIP_PROXIED": "no-cache no-store private expired auth",
"INJECT_BODY": "",
"CUSTOM_HEADER": "",
"CUSTOM_HEADER_2": "dzdz",
"REMOVE_HEADERS": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins",
"KEEP_UPSTREAM_HEADERS": "Content-Security-Policy Permissions-Policy X-Frame-Options",
"STRICT_TRANSPORT_SECURITY": "max-age=31536000; includeSubDomains; preload",
"COOKIE_FLAGS": "* HttpOnly SameSite=Lax",
"COOKIE_AUTO_SECURE_FLAG": "yes",
"CONTENT_SECURITY_POLICY": "object-src 'none'; form-action 'self'; frame-ancestors 'self';",
"CONTENT_SECURITY_POLICY_REPORT_ONLY": "no",
"REFERRER_POLICY": "strict-origin-when-cross-origin",
"PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()",
"X_FRAME_OPTIONS": "SAMEORIGIN",
"X_CONTENT_TYPE_OPTIONS": "nosniff",
"X_XSS_PROTECTION": "1; mode=block",
"AUTO_LETS_ENCRYPT": "no",
"EMAIL_LETS_ENCRYPT": "",
"USE_LETS_ENCRYPT_STAGING": "no",
"USE_LIMIT_REQ": "yes",
"LIMIT_REQ_URL": "/",
"LIMIT_REQ_RATE": "2r/s",
"USE_LIMIT_CONN": "yes",
"LIMIT_CONN_MAX_HTTP1": "10",
"LIMIT_CONN_MAX_HTTP2": "100",
"LIMIT_CONN_MAX_STREAM": "10",
"USE_METRICS": "yes",
"REDIRECT_HTTP_TO_HTTPS": "no",
"AUTO_REDIRECT_HTTP_TO_HTTPS": "yes",
"ALLOWED_METHODS": "GET|POST|HEAD",
"MAX_CLIENT_SIZE": "10m",
"SERVE_FILES": "no",
"ROOT_FOLDER": "",
"SSL_PROTOCOLS": "TLSv1.2 TLSv1.3",
"HTTP2": "yes",
"HTTP3": "no",
"HTTP3_ALT_SVC_PORT": "443",
"LISTEN_HTTP": "yes",
"USE_OPEN_FILE_CACHE": "no",
"OPEN_FILE_CACHE": "max=1000 inactive=20s",
"OPEN_FILE_CACHE_ERRORS": "yes",
"OPEN_FILE_CACHE_MIN_USES": "2",
"OPEN_FILE_CACHE_VALID": "30s",
"USE_MODSECURITY": "yes",
"USE_MODSECURITY_CRS": "yes",
"MODSECURITY_CRS_VERSION": "4",
"MODSECURITY_SEC_AUDIT_ENGINE": "RelevantOnly",
"MODSECURITY_SEC_RULE_ENGINE": "On",
"MODSECURITY_SEC_AUDIT_LOG_PARTS": "ABCFHZ",
"REMOTE_PHP": "",
"REMOTE_PHP_PATH": "",
"LOCAL_PHP": "",
"LOCAL_PHP_PATH": "",
"USE_REAL_IP": "no",
"USE_PROXY_PROTOCOL": "no",
"REAL_IP_FROM": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8",
"REAL_IP_HEADER": "X-Forwarded-For",
"REAL_IP_RECURSIVE": "yes",
"REDIRECT_TO": "",
"REDIRECT_TO_REQUEST_URI": "no",
"REDIRECT_TO_STATUS_CODE": "301",
"USE_REVERSE_PROXY": "yes",
"REVERSE_PROXY_INTERCEPT_ERRORS": "yes",
"REVERSE_PROXY_CUSTOM_HOST": "",
"REVERSE_PROXY_HOST": "http://app1:8080",
"REVERSE_PROXY_URL": "/",
"REVERSE_PROXY_WS": "no",
"REVERSE_PROXY_HEADERS": "",
"REVERSE_PROXY_HEADERS_CLIENT": "",
"REVERSE_PROXY_BUFFERING": "yes",
"REVERSE_PROXY_KEEPALIVE": "no",
"REVERSE_PROXY_AUTH_REQUEST": "",
"REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": "",
"REVERSE_PROXY_AUTH_REQUEST_SET": "",
"REVERSE_PROXY_CONNECT_TIMEOUT": "60s",
"REVERSE_PROXY_READ_TIMEOUT": "60s",
"REVERSE_PROXY_SEND_TIMEOUT": "60s",
"REVERSE_PROXY_INCLUDES": "",
"USE_PROXY_CACHE": "no",
"PROXY_CACHE_METHODS": "GET HEAD",
"PROXY_CACHE_MIN_USES": "2",
"PROXY_CACHE_KEY": "$scheme$host$request_uri",
"PROXY_CACHE_VALID": "200=24h 301=1h 302=24h",
"PROXY_NO_CACHE": "$http_pragma $http_authorization",
"PROXY_CACHE_BYPASS": "0",
"USE_REVERSE_SCAN": "no",
"REVERSE_SCAN_PORTS": "22 80 443 3128 8000 8080",
"REVERSE_SCAN_TIMEOUT": "500",
"GENERATE_SELF_SIGNED_SSL": "no",
"SELF_SIGNED_SSL_EXPIRY": "365",
"SELF_SIGNED_SSL_SUBJ": "/CN=www.example.com/",
"USE_UI": "no",
"USE_WHITELIST": "no",
"WHITELIST_IP": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247",
"WHITELIST_RDNS": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com",
"WHITELIST_RDNS_GLOBAL": "yes",
"WHITELIST_ASN": "32934",
"WHITELIST_USER_AGENT": "",
"WHITELIST_URI": ""
},
"low": {
"SERVER_NAME": "app1.example.com",
"SERVER_TYPE": "http",
"LISTEN_STREAM": "yes",
"LISTEN_STREAM_PORT": "1337",
"LISTEN_STREAM_PORT_SSL": "4242",
"USE_UDP": "no",
"IS_DRAFT": "no",
"USE_ANTIBOT": "no",
"ANTIBOT_URI": "/challenge",
"ANTIBOT_TIME_RESOLVE": "60",
"ANTIBOT_TIME_VALID": "86400",
"ANTIBOT_RECAPTCHA_SCORE": "0.7",
"ANTIBOT_RECAPTCHA_SITEKEY": "",
"ANTIBOT_RECAPTCHA_SECRET": "",
"ANTIBOT_HCAPTCHA_SITEKEY": "",
"ANTIBOT_HCAPTCHA_SECRET": "",
"ANTIBOT_TURNSTILE_SITEKEY": "",
"ANTIBOT_TURNSTILE_SECRET": "",
"USE_AUTH_BASIC": "no",
"AUTH_BASIC_LOCATION": "sitewide",
"AUTH_BASIC_USER": "changeme",
"AUTH_BASIC_PASSWORD": "changeme",
"AUTH_BASIC_TEXT": "Restricted area",
"USE_BAD_BEHAVIOR": "yes",
"BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444",
"BAD_BEHAVIOR_THRESHOLD": "10",
"BAD_BEHAVIOR_COUNT_TIME": "60",
"BAD_BEHAVIOR_BAN_TIME": "86400",
"USE_BLACKLIST": "no",
"BLACKLIST_IP": "",
"BLACKLIST_RDNS": ".shodan.io .censys.io",
"BLACKLIST_RDNS_GLOBAL": "yes",
"BLACKLIST_ASN": "",
"BLACKLIST_USER_AGENT": "",
"BLACKLIST_URI": "",
"BLACKLIST_IGNORE_IP": "",
"BLACKLIST_IGNORE_RDNS": "",
"BLACKLIST_IGNORE_ASN": "",
"BLACKLIST_IGNORE_USER_AGENT": "",
"BLACKLIST_IGNORE_URI": "",
"USE_BROTLI": "no",
"BROTLI_TYPES": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml",
"BROTLI_MIN_LENGTH": "1000",
"BROTLI_COMP_LEVEL": "6",
"USE_BUNKERNET": "no",
"USE_CORS": "no",
"CORS_ALLOW_ORIGIN": "self",
"CORS_ALLOW_METHODS": "GET, POST, OPTIONS",
"CORS_ALLOW_HEADERS": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range",
"CORS_ALLOW_CREDENTIALS": "no",
"CORS_EXPOSE_HEADERS": "Content-Length,Content-Range",
"CROSS_ORIGIN_OPENER_POLICY": "same-origin",
"CROSS_ORIGIN_EMBEDDER_POLICY": "require-corp",
"CROSS_ORIGIN_RESOURCE_POLICY": "same-site",
"CORS_MAX_AGE": "86400",
"CORS_DENY_REQUEST": "yes",
"USE_CLIENT_CACHE": "yes",
"CLIENT_CACHE_ETAG": "yes",
"CLIENT_CACHE_CONTROL": "public, max-age=15552000",
"BLACKLIST_COUNTRY": "",
"WHITELIST_COUNTRY": "",
"USE_CUSTOM_SSL": "no",
"CUSTOM_SSL_CERT": "",
"CUSTOM_SSL_KEY": "",
"CUSTOM_SSL_CERT_DATA": "",
"CUSTOM_SSL_KEY_DATA": "",
"USE_DNSBL": "yes",
"ERRORS": "",
"INTERCEPTED_ERROR_CODES": "400 401 403 404 405 413 429 500 501 502 503 504",
"USE_GREYLIST": "no",
"GREYLIST_IP": "",
"GREYLIST_RDNS": "",
"GREYLIST_RDNS_GLOBAL": "yes",
"GREYLIST_ASN": "",
"GREYLIST_USER_AGENT": "",
"GREYLIST_URI": "",
"USE_GZIP": "yes",
"GZIP_TYPES": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml",
"GZIP_MIN_LENGTH": "1000",
"GZIP_COMP_LEVEL": "5",
"GZIP_PROXIED": "no-cache no-store private expired auth",
"INJECT_BODY": "",
"CUSTOM_HEADER": "",
"CUSTOM_HEADER_2": "dzdz",
"REMOVE_HEADERS": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins",
"KEEP_UPSTREAM_HEADERS": "Content-Security-Policy Permissions-Policy X-Frame-Options",
"STRICT_TRANSPORT_SECURITY": "max-age=31536000; includeSubDomains; preload",
"COOKIE_FLAGS": "* HttpOnly SameSite=Lax",
"COOKIE_AUTO_SECURE_FLAG": "yes",
"CONTENT_SECURITY_POLICY": "object-src 'none'; form-action 'self'; frame-ancestors 'self';",
"CONTENT_SECURITY_POLICY_REPORT_ONLY": "no",
"REFERRER_POLICY": "strict-origin-when-cross-origin",
"PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()",
"X_FRAME_OPTIONS": "SAMEORIGIN",
"X_CONTENT_TYPE_OPTIONS": "nosniff",
"X_XSS_PROTECTION": "1; mode=block",
"AUTO_LETS_ENCRYPT": "no",
"EMAIL_LETS_ENCRYPT": "",
"USE_LETS_ENCRYPT_STAGING": "no",
"USE_LIMIT_REQ": "yes",
"LIMIT_REQ_URL": "/",
"LIMIT_REQ_RATE": "2r/s",
"USE_LIMIT_CONN": "yes",
"LIMIT_CONN_MAX_HTTP1": "10",
"LIMIT_CONN_MAX_HTTP2": "100",
"LIMIT_CONN_MAX_STREAM": "10",
"USE_METRICS": "yes",
"REDIRECT_HTTP_TO_HTTPS": "no",
"AUTO_REDIRECT_HTTP_TO_HTTPS": "yes",
"ALLOWED_METHODS": "GET|POST|HEAD",
"MAX_CLIENT_SIZE": "10m",
"SERVE_FILES": "no",
"ROOT_FOLDER": "",
"SSL_PROTOCOLS": "TLSv1.2 TLSv1.3",
"HTTP2": "yes",
"HTTP3": "no",
"HTTP3_ALT_SVC_PORT": "443",
"LISTEN_HTTP": "yes",
"USE_OPEN_FILE_CACHE": "no",
"OPEN_FILE_CACHE": "max=1000 inactive=20s",
"OPEN_FILE_CACHE_ERRORS": "yes",
"OPEN_FILE_CACHE_MIN_USES": "2",
"OPEN_FILE_CACHE_VALID": "30s",
"USE_MODSECURITY": "yes",
"USE_MODSECURITY_CRS": "yes",
"MODSECURITY_CRS_VERSION": "4",
"MODSECURITY_SEC_AUDIT_ENGINE": "RelevantOnly",
"MODSECURITY_SEC_RULE_ENGINE": "On",
"MODSECURITY_SEC_AUDIT_LOG_PARTS": "ABCFHZ",
"REMOTE_PHP": "",
"REMOTE_PHP_PATH": "",
"LOCAL_PHP": "",
"LOCAL_PHP_PATH": "",
"USE_REAL_IP": "no",
"USE_PROXY_PROTOCOL": "no",
"REAL_IP_FROM": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8",
"REAL_IP_HEADER": "X-Forwarded-For",
"REAL_IP_RECURSIVE": "yes",
"REDIRECT_TO": "",
"REDIRECT_TO_REQUEST_URI": "no",
"REDIRECT_TO_STATUS_CODE": "301",
"USE_REVERSE_PROXY": "yes",
"REVERSE_PROXY_INTERCEPT_ERRORS": "yes",
"REVERSE_PROXY_CUSTOM_HOST": "",
"REVERSE_PROXY_HOST": "http://app1:8080",
"REVERSE_PROXY_URL": "/",
"REVERSE_PROXY_WS": "no",
"REVERSE_PROXY_HEADERS": "",
"REVERSE_PROXY_HEADERS_CLIENT": "",
"REVERSE_PROXY_BUFFERING": "yes",
"REVERSE_PROXY_KEEPALIVE": "no",
"REVERSE_PROXY_AUTH_REQUEST": "",
"REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": "",
"REVERSE_PROXY_AUTH_REQUEST_SET": "",
"REVERSE_PROXY_CONNECT_TIMEOUT": "60s",
"REVERSE_PROXY_READ_TIMEOUT": "60s",
"REVERSE_PROXY_SEND_TIMEOUT": "60s",
"REVERSE_PROXY_INCLUDES": "",
"USE_PROXY_CACHE": "no",
"PROXY_CACHE_METHODS": "GET HEAD",
"PROXY_CACHE_MIN_USES": "2",
"PROXY_CACHE_KEY": "$scheme$host$request_uri",
"PROXY_CACHE_VALID": "200=24h 301=1h 302=24h",
"PROXY_NO_CACHE": "$http_pragma $http_authorization",
"PROXY_CACHE_BYPASS": "0",
"USE_REVERSE_SCAN": "no",
"REVERSE_SCAN_PORTS": "22 80 443 3128 8000 8080",
"REVERSE_SCAN_TIMEOUT": "500",
"GENERATE_SELF_SIGNED_SSL": "no",
"SELF_SIGNED_SSL_EXPIRY": "365",
"SELF_SIGNED_SSL_SUBJ": "/CN=www.example.com/",
"USE_UI": "no",
"USE_WHITELIST": "no",
"WHITELIST_IP": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247",
"WHITELIST_RDNS": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com",
"WHITELIST_RDNS_GLOBAL": "yes",
"WHITELIST_ASN": "32934",
"WHITELIST_USER_AGENT": "",
"WHITELIST_URI": ""
}
}
},
"operation": "edit",
"oldServerName": "app1.example.com"
}
{
"type": "card",
"containerColumns": {
"pc": 12,
"tablet": 12,
"mobile": 12
},
"widgets": [
{
"type": "Title",
"data": {
"title": "app1.example.com",
"type": "container",
"lowercase": true
}
},
{
"type": "Subtitle",
"data": {
"subtitle": "services_manage_subtitle",
"type": "container"
}
},
{
"type": "Templates",
"data": {
"templates": {
"raw": {
"default": {
"SERVER_NAME": "app1.example.com",
"SERVER_TYPE": "http",
"LISTEN_STREAM": "yes",
"LISTEN_STREAM_PORT": "1337",
"LISTEN_STREAM_PORT_SSL": "4242",
"USE_UDP": "no",
"IS_DRAFT": "no",
"USE_ANTIBOT": "no",
"ANTIBOT_URI": "/challenge",
"ANTIBOT_TIME_RESOLVE": "60",
"ANTIBOT_TIME_VALID": "86400",
"ANTIBOT_RECAPTCHA_SCORE": "0.7",
"ANTIBOT_RECAPTCHA_SITEKEY": "",
"ANTIBOT_RECAPTCHA_SECRET": "",
"ANTIBOT_HCAPTCHA_SITEKEY": "",
"ANTIBOT_HCAPTCHA_SECRET": "",
"ANTIBOT_TURNSTILE_SITEKEY": "",
"ANTIBOT_TURNSTILE_SECRET": "",
"USE_AUTH_BASIC": "no",
"AUTH_BASIC_LOCATION": "sitewide",
"AUTH_BASIC_USER": "changeme",
"AUTH_BASIC_PASSWORD": "changeme",
"AUTH_BASIC_TEXT": "Restricted area",
"USE_BAD_BEHAVIOR": "yes",
"BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444",
"BAD_BEHAVIOR_THRESHOLD": "10",
"BAD_BEHAVIOR_COUNT_TIME": "60",
"BAD_BEHAVIOR_BAN_TIME": "86400",
"USE_BLACKLIST": "no",
"BLACKLIST_IP": "",
"BLACKLIST_RDNS": ".shodan.io .censys.io",
"BLACKLIST_RDNS_GLOBAL": "yes",
"BLACKLIST_ASN": "",
"BLACKLIST_USER_AGENT": "",
"BLACKLIST_URI": "",
"BLACKLIST_IGNORE_IP": "",
"BLACKLIST_IGNORE_RDNS": "",
"BLACKLIST_IGNORE_ASN": "",
"BLACKLIST_IGNORE_USER_AGENT": "",
"BLACKLIST_IGNORE_URI": "",
"USE_BROTLI": "no",
"BROTLI_TYPES": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml",
"BROTLI_MIN_LENGTH": "1000",
"BROTLI_COMP_LEVEL": "6",
"USE_BUNKERNET": "no",
"USE_CORS": "no",
"CORS_ALLOW_ORIGIN": "self",
"CORS_ALLOW_METHODS": "GET, POST, OPTIONS",
"CORS_ALLOW_HEADERS": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range",
"CORS_ALLOW_CREDENTIALS": "no",
"CORS_EXPOSE_HEADERS": "Content-Length,Content-Range",
"CROSS_ORIGIN_OPENER_POLICY": "same-origin",
"CROSS_ORIGIN_EMBEDDER_POLICY": "require-corp",
"CROSS_ORIGIN_RESOURCE_POLICY": "same-site",
"CORS_MAX_AGE": "86400",
"CORS_DENY_REQUEST": "yes",
"USE_CLIENT_CACHE": "yes",
"CLIENT_CACHE_ETAG": "yes",
"CLIENT_CACHE_CONTROL": "public, max-age=15552000",
"BLACKLIST_COUNTRY": "",
"WHITELIST_COUNTRY": "",
"USE_CUSTOM_SSL": "no",
"CUSTOM_SSL_CERT": "",
"CUSTOM_SSL_KEY": "",
"CUSTOM_SSL_CERT_DATA": "",
"CUSTOM_SSL_KEY_DATA": "",
"USE_DNSBL": "yes",
"ERRORS": "",
"INTERCEPTED_ERROR_CODES": "400 401 403 404 405 413 429 500 501 502 503 504",
"USE_GREYLIST": "no",
"GREYLIST_IP": "",
"GREYLIST_RDNS": "",
"GREYLIST_RDNS_GLOBAL": "yes",
"GREYLIST_ASN": "",
"GREYLIST_USER_AGENT": "",
"GREYLIST_URI": "",
"USE_GZIP": "yes",
"GZIP_TYPES": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml",
"GZIP_MIN_LENGTH": "1000",
"GZIP_COMP_LEVEL": "5",
"GZIP_PROXIED": "no-cache no-store private expired auth",
"INJECT_BODY": "",
"CUSTOM_HEADER": "",
"CUSTOM_HEADER_2": "dzdz",
"REMOVE_HEADERS": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins",
"KEEP_UPSTREAM_HEADERS": "Content-Security-Policy Permissions-Policy X-Frame-Options",
"STRICT_TRANSPORT_SECURITY": "max-age=31536000; includeSubDomains; preload",
"COOKIE_FLAGS": "* HttpOnly SameSite=Lax",
"COOKIE_AUTO_SECURE_FLAG": "yes",
"CONTENT_SECURITY_POLICY": "object-src 'none'; form-action 'self'; frame-ancestors 'self';",
"CONTENT_SECURITY_POLICY_REPORT_ONLY": "no",
"REFERRER_POLICY": "strict-origin-when-cross-origin",
"PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()",
"X_FRAME_OPTIONS": "SAMEORIGIN",
"X_CONTENT_TYPE_OPTIONS": "nosniff",
"X_XSS_PROTECTION": "1; mode=block",
"AUTO_LETS_ENCRYPT": "no",
"EMAIL_LETS_ENCRYPT": "",
"USE_LETS_ENCRYPT_STAGING": "no",
"USE_LIMIT_REQ": "yes",
"LIMIT_REQ_URL": "/",
"LIMIT_REQ_RATE": "2r/s",
"USE_LIMIT_CONN": "yes",
"LIMIT_CONN_MAX_HTTP1": "10",
"LIMIT_CONN_MAX_HTTP2": "100",
"LIMIT_CONN_MAX_STREAM": "10",
"USE_METRICS": "yes",
"REDIRECT_HTTP_TO_HTTPS": "no",
"AUTO_REDIRECT_HTTP_TO_HTTPS": "yes",
"ALLOWED_METHODS": "GET|POST|HEAD",
"MAX_CLIENT_SIZE": "10m",
"SERVE_FILES": "no",
"ROOT_FOLDER": "",
"SSL_PROTOCOLS": "TLSv1.2 TLSv1.3",
"HTTP2": "yes",
"HTTP3": "no",
"HTTP3_ALT_SVC_PORT": "443",
"LISTEN_HTTP": "yes",
"USE_OPEN_FILE_CACHE": "no",
"OPEN_FILE_CACHE": "max=1000 inactive=20s",
"OPEN_FILE_CACHE_ERRORS": "yes",
"OPEN_FILE_CACHE_MIN_USES": "2",
"OPEN_FILE_CACHE_VALID": "30s",
"USE_MODSECURITY": "yes",
"USE_MODSECURITY_CRS": "yes",
"MODSECURITY_CRS_VERSION": "4",
"MODSECURITY_SEC_AUDIT_ENGINE": "RelevantOnly",
"MODSECURITY_SEC_RULE_ENGINE": "On",
"MODSECURITY_SEC_AUDIT_LOG_PARTS": "ABCFHZ",
"REMOTE_PHP": "",
"REMOTE_PHP_PATH": "",
"LOCAL_PHP": "",
"LOCAL_PHP_PATH": "",
"USE_REAL_IP": "no",
"USE_PROXY_PROTOCOL": "no",
"REAL_IP_FROM": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8",
"REAL_IP_HEADER": "X-Forwarded-For",
"REAL_IP_RECURSIVE": "yes",
"REDIRECT_TO": "",
"REDIRECT_TO_REQUEST_URI": "no",
"REDIRECT_TO_STATUS_CODE": "301",
"USE_REVERSE_PROXY": "yes",
"REVERSE_PROXY_INTERCEPT_ERRORS": "yes",
"REVERSE_PROXY_CUSTOM_HOST": "",
"REVERSE_PROXY_HOST": "http://app1:8080",
"REVERSE_PROXY_URL": "/",
"REVERSE_PROXY_WS": "no",
"REVERSE_PROXY_HEADERS": "",
"REVERSE_PROXY_HEADERS_CLIENT": "",
"REVERSE_PROXY_BUFFERING": "yes",
"REVERSE_PROXY_KEEPALIVE": "no",
"REVERSE_PROXY_AUTH_REQUEST": "",
"REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": "",
"REVERSE_PROXY_AUTH_REQUEST_SET": "",
"REVERSE_PROXY_CONNECT_TIMEOUT": "60s",
"REVERSE_PROXY_READ_TIMEOUT": "60s",
"REVERSE_PROXY_SEND_TIMEOUT": "60s",
"REVERSE_PROXY_INCLUDES": "",
"USE_PROXY_CACHE": "no",
"PROXY_CACHE_METHODS": "GET HEAD",
"PROXY_CACHE_MIN_USES": "2",
"PROXY_CACHE_KEY": "$scheme$host$request_uri",
"PROXY_CACHE_VALID": "200=24h 301=1h 302=24h",
"PROXY_NO_CACHE": "$http_pragma $http_authorization",
"PROXY_CACHE_BYPASS": "0",
"USE_REVERSE_SCAN": "no",
"REVERSE_SCAN_PORTS": "22 80 443 3128 8000 8080",
"REVERSE_SCAN_TIMEOUT": "500",
"GENERATE_SELF_SIGNED_SSL": "no",
"SELF_SIGNED_SSL_EXPIRY": "365",
"SELF_SIGNED_SSL_SUBJ": "/CN=www.example.com/",
"USE_UI": "no",
"USE_WHITELIST": "no",
"WHITELIST_IP": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247",
"WHITELIST_RDNS": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com",
"WHITELIST_RDNS_GLOBAL": "yes",
"WHITELIST_ASN": "32934",
"WHITELIST_USER_AGENT": "",
"WHITELIST_URI": ""
},
"low": {
"SERVER_NAME": "app1.example.com",
"SERVER_TYPE": "http",
"LISTEN_STREAM": "yes",
"LISTEN_STREAM_PORT": "1337",
"LISTEN_STREAM_PORT_SSL": "4242",
"USE_UDP": "no",
"IS_DRAFT": "no",
"USE_ANTIBOT": "no",
"ANTIBOT_URI": "/challenge",
"ANTIBOT_TIME_RESOLVE": "60",
"ANTIBOT_TIME_VALID": "86400",
"ANTIBOT_RECAPTCHA_SCORE": "0.7",
"ANTIBOT_RECAPTCHA_SITEKEY": "",
"ANTIBOT_RECAPTCHA_SECRET": "",
"ANTIBOT_HCAPTCHA_SITEKEY": "",
"ANTIBOT_HCAPTCHA_SECRET": "",
"ANTIBOT_TURNSTILE_SITEKEY": "",
"ANTIBOT_TURNSTILE_SECRET": "",
"USE_AUTH_BASIC": "no",
"AUTH_BASIC_LOCATION": "sitewide",
"AUTH_BASIC_USER": "changeme",
"AUTH_BASIC_PASSWORD": "changeme",
"AUTH_BASIC_TEXT": "Restricted area",
"USE_BAD_BEHAVIOR": "yes",
"BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444",
"BAD_BEHAVIOR_THRESHOLD": "10",
"BAD_BEHAVIOR_COUNT_TIME": "60",
"BAD_BEHAVIOR_BAN_TIME": "86400",
"USE_BLACKLIST": "no",
"BLACKLIST_IP": "",
"BLACKLIST_RDNS": ".shodan.io .censys.io",
"BLACKLIST_RDNS_GLOBAL": "yes",
"BLACKLIST_ASN": "",
"BLACKLIST_USER_AGENT": "",
"BLACKLIST_URI": "",
"BLACKLIST_IGNORE_IP": "",
"BLACKLIST_IGNORE_RDNS": "",
"BLACKLIST_IGNORE_ASN": "",
"BLACKLIST_IGNORE_USER_AGENT": "",
"BLACKLIST_IGNORE_URI": "",
"USE_BROTLI": "no",
"BROTLI_TYPES": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml",
"BROTLI_MIN_LENGTH": "1000",
"BROTLI_COMP_LEVEL": "6",
"USE_BUNKERNET": "no",
"USE_CORS": "no",
"CORS_ALLOW_ORIGIN": "self",
"CORS_ALLOW_METHODS": "GET, POST, OPTIONS",
"CORS_ALLOW_HEADERS": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range",
"CORS_ALLOW_CREDENTIALS": "no",
"CORS_EXPOSE_HEADERS": "Content-Length,Content-Range",
"CROSS_ORIGIN_OPENER_POLICY": "same-origin",
"CROSS_ORIGIN_EMBEDDER_POLICY": "require-corp",
"CROSS_ORIGIN_RESOURCE_POLICY": "same-site",
"CORS_MAX_AGE": "86400",
"CORS_DENY_REQUEST": "yes",
"USE_CLIENT_CACHE": "yes",
"CLIENT_CACHE_ETAG": "yes",
"CLIENT_CACHE_CONTROL": "public, max-age=15552000",
"BLACKLIST_COUNTRY": "",
"WHITELIST_COUNTRY": "",
"USE_CUSTOM_SSL": "no",
"CUSTOM_SSL_CERT": "",
"CUSTOM_SSL_KEY": "",
"CUSTOM_SSL_CERT_DATA": "",
"CUSTOM_SSL_KEY_DATA": "",
"USE_DNSBL": "yes",
"ERRORS": "",
"INTERCEPTED_ERROR_CODES": "400 401 403 404 405 413 429 500 501 502 503 504",
"USE_GREYLIST": "no",
"GREYLIST_IP": "",
"GREYLIST_RDNS": "",
"GREYLIST_RDNS_GLOBAL": "yes",
"GREYLIST_ASN": "",
"GREYLIST_USER_AGENT": "",
"GREYLIST_URI": "",
"USE_GZIP": "yes",
"GZIP_TYPES": "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml",
"GZIP_MIN_LENGTH": "1000",
"GZIP_COMP_LEVEL": "5",
"GZIP_PROXIED": "no-cache no-store private expired auth",
"INJECT_BODY": "",
"CUSTOM_HEADER": "",
"CUSTOM_HEADER_2": "dzdz",
"REMOVE_HEADERS": "Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins",
"KEEP_UPSTREAM_HEADERS": "Content-Security-Policy Permissions-Policy X-Frame-Options",
"STRICT_TRANSPORT_SECURITY": "max-age=31536000; includeSubDomains; preload",
"COOKIE_FLAGS": "* HttpOnly SameSite=Lax",
"COOKIE_AUTO_SECURE_FLAG": "yes",
"CONTENT_SECURITY_POLICY": "object-src 'none'; form-action 'self'; frame-ancestors 'self';",
"CONTENT_SECURITY_POLICY_REPORT_ONLY": "no",
"REFERRER_POLICY": "strict-origin-when-cross-origin",
"PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()",
"X_FRAME_OPTIONS": "SAMEORIGIN",
"X_CONTENT_TYPE_OPTIONS": "nosniff",
"X_XSS_PROTECTION": "1; mode=block",
"AUTO_LETS_ENCRYPT": "no",
"EMAIL_LETS_ENCRYPT": "",
"USE_LETS_ENCRYPT_STAGING": "no",
"USE_LIMIT_REQ": "yes",
"LIMIT_REQ_URL": "/",
"LIMIT_REQ_RATE": "2r/s",
"USE_LIMIT_CONN": "yes",
"LIMIT_CONN_MAX_HTTP1": "10",
"LIMIT_CONN_MAX_HTTP2": "100",
"LIMIT_CONN_MAX_STREAM": "10",
"USE_METRICS": "yes",
"REDIRECT_HTTP_TO_HTTPS": "no",
"AUTO_REDIRECT_HTTP_TO_HTTPS": "yes",
"ALLOWED_METHODS": "GET|POST|HEAD",
"MAX_CLIENT_SIZE": "10m",
"SERVE_FILES": "no",
"ROOT_FOLDER": "",
"SSL_PROTOCOLS": "TLSv1.2 TLSv1.3",
"HTTP2": "yes",
"HTTP3": "no",
"HTTP3_ALT_SVC_PORT": "443",
"LISTEN_HTTP": "yes",
"USE_OPEN_FILE_CACHE": "no",
"OPEN_FILE_CACHE": "max=1000 inactive=20s",
"OPEN_FILE_CACHE_ERRORS": "yes",
"OPEN_FILE_CACHE_MIN_USES": "2",
"OPEN_FILE_CACHE_VALID": "30s",
"USE_MODSECURITY": "yes",
"USE_MODSECURITY_CRS": "yes",
"MODSECURITY_CRS_VERSION": "4",
"MODSECURITY_SEC_AUDIT_ENGINE": "RelevantOnly",
"MODSECURITY_SEC_RULE_ENGINE": "On",
"MODSECURITY_SEC_AUDIT_LOG_PARTS": "ABCFHZ",
"REMOTE_PHP": "",
"REMOTE_PHP_PATH": "",
"LOCAL_PHP": "",
"LOCAL_PHP_PATH": "",
"USE_REAL_IP": "no",
"USE_PROXY_PROTOCOL": "no",
"REAL_IP_FROM": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8",
"REAL_IP_HEADER": "X-Forwarded-For",
"REAL_IP_RECURSIVE": "yes",
"REDIRECT_TO": "",
"REDIRECT_TO_REQUEST_URI": "no",
"REDIRECT_TO_STATUS_CODE": "301",
"USE_REVERSE_PROXY": "yes",
"REVERSE_PROXY_INTERCEPT_ERRORS": "yes",
"REVERSE_PROXY_CUSTOM_HOST": "",
"REVERSE_PROXY_HOST": "http://app1:8080",
"REVERSE_PROXY_URL": "/",
"REVERSE_PROXY_WS": "no",
"REVERSE_PROXY_HEADERS": "",
"REVERSE_PROXY_HEADERS_CLIENT": "",
"REVERSE_PROXY_BUFFERING": "yes",
"REVERSE_PROXY_KEEPALIVE": "no",
"REVERSE_PROXY_AUTH_REQUEST": "",
"REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL": "",
"REVERSE_PROXY_AUTH_REQUEST_SET": "",
"REVERSE_PROXY_CONNECT_TIMEOUT": "60s",
"REVERSE_PROXY_READ_TIMEOUT": "60s",
"REVERSE_PROXY_SEND_TIMEOUT": "60s",
"REVERSE_PROXY_INCLUDES": "",
"USE_PROXY_CACHE": "no",
"PROXY_CACHE_METHODS": "GET HEAD",
"PROXY_CACHE_MIN_USES": "2",
"PROXY_CACHE_KEY": "$scheme$host$request_uri",
"PROXY_CACHE_VALID": "200=24h 301=1h 302=24h",
"PROXY_NO_CACHE": "$http_pragma $http_authorization",
"PROXY_CACHE_BYPASS": "0",
"USE_REVERSE_SCAN": "no",
"REVERSE_SCAN_PORTS": "22 80 443 3128 8000 8080",
"REVERSE_SCAN_TIMEOUT": "500",
"GENERATE_SELF_SIGNED_SSL": "no",
"SELF_SIGNED_SSL_EXPIRY": "365",
"SELF_SIGNED_SSL_SUBJ": "/CN=www.example.com/",
"USE_UI": "no",
"USE_WHITELIST": "no",
"WHITELIST_IP": "20.191.45.212 40.88.21.235 40.76.173.151 40.76.163.7 20.185.79.47 52.142.26.175 20.185.79.15 52.142.24.149 40.76.162.208 40.76.163.23 40.76.162.191 40.76.162.247",
"WHITELIST_RDNS": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com",
"WHITELIST_RDNS_GLOBAL": "yes",
"WHITELIST_ASN": "32934",
"WHITELIST_USER_AGENT": "",
"WHITELIST_URI": ""
}
}
]
}
]
},
"operation": "edit",
"oldServerName": "app1.example.com"
}
}
]
}
]

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogMTIsICJ0YWJsZXQiOiAxMiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlRpdGxlIiwgImRhdGEiOiB7InRpdGxlIjogImdsb2JhbF9jb25maWdfdGl0bGUiLCAidHlwZSI6ICJjb250YWluZXIifX0sIHsidHlwZSI6ICJTdWJ0aXRsZSIsICJkYXRhIjogeyJzdWJ0aXRsZSI6ICJnbG9iYWxfY29uZmlnX3N1YnRpdGxlIiwgInR5cGUiOiAiY29udGFpbmVyIn19LCB7InR5cGUiOiAiVGVtcGxhdGVzIiwgImRhdGEiOiB7InRlbXBsYXRlcyI6IHsiciI6IHt9LCAiYSI6IHt9LCAidyI6IHt9fX19XX1d
W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogMTIsICJ0YWJsZXQiOiAxMiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlRpdGxlIiwgImRhdGEiOiB7InRpdGxlIjogImdsb2JhbF9jb25maWdfdGl0bGUiLCAidHlwZSI6ICJjb250YWluZXIifX0sIHsidHlwZSI6ICJTdWJ0aXRsZSIsICJkYXRhIjogeyJzdWJ0aXRsZSI6ICJnbG9iYWxfY29uZmlnX3N1YnRpdGxlIiwgInR5cGUiOiAiY29udGFpbmVyIn19LCB7InR5cGUiOiAiVGVtcGxhdGVzIiwgImRhdGEiOiB7InRlbXBsYXRlcyI6IHsiciI6IHt9LCAiYSI6IHt9LCAidyI6IHt9fX19XX1d

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -47,7 +47,7 @@ export default defineConfig({
instances: resolve(__dirname, "./dashboard/pages/instances/index.html"),
global_config: resolve(
__dirname,
"./dashboard/pages/global-config/index.html"
"./dashboard/pages/global-config/index.html",
),
jobs: resolve(__dirname, "./dashboard/pages/jobs/index.html"),
services: resolve(__dirname, "./dashboard/pages/services/index.html"),

View file

@ -385,7 +385,7 @@ def create_widget(title: str, desc: str, params: List[dict]):
add_keys_not_default += f"""("{param_name}", {param_name}, {param_default}),"""
if add_keys_not_default:
add_keys_not_default = f"""
add_keys_not_default = f"""
# List of params that will be add only if not default value
list_params = [{add_keys_not_default.rstrip(',')}]
for param in list_params:
@ -395,7 +395,7 @@ def create_widget(title: str, desc: str, params: List[dict]):
widget_function = f"""
def {f_title}_widget(
{params_str}
):
):
{desc}
{data}
{add_keys_not_default}