mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2025-10-03 15:56:17 +00:00
Still need to work on validation
This commit is contained in:
@@ -170,7 +170,7 @@ class DashboardConfig:
|
|||||||
|
|
||||||
self.DashboardAPIKeys = self.__getAPIKeys()
|
self.DashboardAPIKeys = self.__getAPIKeys()
|
||||||
|
|
||||||
def __configValidation(self, section : str, key: str, value: Any) -> [bool, str]:
|
def __configValidation(self, section : str, key: str, value: Any) -> tuple[bool, str]:
|
||||||
if (type(value) is str and len(value) == 0
|
if (type(value) is str and len(value) == 0
|
||||||
and section not in ['Email', 'WireGuardConfiguration'] and
|
and section not in ['Email', 'WireGuardConfiguration'] and
|
||||||
(section == 'Peer' and key == 'peer_global_dns')):
|
(section == 'Peer' and key == 'peer_global_dns')):
|
||||||
|
@@ -1109,6 +1109,13 @@ class WireguardConfiguration:
|
|||||||
def updateConfigurationInfo(self, key: str, value) -> tuple[bool, str] | tuple[bool, None]:
|
def updateConfigurationInfo(self, key: str, value) -> tuple[bool, str] | tuple[bool, None]:
|
||||||
if key == "Description":
|
if key == "Description":
|
||||||
self.configurationInfo.Description = value
|
self.configurationInfo.Description = value
|
||||||
|
elif key == "OverridePeerSettings":
|
||||||
|
for key in value.keys():
|
||||||
|
if key == "DNS" and value.get("DNS"):
|
||||||
|
pass
|
||||||
|
|
||||||
|
self.configurationInfo.OverridePeerSettings = (
|
||||||
|
self.configurationInfo.OverridePeerSettings.model_validate(value))
|
||||||
else:
|
else:
|
||||||
return False, "Key does not exist"
|
return False, "Key does not exist"
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import LocaleText from "@/components/text/localeText.vue";
|
import LocaleText from "@/components/text/localeText.vue";
|
||||||
import {onMounted, reactive, ref, useTemplateRef, watch} from "vue";
|
import {reactive, ref, watch} from "vue";
|
||||||
import {WireguardConfigurationsStore} from "@/stores/WireguardConfigurationsStore.js";
|
import {WireguardConfigurationsStore} from "@/stores/WireguardConfigurationsStore.js";
|
||||||
import {fetchPost} from "@/utilities/fetch.js";
|
import {fetchPost} from "@/utilities/fetch.js";
|
||||||
import {DashboardConfigurationStore} from "@/stores/DashboardConfigurationStore.js";
|
import {DashboardConfigurationStore} from "@/stores/DashboardConfigurationStore.js";
|
||||||
@@ -10,6 +10,8 @@ import EditRawConfigurationFile
|
|||||||
from "@/components/configurationComponents/editConfigurationComponents/editRawConfigurationFile.vue";
|
from "@/components/configurationComponents/editConfigurationComponents/editRawConfigurationFile.vue";
|
||||||
import DeleteConfiguration from "@/components/configurationComponents/deleteConfiguration.vue";
|
import DeleteConfiguration from "@/components/configurationComponents/deleteConfiguration.vue";
|
||||||
import ConfigurationBackupRestore from "@/components/configurationComponents/configurationBackupRestore.vue";
|
import ConfigurationBackupRestore from "@/components/configurationComponents/configurationBackupRestore.vue";
|
||||||
|
import EditPeerSettingsOverride
|
||||||
|
from "@/components/configurationComponents/editConfigurationComponents/editPeerSettingsOverride.vue";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
configurationInfo: Object
|
configurationInfo: Object
|
||||||
})
|
})
|
||||||
@@ -114,7 +116,6 @@ const deleteConfigurationModal = ref(false)
|
|||||||
@close="updateConfigurationName = false"
|
@close="updateConfigurationName = false"
|
||||||
:configuration-name="data.Name"
|
:configuration-name="data.Name"
|
||||||
v-if="updateConfigurationName"></UpdateConfigurationName>
|
v-if="updateConfigurationName"></UpdateConfigurationName>
|
||||||
|
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="d-flex align-items-center gap-3">
|
<div class="d-flex align-items-center gap-3">
|
||||||
@@ -211,18 +212,15 @@ const deleteConfigurationModal = ref(false)
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="d-flex align-items-center gap-2 mt-1">
|
||||||
|
<button class="btn btn-sm bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto"
|
||||||
<div class="d-flex align-items-center gap-2 mt-4">
|
|
||||||
<button class="btn bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto"
|
|
||||||
@click="resetForm()"
|
@click="resetForm()"
|
||||||
:disabled="!dataChanged || saving">
|
:disabled="!dataChanged || saving">
|
||||||
<i class="bi bi-arrow-clockwise me-2"></i>
|
<i class="bi bi-arrow-clockwise me-2"></i>
|
||||||
<LocaleText t="Reset"></LocaleText>
|
<LocaleText t="Reset"></LocaleText>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 shadow"
|
<button class="btn btn-sm bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 shadow"
|
||||||
:disabled="!dataChanged || saving"
|
:disabled="!dataChanged || saving"
|
||||||
@click="saveForm()"
|
@click="saveForm()"
|
||||||
>
|
>
|
||||||
@@ -231,6 +229,8 @@ const deleteConfigurationModal = ref(false)
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
<EditPeerSettingsOverride :configuration="configurationInfo"></EditPeerSettingsOverride>
|
||||||
|
<hr>
|
||||||
<h5 class="mb-3">
|
<h5 class="mb-3">
|
||||||
<LocaleText t="Danger Zone"></LocaleText>
|
<LocaleText t="Danger Zone"></LocaleText>
|
||||||
</h5>
|
</h5>
|
||||||
@@ -255,7 +255,6 @@ const deleteConfigurationModal = ref(false)
|
|||||||
<LocaleText t="Delete Configuration"></LocaleText>
|
<LocaleText t="Delete Configuration"></LocaleText>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -0,0 +1,136 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import LocaleText from "@/components/text/localeText.vue";
|
||||||
|
import { fetchPost } from "@/utilities/fetch.js"
|
||||||
|
import {onMounted, reactive, ref} from "vue";
|
||||||
|
const props = defineProps(['configuration'])
|
||||||
|
const saving = ref(false)
|
||||||
|
const overridePeerSettings = ref({...props.configuration.Info.OverridePeerSettings})
|
||||||
|
const edited = ref(false)
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
document.querySelectorAll("#editPeerSettingsOverride input").forEach(
|
||||||
|
x => x.addEventListener("change", () => {
|
||||||
|
edited.value = true
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
const resetForm = () => {
|
||||||
|
overridePeerSettings.value = props.configuration.Info.OverridePeerSettings
|
||||||
|
edited.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
const submitForm = async () => {
|
||||||
|
await fetchPost("/api/updateWireguardConfigurationInfo", {
|
||||||
|
Name: props.configuration.Name,
|
||||||
|
Key: "OverridePeerSettings",
|
||||||
|
Value: overridePeerSettings.value
|
||||||
|
}, (res) => {
|
||||||
|
if (res.status){
|
||||||
|
props.configuration.Info.OverridePeerSettings = overridePeerSettings.value
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div id="editPeerSettingsOverride">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<LocaleText t="Override Peer Settings"></LocaleText>
|
||||||
|
</h5>
|
||||||
|
<h6 class="mb-3 text-muted">
|
||||||
|
<small>
|
||||||
|
<LocaleText t="Only apply to peers in this configuration"></LocaleText>
|
||||||
|
</small>
|
||||||
|
</h6>
|
||||||
|
<div class="d-flex gap-2 flex-column">
|
||||||
|
<div>
|
||||||
|
<label for="override_dns" class="form-label">
|
||||||
|
<small class="text-muted">
|
||||||
|
<LocaleText t="DNS"></LocaleText>
|
||||||
|
</small>
|
||||||
|
</label>
|
||||||
|
<input type="text" class="form-control form-control-sm rounded-3"
|
||||||
|
:disabled="saving"
|
||||||
|
v-model="overridePeerSettings.DNS"
|
||||||
|
id="override_dns">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="override_endpoint_allowed_ips" class="form-label">
|
||||||
|
<small class="text-muted">
|
||||||
|
<LocaleText t="Endpoint Allowed IPs"></LocaleText>
|
||||||
|
</small>
|
||||||
|
</label>
|
||||||
|
<input type="text" class="form-control form-control-sm rounded-3"
|
||||||
|
:disabled="saving"
|
||||||
|
v-model="overridePeerSettings.EndpointAllowedIPs"
|
||||||
|
id="override_endpoint_allowed_ips">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="override_listen_port" class="form-label">
|
||||||
|
<small class="text-muted">
|
||||||
|
<LocaleText t="Listen Port"></LocaleText>
|
||||||
|
</small>
|
||||||
|
</label>
|
||||||
|
<input type="text" class="form-control form-control-sm rounded-3"
|
||||||
|
:disabled="saving"
|
||||||
|
v-model="overridePeerSettings.ListenPort"
|
||||||
|
id="override_listen_port">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="override_mtu" class="form-label">
|
||||||
|
<small class="text-muted">
|
||||||
|
<LocaleText t="MTU"></LocaleText>
|
||||||
|
</small>
|
||||||
|
</label>
|
||||||
|
<input type="text"
|
||||||
|
class="form-control form-control-sm rounded-3"
|
||||||
|
:disabled="saving"
|
||||||
|
v-model="overridePeerSettings.MTU"
|
||||||
|
id="override_mtu">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="override_peer_remote_endpoint" class="form-label">
|
||||||
|
<small class="text-muted">
|
||||||
|
<LocaleText t="Peer Remote Endpoint"></LocaleText>
|
||||||
|
</small>
|
||||||
|
</label>
|
||||||
|
<input type="text" class="form-control form-control-sm rounded-3"
|
||||||
|
:disabled="saving"
|
||||||
|
v-model="overridePeerSettings.PeerRemoteEndpoint"
|
||||||
|
id="override_peer_remote_endpoint">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="override_persistent_keepalive" class="form-label">
|
||||||
|
<small class="text-muted">
|
||||||
|
<LocaleText t="Persistent Keepalive"></LocaleText>
|
||||||
|
</small>
|
||||||
|
</label>
|
||||||
|
<input type="text" class="form-control form-control-sm rounded-3"
|
||||||
|
:disabled="saving"
|
||||||
|
v-model="overridePeerSettings.PersistentKeepalive"
|
||||||
|
id="override_persistent_keepalive">
|
||||||
|
</div>
|
||||||
|
<div class="d-flex mt-1 gap-2">
|
||||||
|
<button
|
||||||
|
:class="{disabled: !edited}"
|
||||||
|
@click="resetForm()"
|
||||||
|
class="btn btn-sm bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto">
|
||||||
|
<i class="bi bi-arrow-clockwise me-2"></i>
|
||||||
|
<LocaleText t="Reset"></LocaleText>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
:class="{disabled: !edited}"
|
||||||
|
@click="submitForm()"
|
||||||
|
class="btn btn-sm bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 shadow">
|
||||||
|
<i class="bi bi-save-fill me-2"></i>
|
||||||
|
<LocaleText t="Save"></LocaleText>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
Reference in New Issue
Block a user